From 6892348c3d5e5d14864683edda81795e37dd3f85 Mon Sep 17 00:00:00 2001 From: David Luzar Date: Fri, 17 Jan 2020 15:43:24 +0100 Subject: [PATCH] Revert 400 and 420 (#422) * revert #400 font file * Revert "Revert "Set scale for export images (#416)" (#420)" This reverts commit d603921234b9ae1483f9f0e0f79fb1c3d0878370. --- public/FG_Virgil.ttf | Bin 116468 -> 137308 bytes public/index.html | 2 +- src/components/ExportDialog.css | 6 ++++ src/components/ExportDialog.tsx | 37 ++++++++++++++++---- src/components/Stack.tsx | 2 +- src/components/ToolIcon.scss | 6 ++++ src/components/ToolIcon.tsx | 12 +++++-- src/index.tsx | 23 +++++++----- src/scene/data.ts | 60 ++++++++++---------------------- src/styles.scss | 2 +- 10 files changed, 88 insertions(+), 62 deletions(-) diff --git a/public/FG_Virgil.ttf b/public/FG_Virgil.ttf index ac26d60b15fd42aefb8c2339002d10e4129b0567..12948ccfce5af128e9e60fdb5bafd5981c26d75b 100644 GIT binary patch delta 31680 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 delta 10629 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 Zyi-n3q&UPwD$?&qgd*bm|NeQ{{{@MIsviIV diff --git a/public/index.html b/public/index.html index 5fe5298b9..60ae3a8e6 100644 --- a/public/index.html +++ b/public/index.html @@ -53,7 +53,7 @@ void; + export function ExportDialog({ elements, appState, @@ -32,11 +37,12 @@ export function ExportDialog({ exportPadding?: number; actionManager: ActionsManagerInterface; syncActionResult: UpdaterFn; - onExportToPng(elements: readonly ExcalidrawElement[]): void; - onExportToClipboard(elements: readonly ExcalidrawElement[]): void; + onExportToPng: ExportCB; + onExportToClipboard: ExportCB; }) { const someElementIsSelected = elements.some(element => element.isSelected); const [modalIsShown, setModalIsShown] = useState(false); + const [scale, setScale] = useState(defaultScale); const [exportSelected, setExportSelected] = useState(someElementIsSelected); const previeRef = useRef(null); const { exportBackground, viewBackgroundColor } = appState; @@ -54,7 +60,8 @@ export function ExportDialog({ const canvas = getExportCanvasPreview(exportedElements, { exportBackground, viewBackgroundColor, - exportPadding + exportPadding, + scale }); previewNode?.appendChild(canvas); return () => { @@ -65,7 +72,8 @@ export function ExportDialog({ exportedElements, exportBackground, exportPadding, - viewBackgroundColor + viewBackgroundColor, + scale ]); function handleClose() { @@ -98,7 +106,7 @@ export function ExportDialog({ icon={downloadFile} title="Export to PNG" aria-label="Export to PNG" - onClick={() => onExportToPng(exportedElements)} + onClick={() => onExportToPng(exportedElements, scale)} /> {probablySupportsClipboard && ( @@ -107,7 +115,9 @@ export function ExportDialog({ icon={clipboard} title="Copy to clipboard" aria-label="Copy to clipboard" - onClick={() => onExportToClipboard(exportedElements)} + onClick={() => + onExportToClipboard(exportedElements, scale) + } /> )} @@ -119,6 +129,21 @@ export function ExportDialog({ syncActionResult )} +
+ + {scales.map(s => ( + setScale(s)} + /> + ))} + +
{actionManager.renderAction( "changeExportBackground", elements, diff --git a/src/components/Stack.tsx b/src/components/Stack.tsx index 7e40b4cb5..f1b9c329e 100644 --- a/src/components/Stack.tsx +++ b/src/components/Stack.tsx @@ -5,7 +5,7 @@ import React from "react"; type StackProps = { children: React.ReactNode; gap?: number; - align?: "start" | "center" | "end"; + align?: "start" | "center" | "end" | "baseline"; }; function RowStack({ children, gap, align }: StackProps) { diff --git a/src/components/ToolIcon.scss b/src/components/ToolIcon.scss index 64a5d8f0d..f5225c4a3 100644 --- a/src/components/ToolIcon.scss +++ b/src/components/ToolIcon.scss @@ -20,6 +20,12 @@ } } +.ToolIcon_size_s .ToolIcon__icon { + width: 25px; + height: 25px; + font-size: 0.8em; +} + .ToolIcon_type_button { padding: 0; border: none; diff --git a/src/components/ToolIcon.tsx b/src/components/ToolIcon.tsx index 374149eb8..84a2a5067 100644 --- a/src/components/ToolIcon.tsx +++ b/src/components/ToolIcon.tsx @@ -2,6 +2,8 @@ import "./ToolIcon.scss"; import React from "react"; +type ToolIconSize = "s" | "m"; + type ToolIconProps = | { type: "button"; @@ -11,6 +13,7 @@ type ToolIconProps = name?: string; id?: string; onClick?(): void; + size?: ToolIconSize; } | { type: "radio"; @@ -20,12 +23,17 @@ type ToolIconProps = id?: string; checked: boolean; onChange?(): void; + size?: ToolIconSize; }; +const DEFAULT_SIZE: ToolIconSize = "m"; + export function ToolIcon(props: ToolIconProps) { + const sizeCn = `ToolIcon_size_${props.size || DEFAULT_SIZE}`; + if (props.type === "button") return ( -