From d0e1f233fcf26832953f38e118cf8dafdf2c8e88 Mon Sep 17 00:00:00 2001 From: Olli Meier Date: Thu, 26 Sep 2024 14:21:42 +0200 Subject: [PATCH 1/6] First draft of pointer subtool 'Scaling edit tool behavior' --- src/fontra/client/lang/en.json | 1 + src/fontra/client/lang/zh-CN.json | 1 + src/fontra/views/editor/edit-tools-pointer.js | 19 +++++++++++++++++++ src/fontra/views/editor/editor.css | 6 ++++-- src/fontra/views/editor/editor.js | 4 ++-- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/fontra/client/lang/en.json b/src/fontra/client/lang/en.json index f6de03c07..b926913d6 100644 --- a/src/fontra/client/lang/en.json +++ b/src/fontra/client/lang/en.json @@ -76,6 +76,7 @@ "editor.pen-tool-cubic": "Pen Tool (cubic)", "editor.pen-tool-quad": "Pen Tool (quadratic)", "editor.pointer-tool": "Pointer Tool", + "editor.pointer-tool-scale": "Pointer Tool (Scaling edit tool behavior)", "editor.power-ruler-tool": "Power Ruler Tool", "editor.shape-tool": "Shape Tool", "editor.shape-tool-ellipse": "Shape Tool Ellipse", diff --git a/src/fontra/client/lang/zh-CN.json b/src/fontra/client/lang/zh-CN.json index 3a5524263..03a5a1b92 100644 --- a/src/fontra/client/lang/zh-CN.json +++ b/src/fontra/client/lang/zh-CN.json @@ -75,6 +75,7 @@ "editor.pen-tool-cubic": "Pen Tool (cubic)", "editor.pen-tool-quad": "Pen Tool (quadratic)", "editor.pointer-tool": "指针工具", + "editor.pointer-tool-scale": "指针工具 (Scaling edit tool behavior)", "editor.power-ruler-tool": "Power 测量尺工具", "editor.shape-tool": "Shape Tool", "editor.shape-tool-ellipse": "椭圆工具", diff --git a/src/fontra/views/editor/edit-tools-pointer.js b/src/fontra/views/editor/edit-tools-pointer.js index 933674069..e35c7163f 100644 --- a/src/fontra/views/editor/edit-tools-pointer.js +++ b/src/fontra/views/editor/edit-tools-pointer.js @@ -34,6 +34,11 @@ const transformHandleMargin = 6; const transformHandleSize = 8; const rotationHandleSizeFactor = 1.2; +export class PointerTools { + identifier = "pointer-tools"; + subTools = [PointerTool, PointerToolScale]; +} + export class PointerTool extends BaseTool { iconPath = "/images/pointer.svg"; identifier = "pointer-tool"; @@ -759,6 +764,20 @@ registerVisualizationLayerDefinition({ }, }); +export class PointerToolScale extends PointerTool { + iconPath = "/images/pointeradd.svg"; // TODO: find/create/add proper icon + identifier = "pointer-tool-scale"; + + activate() { + this.setCursor(); + this.sceneController.experimentalFeatures.scalingEditBehavior = true; + } + + deactivate() { + this.sceneController.experimentalFeatures.scalingEditBehavior = false; + } +} + function getTransformHandles(transformBounds, margin) { const { width, height } = rectSize(transformBounds); diff --git a/src/fontra/views/editor/editor.css b/src/fontra/views/editor/editor.css index 78ec89423..1b1b32121 100644 --- a/src/fontra/views/editor/editor.css +++ b/src/fontra/views/editor/editor.css @@ -424,11 +424,13 @@ body { display: inline-grid; } -.tool-button:first-child { +.tool-button:first-child, +.subtool-button:first-child { border-radius: 0.65em 0 0 0.65em; } -.tool-button:last-child { +.tool-button:last-child, +.subtool-button:last-child { border-radius: 0 0.65em 0.65em 0; } diff --git a/src/fontra/views/editor/editor.js b/src/fontra/views/editor/editor.js index 54c7f1e6b..fd7192b49 100644 --- a/src/fontra/views/editor/editor.js +++ b/src/fontra/views/editor/editor.js @@ -58,7 +58,7 @@ import { CJKDesignFrame } from "./cjk-design-frame.js"; import { HandTool } from "./edit-tools-hand.js"; import { KnifeTool } from "./edit-tools-knife.js"; import { PenTool } from "./edit-tools-pen.js"; -import { PointerTool } from "./edit-tools-pointer.js"; +import { PointerTools } from "./edit-tools-pointer.js"; import { PowerRulerTool } from "./edit-tools-power-ruler.js"; import { ShapeTool } from "./edit-tools-shape.js"; import { SceneController } from "./scene-controller.js"; @@ -978,7 +978,7 @@ export class EditorController { this.tools = {}; this.topLevelTools = {}; const editToolClasses = [ - PointerTool, + PointerTools, PenTool, KnifeTool, ShapeTool, From f12006066d19663cb4d369e811bc6be207817d2b Mon Sep 17 00:00:00 2001 From: Olli Meier Date: Tue, 1 Oct 2024 11:05:27 +0200 Subject: [PATCH 2/6] Fix first button design with pure CSS when subtool is visible. --- src/fontra/views/editor/editor.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/fontra/views/editor/editor.css b/src/fontra/views/editor/editor.css index 1b1b32121..9ae8e3101 100644 --- a/src/fontra/views/editor/editor.css +++ b/src/fontra/views/editor/editor.css @@ -424,6 +424,12 @@ body { display: inline-grid; } +.tool-button:first-child:has( + .subtool-button:nth-child(2)[style*="visibility: visible;"] + ) { + border-radius: 0.65em 0 0 0; +} + .tool-button:first-child, .subtool-button:first-child { border-radius: 0.65em 0 0 0.65em; From 752d80747f1a9e4c784a3c4b654492639d0dd669 Mon Sep 17 00:00:00 2001 From: Olli Meier Date: Tue, 1 Oct 2024 11:19:29 +0200 Subject: [PATCH 3/6] Add new icon for PointerToolScale --- icons/fontra-icons.ufo/glyphs/contents.plist | 2 + .../fontra-icons.ufo/glyphs/pointerscale.glif | 127 ++++++++++++++++++ src/fontra/client/images/pointerscale.svg | 1 + src/fontra/views/editor/edit-tools-pointer.js | 2 +- 4 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 icons/fontra-icons.ufo/glyphs/pointerscale.glif create mode 100644 src/fontra/client/images/pointerscale.svg diff --git a/icons/fontra-icons.ufo/glyphs/contents.plist b/icons/fontra-icons.ufo/glyphs/contents.plist index 16ebb2c2a..ff2b83160 100644 --- a/icons/fontra-icons.ufo/glyphs/contents.plist +++ b/icons/fontra-icons.ufo/glyphs/contents.plist @@ -84,6 +84,8 @@ pointeradd.glif pointeraddquad pointeraddquad.glif + pointerscale + pointerscale.glif q q.glif r diff --git a/icons/fontra-icons.ufo/glyphs/pointerscale.glif b/icons/fontra-icons.ufo/glyphs/pointerscale.glif new file mode 100644 index 000000000..aa2d05470 --- /dev/null +++ b/icons/fontra-icons.ufo/glyphs/pointerscale.glif @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/fontra/client/images/pointerscale.svg b/src/fontra/client/images/pointerscale.svg new file mode 100644 index 000000000..cc73bed0f --- /dev/null +++ b/src/fontra/client/images/pointerscale.svg @@ -0,0 +1 @@ + diff --git a/src/fontra/views/editor/edit-tools-pointer.js b/src/fontra/views/editor/edit-tools-pointer.js index e35c7163f..4bab67aa2 100644 --- a/src/fontra/views/editor/edit-tools-pointer.js +++ b/src/fontra/views/editor/edit-tools-pointer.js @@ -765,7 +765,7 @@ registerVisualizationLayerDefinition({ }); export class PointerToolScale extends PointerTool { - iconPath = "/images/pointeradd.svg"; // TODO: find/create/add proper icon + iconPath = "/images/pointerscale.svg"; identifier = "pointer-tool-scale"; activate() { From c5a18651a2e44e966f9cda727078662161c2fa42 Mon Sep 17 00:00:00 2001 From: Olli Meier Date: Tue, 1 Oct 2024 11:23:05 +0200 Subject: [PATCH 4/6] CSS move code a bit down --- src/fontra/views/editor/editor.css | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/fontra/views/editor/editor.css b/src/fontra/views/editor/editor.css index 9ae8e3101..84d10e041 100644 --- a/src/fontra/views/editor/editor.css +++ b/src/fontra/views/editor/editor.css @@ -424,17 +424,17 @@ body { display: inline-grid; } +.tool-button:first-child, +.subtool-button:first-child { + border-radius: 0.65em 0 0 0.65em; +} + .tool-button:first-child:has( .subtool-button:nth-child(2)[style*="visibility: visible;"] ) { border-radius: 0.65em 0 0 0; } -.tool-button:first-child, -.subtool-button:first-child { - border-radius: 0.65em 0 0 0.65em; -} - .tool-button:last-child, .subtool-button:last-child { border-radius: 0 0.65em 0.65em 0; From 458d03c7803cb7ef23a238ae719ceaa9c9b8474b Mon Sep 17 00:00:00 2001 From: GaetanBaehr Date: Tue, 1 Oct 2024 12:09:17 +0200 Subject: [PATCH 5/6] pointerscale --- .../fontra-icons.ufo/glyphs/pointerscale.glif | 181 +++++++----------- icons/fontra-icons.ufo/lib.plist | 13 ++ 2 files changed, 77 insertions(+), 117 deletions(-) diff --git a/icons/fontra-icons.ufo/glyphs/pointerscale.glif b/icons/fontra-icons.ufo/glyphs/pointerscale.glif index aa2d05470..08485ec09 100644 --- a/icons/fontra-icons.ufo/glyphs/pointerscale.glif +++ b/icons/fontra-icons.ufo/glyphs/pointerscale.glif @@ -1,127 +1,74 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/fontra-icons.ufo/lib.plist b/icons/fontra-icons.ufo/lib.plist index 57276fcac..17b0892c8 100644 --- a/icons/fontra-icons.ufo/lib.plist +++ b/icons/fontra-icons.ufo/lib.plist @@ -92,6 +92,19 @@ alignright reference ruler + _cursor-rotate-hotspot-0-0 + _cursor-rotate-temp + cursor-rotate-bottom-center + cursor-rotate-bottom-left + cursor-rotate-bottom-right + cursor-rotate-middle-left + cursor-rotate-middle-right + cursor-rotate-top-center + cursor-rotate-top-left + cursor-rotate-top-right + pointeraddquad + pointerscale + skew From fb8e067fffa2029dcc6f637c9b79cf7daf40b0ff Mon Sep 17 00:00:00 2001 From: Just van Rossum Date: Tue, 1 Oct 2024 12:19:37 +0200 Subject: [PATCH 6/6] Export new icon as SVG --- src/fontra/client/images/pointerscale.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fontra/client/images/pointerscale.svg b/src/fontra/client/images/pointerscale.svg index cc73bed0f..0226847cb 100644 --- a/src/fontra/client/images/pointerscale.svg +++ b/src/fontra/client/images/pointerscale.svg @@ -1 +1 @@ - +