aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/StyleProvider.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/StyleProvider.tsx')
-rw-r--r--src/client/views/StyleProvider.tsx47
1 files changed, 34 insertions, 13 deletions
diff --git a/src/client/views/StyleProvider.tsx b/src/client/views/StyleProvider.tsx
index 44bea57eb..02e0a34d8 100644
--- a/src/client/views/StyleProvider.tsx
+++ b/src/client/views/StyleProvider.tsx
@@ -53,14 +53,25 @@ export function styleFromLayoutString(doc: Doc, props: FieldViewProps, scale: nu
return style;
}
-export function wavyBorderPath(pw: number, ph: number, inset: number = 0.05) {
- return `M ${pw * 0.5} ${ph * inset} C ${pw * 0.6} ${ph * inset} ${pw * (1 - 2 * inset)} 0 ${pw * (1 - inset)} ${ph * inset} C ${pw} ${ph * (2 * inset)} ${pw * (1 - inset)} ${ph * 0.25} ${pw * (1 - inset)} ${ph * 0.3} C ${
- pw * (1 - inset)
- } ${ph * 0.4} ${pw} ${ph * (1 - 2 * inset)} ${pw * (1 - inset)} ${ph * (1 - inset)} C ${pw * (1 - 2 * inset)} ${ph} ${pw * 0.6} ${ph * (1 - inset)} ${pw * 0.5} ${ph * (1 - inset)} C ${pw * 0.3} ${ph * (1 - inset)} ${pw * (2 * inset)} ${ph} ${
- pw * inset
- } ${ph * (1 - inset)} C 0 ${ph * (1 - 2 * inset)} ${pw * inset} ${ph * 0.8} ${pw * inset} ${ph * 0.75} C ${pw * inset} ${ph * 0.7} 0 ${ph * (2 * inset)} ${pw * inset} ${ph * inset} C ${pw * (2 * inset)} 0 ${pw * 0.25} ${ph * inset} ${
- pw * 0.5
- } ${ph * inset}`;
+export function border(doc: Doc, pw: number, ph: number, rad: number = 0, inset: number = 0) {
+ if (!rad) rad = 0;
+ const width = pw * inset;
+ const height = ph * inset;
+
+ const radius = Math.min(rad, (pw - 2 * width) / 2, (ph - 2 * height) / 2);
+
+ return `
+ M ${width + radius} ${height}
+ L ${pw - width - radius} ${height}
+ A ${radius} ${radius} 0 0 1 ${pw - width} ${height + radius}
+ L ${pw - width} ${ph - height - radius}
+ A ${radius} ${radius} 0 0 1 ${pw - width - radius} ${ph - height}
+ L ${width + radius} ${ph - height}
+ A ${radius} ${radius} 0 0 1 ${width} ${ph - height - radius}
+ L ${width} ${height + radius}
+ A ${radius} ${radius} 0 0 1 ${width + radius} ${height}
+ Z
+ `;
}
let _filterOpener: () => void;
@@ -194,18 +205,28 @@ export function DefaultStyleProvider(doc: Opt<Doc>, props: Opt<FieldViewProps &
const rounding = StrCast(doc?.[fieldKey + 'borderRounding'], StrCast(doc?.layout_borderRounding, doc?._type_collection === CollectionViewType.Pile ? '50%' : ''));
return (doc?.[StrCast(doc?.layout_fieldKey)] instanceof Doc || doc?.isTemplateDoc) ? StrCast(doc._layout_borderRounding,rounding) : rounding;
}
+ // Doc.IsComicStyle(doc) &&
+ // renderDepth &&
+ // !doc?.layout_isSvg &&
+ //case StyleProp.
case StyleProp.BorderPath: {
- const borderPath = Doc.IsComicStyle(doc) &&
- renderDepth &&
- !doc?.layout_isSvg && { path: wavyBorderPath(PanelWidth?.() || 0, PanelHeight?.() || 0), fill: wavyBorderPath(PanelWidth?.() || 0, PanelHeight?.() || 0, 0.08), width: 3 };
+ const docWidth = Number(doc?._width);
+ const borderWidth = Number(StrCast(doc?.borderWidth));
+ //console.log(borderWidth);
+ const ratio = borderWidth / docWidth;
+ const borderRadius = Number(StrCast(layoutDoc?._layout_borderRounding).replace('px', ''));
+ const radiusRatio = borderRadius / docWidth;
+ const radius = radiusRatio * ((2 * borderWidth) + docWidth);
+
+ const borderPath = doc && border(doc, NumCast(doc._width), NumCast(doc._height), radius, -ratio/2 ?? 0);
return !borderPath
? null
: {
- clipPath: `path('${borderPath.path}')`,
+ clipPath: `path('${borderPath}')`,
jsx: (
<div key="border2" className="documentView-customBorder" style={{ pointerEvents: 'none' }}>
<svg style={{ overflow: 'visible', height: '100%' }} viewBox={`0 0 ${PanelWidth?.()} ${PanelHeight?.()}`}>
- <path d={borderPath.path} style={{ stroke: 'black', fill: 'transparent', strokeWidth: borderPath.width }} />
+ <path d={borderPath} style={{ stroke: StrCast(doc?.borderColor), fill: 'transparent', strokeWidth: `${StrCast(doc?.borderWidth)}px` }} />
</svg>
</div>
),