From 10147b6abd83c7d1ed06d366221bdd0787c34f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Fri, 26 Jun 2026 11:53:11 +0200 Subject: [PATCH] :bug: Fix pixel grid and board pixel grid shown on top of rulers (#10430) * :bug: Fix pixel grid shown on top of rulers * :bug: Fix board pixel grid being rendered above rulers --- .../app/main/ui/workspace/viewport/frame_grid.cljs | 8 ++++++-- .../src/app/main/ui/workspace/viewport/rulers.cljs | 13 +++++++++++++ .../src/app/main/ui/workspace/viewport/widgets.cljs | 6 +++++- .../src/app/main/ui/workspace/viewport_wasm.cljs | 7 +++++-- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/viewport/frame_grid.cljs b/frontend/src/app/main/ui/workspace/viewport/frame_grid.cljs index 7c77a4351f..53b9eefe56 100644 --- a/frontend/src/app/main/ui/workspace/viewport/frame_grid.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/frame_grid.cljs @@ -15,6 +15,7 @@ [app.common.types.shape-tree :as ctst] [app.common.uuid :as uuid] [app.main.refs :as refs] + [app.main.ui.workspace.viewport.rulers :as rulers] [rumext.v2 :as mf])) (mf/defc square-grid* [{:keys [frame zoom grid]}] @@ -165,12 +166,15 @@ (mf/defc frame-grid* {::mf/wrap [mf/memo]} - [{:keys [zoom transform selected focus]}] + [{:keys [zoom transform selected focus vbox clip-rulers] :or {clip-rulers false}}] (let [frames (->> (mf/deref refs/workspace-frames) (filter has-grid?)) transforming (when (some? transform) selected)] - [:g.grid-display {:style {:pointer-events "none"}} + [:g.grid-display {:style {:pointer-events "none"} + :clip-path (when clip-rulers "url(#clip-frame-grid)")} + (when clip-rulers + [:> rulers/rulers-clip-path* {:id "clip-frame-grid" :vbox vbox :zoom zoom}]) (for [frame frames] (when (and #_(not (is-transform? frame)) (not (ctst/rotated-frame? frame)) diff --git a/frontend/src/app/main/ui/workspace/viewport/rulers.cljs b/frontend/src/app/main/ui/workspace/viewport/rulers.cljs index 89c71a8afc..4a8c82cd61 100644 --- a/frontend/src/app/main/ui/workspace/viewport/rulers.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/rulers.cljs @@ -35,6 +35,19 @@ ;; RULERS ;; ---------------- +(mf/defc rulers-clip-path* + "Defines a clip path (referenced by `id`) that excludes the ruler bars from the + given `vbox`. Used to keep SVG overlays from painting over the rulers that are + drawn by the wasm render engine on the canvas." + [{:keys [id vbox zoom]}] + (let [ruler-size (/ ruler-area-size zoom)] + [:defs + [:clipPath {:id id} + [:rect {:x (+ (:x vbox) ruler-size) + :y (+ (:y vbox) ruler-size) + :width (max 0 (- (:width vbox) ruler-size)) + :height (max 0 (- (:height vbox) ruler-size))}]]])) + (defn- calculate-step-size [zoom] (cond diff --git a/frontend/src/app/main/ui/workspace/viewport/widgets.cljs b/frontend/src/app/main/ui/workspace/viewport/widgets.cljs index 744f9abf3f..5521d5bbd6 100644 --- a/frontend/src/app/main/ui/workspace/viewport/widgets.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/widgets.cljs @@ -23,6 +23,7 @@ [app.main.ui.context :as ctx] [app.main.ui.ds.foundations.assets.icon :as i :refer [icon*]] [app.main.ui.hooks :as hooks] + [app.main.ui.workspace.viewport.rulers :as rulers] [app.main.ui.workspace.viewport.utils :as vwu] [app.util.debug :as dbg] [app.util.dom :as dom] @@ -32,7 +33,7 @@ [rumext.v2 :as mf])) (mf/defc pixel-grid* - [{:keys [vbox zoom]}] + [{:keys [vbox zoom clip-rulers] :or {clip-rulers false}}] (let [page (mf/deref refs/workspace-page) custom-color (:pixel-grid-color page) custom-alpha (:pixel-grid-opacity page) @@ -57,11 +58,14 @@ :stroke stroke :stroke-opacity opacity :stroke-width (str (/ 1 zoom))}}]]] + (when clip-rulers + [:> rulers/rulers-clip-path* {:id "clip-pixel-grid" :vbox vbox :zoom zoom}]) [:rect {:x (:x vbox) :y (:y vbox) :width (:width vbox) :height (:height vbox) :fill (str "url(#pixel-grid)") + :clip-path (when clip-rulers "url(#clip-pixel-grid)") :style {:pointer-events "none"}}]])) (mf/defc cursor-tooltip* diff --git a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs index 61f5025f81..285c43e223 100644 --- a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs +++ b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs @@ -851,11 +851,14 @@ {:zoom zoom :selected selected :transform transform - :focus focus}]) + :focus focus + :vbox vbox + :clip-rulers show-rulers?}]) (when show-pixel-grid? [:> widgets/pixel-grid* {:vbox vbox - :zoom zoom}]) + :zoom zoom + :clip-rulers show-rulers?}]) (when show-snap-points? [:> snap-points/snap-points*