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
+
+
+
-
-
-
-
>
);
};