From 6502d09177a76e8a52deeb581bc47ecf0ef088fa Mon Sep 17 00:00:00 2001 From: Atul Varma Date: Tue, 16 Feb 2021 20:47:12 -0500 Subject: [PATCH] Auto-resize SVG as needed. --- lib/pages/creature-page.tsx | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/pages/creature-page.tsx b/lib/pages/creature-page.tsx index caa3b7b..6339420 100644 --- a/lib/pages/creature-page.tsx +++ b/lib/pages/creature-page.tsx @@ -1,4 +1,4 @@ -import React, { useContext, useState } from "react"; +import React, { useContext, useEffect, useRef, useState } from "react"; import { SvgVocabulary } from "../svg-vocabulary"; import { createSvgSymbolContext, @@ -240,7 +240,14 @@ function randomlyReplaceParts(rng: Random, creature: JSX.Element): JSX.Element { }); } +const SVG_PADDING = 5; + export const CreaturePage: React.FC<{}> = () => { + const ref = useRef(null); + const [x, setX] = useState(0); + const [y, setY] = useState(0); + const [width, setWidth] = useState(1); + const [height, setHeight] = useState(1); const [showSpecs, setShowSpecs] = useState(false); const [randomSeed, setRandomSeed] = useState(null); const defaultCtx = useContext(CreatureContext); @@ -254,6 +261,16 @@ export const CreaturePage: React.FC<{}> = () => { ? EYE_CREATURE : randomlyReplaceParts(new Random(randomSeed), EYE_CREATURE); + useEffect(() => { + if (ref.current) { + const bbox = ref.current.getBBox(); + setX(bbox.x - SVG_PADDING); + setY(bbox.y - SVG_PADDING); + setWidth(bbox.width + SVG_PADDING * 2); + setHeight(bbox.height + SVG_PADDING * 2); + } + }); + return ( <>

Creature!

@@ -267,16 +284,21 @@ export const CreaturePage: React.FC<{}> = () => { Show specs

+

+ +

- + {creature} -

- -

); };