diff --git a/lib/pages/mandala-page.tsx b/lib/pages/mandala-page.tsx index 431cdef..78f4e2f 100644 --- a/lib/pages/mandala-page.tsx +++ b/lib/pages/mandala-page.tsx @@ -32,6 +32,8 @@ import { Checkbox } from "../checkbox"; type ExtendedMandalaCircleParams = MandalaCircleParams & { scaling: number; rotation: number; + symbolScaling: number; + symbolRotation: number; }; const CIRCLE_1_DEFAULTS: ExtendedMandalaCircleParams = { @@ -40,6 +42,8 @@ const CIRCLE_1_DEFAULTS: ExtendedMandalaCircleParams = { numSymbols: 6, scaling: 1, rotation: 0, + symbolScaling: 1, + symbolRotation: 0, }; const CIRCLE_2_DEFAULTS: ExtendedMandalaCircleParams = { @@ -48,6 +52,8 @@ const CIRCLE_2_DEFAULTS: ExtendedMandalaCircleParams = { numSymbols: 3, scaling: 0.5, rotation: 0, + symbolScaling: 1, + symbolRotation: 0, }; const RADIUS: NumericRange = { @@ -93,11 +99,12 @@ type MandalaCircleParams = { data: SvgSymbolData; radius: number; numSymbols: number; + symbolTransforms?: SvgTransform[]; }; -const MandalaCircle: React.FC = ( - props -) => { +type MandalaCircleProps = MandalaCircleParams & SvgSymbolContext; + +const MandalaCircle: React.FC = (props) => { const degreesPerItem = 360 / props.numSymbols; const { translation, rotation } = getAttachmentTransforms( { @@ -110,7 +117,17 @@ const MandalaCircle: React.FC = ( const symbol = ( = ( const ExtendedMandalaCircle: React.FC< ExtendedMandalaCircleParams & SvgSymbolContext -> = (props) => ( - - - -); +> = ({ scaling, rotation, symbolScaling, symbolRotation, ...props }) => { + props = { + ...props, + symbolTransforms: [svgScale(symbolScaling), svgRotate(symbolRotation)], + }; + + return ( + + + + ); +}; const ExtendedMandalaCircleParamsWidget: React.FC<{ idPrefix: string; @@ -184,6 +206,20 @@ const ExtendedMandalaCircleParamsWidget: React.FC<{ onChange={(rotation) => onChange({ ...value, rotation })} {...ROTATION} /> + onChange({ ...value, symbolScaling })} + {...SCALING} + /> + onChange({ ...value, symbolRotation })} + {...ROTATION} + /> ); }; diff --git a/lib/svg-transform.tsx b/lib/svg-transform.tsx index 1d9956f..c0b19b5 100644 --- a/lib/svg-transform.tsx +++ b/lib/svg-transform.tsx @@ -2,7 +2,7 @@ import React from "react"; import { Point } from "../vendor/bezier-js"; import { reversePoint } from "./point"; -type SvgTransform = +export type SvgTransform = | { kind: "translate"; amount: Point;