From 0f0dbe63f356436f359549f54f4dac91c2553959 Mon Sep 17 00:00:00 2001 From: Keavon Chambers Date: Fri, 19 Dec 2025 16:27:50 -0800 Subject: [PATCH] Improve tooltip docs with Markdown styling and refined math node explanations --- .../src/messages/frontend/frontend_message.rs | 3 + .../node_graph/document_node_definitions.rs | 2 +- .../portfolio/portfolio_message_handler.rs | 3 + .../tool/common_functionality/pivot.rs | 1 + frontend/src/components/Editor.svelte | 2 +- .../floating-menus/ColorPicker.svelte | 36 ++- .../components/floating-menus/Tooltip.svelte | 28 +- frontend/src/components/panels/Layers.svelte | 18 +- frontend/src/components/views/Graph.svelte | 4 +- .../widgets/labels/TextLabel.svelte | 8 +- .../window/title-bar/WindowButtonsWeb.svelte | 19 +- frontend/src/io-managers/input.ts | 4 +- frontend/src/messages.ts | 6 + frontend/src/state-providers/app-window.ts | 2 +- frontend/src/state-providers/tooltip.ts | 27 +- .../libraries/vector-types/src/vector/misc.rs | 2 +- .../vector-types/src/vector/style.rs | 1 - node-graph/nodes/math/src/lib.rs | 286 ++++++++++-------- node-graph/nodes/raster/src/adjustments.rs | 9 +- 19 files changed, 276 insertions(+), 185 deletions(-) diff --git a/editor/src/messages/frontend/frontend_message.rs b/editor/src/messages/frontend/frontend_message.rs index ae6b4ff27b..a63c6a2266 100644 --- a/editor/src/messages/frontend/frontend_message.rs +++ b/editor/src/messages/frontend/frontend_message.rs @@ -70,6 +70,9 @@ pub enum FrontendMessage { SendShortcutAltClick { shortcut: Option, }, + SendShortcutShiftClick { + shortcut: Option, + }, // Trigger prefix: cause a frontend specific API to do something TriggerAboutGraphiteLocalizedCommitDate { diff --git a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs index 61f00fc18c..16cf2983ae 100644 --- a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs +++ b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs @@ -274,7 +274,7 @@ fn static_nodes() -> Vec { ..Default::default() }, }, - description: Cow::Borrowed("Merges new content as an entry into the graphic table that represents a layer compositing stack."), + description: Cow::Borrowed("Merges the provided content as a new element in the graphic table that represents a layer compositing stack."), properties: None, }, DocumentNodeDefinition { diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index 1d5fb9dee9..70f344894a 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -124,6 +124,9 @@ impl MessageHandler> for Portfolio responses.add(FrontendMessage::SendShortcutAltClick { shortcut: action_shortcut_manual!(Key::Alt, Key::MouseLeft), }); + responses.add(FrontendMessage::SendShortcutShiftClick { + shortcut: action_shortcut_manual!(Key::Shift, Key::MouseLeft), + }); // Before loading any documents, initially prepare the welcome screen buttons layout responses.add(PortfolioMessage::RequestWelcomeScreenButtonsLayout); diff --git a/editor/src/messages/tool/common_functionality/pivot.rs b/editor/src/messages/tool/common_functionality/pivot.rs index 2b99a347c9..0e61fd9a8a 100644 --- a/editor/src/messages/tool/common_functionality/pivot.rs +++ b/editor/src/messages/tool/common_functionality/pivot.rs @@ -169,6 +169,7 @@ pub struct PivotGizmoState { impl PivotGizmoState { pub fn is_pivot_type(&self) -> bool { + // A disabled pivot is considered a pivot-type gizmo that is always centered self.gizmo_type == PivotGizmoType::Pivot || self.disabled } diff --git a/frontend/src/components/Editor.svelte b/frontend/src/components/Editor.svelte index 851d148b88..ecbd24b8f8 100644 --- a/frontend/src/components/Editor.svelte +++ b/frontend/src/components/Editor.svelte @@ -27,7 +27,7 @@ // State provider systems let dialog = createDialogState(editor); setContext("dialog", dialog); - let tooltip = createTooltipState(); + let tooltip = createTooltipState(editor); setContext("tooltip", tooltip); let document = createDocumentState(editor); setContext("document", document); diff --git a/frontend/src/components/floating-menus/ColorPicker.svelte b/frontend/src/components/floating-menus/ColorPicker.svelte index e3388f849b..07abea96fd 100644 --- a/frontend/src/components/floating-menus/ColorPicker.svelte +++ b/frontend/src/components/floating-menus/ColorPicker.svelte @@ -1,9 +1,9 @@ {#if label || description} @@ -40,7 +60,7 @@ {#if label || shortcut} {#if label} - {label} + {@html label} {/if} {#if shortcut} @@ -48,7 +68,7 @@ {/if} {#if description} - {description} + {@html description} {/if} diff --git a/frontend/src/components/panels/Layers.svelte b/frontend/src/components/panels/Layers.svelte index cad9f861d4..2b343b03bc 100644 --- a/frontend/src/components/panels/Layers.svelte +++ b/frontend/src/components/panels/Layers.svelte @@ -9,10 +9,10 @@ UpdateLayersPanelControlBarLeftLayout, UpdateLayersPanelControlBarRightLayout, UpdateLayersPanelBottomBarLayout, - SendShortcutAltClick, } from "@graphite/messages"; - import type { ActionShortcut, DataBuffer, LayerPanelEntry, Layout } from "@graphite/messages"; + import type { DataBuffer, LayerPanelEntry, Layout } from "@graphite/messages"; import type { NodeGraphState } from "@graphite/state-providers/node-graph"; + import type { TooltipState } from "@graphite/state-providers/tooltip"; import { operatingSystem } from "@graphite/utility-functions/platform"; import { extractPixelData } from "@graphite/utility-functions/rasterization"; @@ -49,6 +49,7 @@ const editor = getContext("editor"); const nodeGraph = getContext("nodeGraph"); + const tooltip = getContext("tooltip"); let list: LayoutCol | undefined; @@ -73,13 +74,7 @@ let layersPanelControlBarRightLayout: Layout = []; let layersPanelBottomBarLayout: Layout = []; - let altClickShortcut: ActionShortcut | undefined; - onMount(() => { - editor.subscriptions.subscribeJsMessage(SendShortcutAltClick, async (data) => { - altClickShortcut = data.shortcut; - }); - editor.subscriptions.subscribeJsMessage(UpdateLayersPanelControlBarLeftLayout, (updateLayersPanelControlBarLeftLayout) => { patchLayout(layersPanelControlBarLeftLayout, updateLayersPanelControlBarLeftLayout); layersPanelControlBarLeftLayout = layersPanelControlBarLeftLayout; @@ -628,7 +623,7 @@ ? "Hide the layers nested within. (To affect all open descendants, perform the shortcut shown.)" : "Show the layers nested within. (To affect all closed descendants, perform the shortcut shown.)") + (listing.entry.ancestorOfSelected && !listing.entry.expanded ? "\n\nA selected layer is currently contained within.\n" : "")} - data-tooltip-shortcut={altClickShortcut?.shortcut ? JSON.stringify(altClickShortcut.shortcut) : undefined} + data-tooltip-shortcut={$tooltip.altClickShortcut?.shortcut ? JSON.stringify($tooltip.altClickShortcut.shortcut) : undefined} on:click={(e) => handleExpandArrowClickWithModifiers(e, listing.entry.id)} tabindex="0" > @@ -639,8 +634,9 @@ {/if}
diff --git a/frontend/src/components/views/Graph.svelte b/frontend/src/components/views/Graph.svelte index 58e09d7964..90de834064 100644 --- a/frontend/src/components/views/Graph.svelte +++ b/frontend/src/components/views/Graph.svelte @@ -501,7 +501,7 @@ style:--data-color-dim={`var(--color-data-${(node.primaryOutput?.dataType || "General").toLowerCase()}-dim)`} style:--layer-area-width={layerAreaWidth} style:--node-chain-area-left-extension={layerChainWidth !== 0 ? layerChainWidth + 0.5 : 0} - data-tooltip-label={node.displayName === node.reference ? node.displayName : `${node.displayName} (${node.reference})`} + data-tooltip-label={node.displayName === node.reference || !node.reference ? node.displayName : `${node.displayName} (${node.reference})`} data-tooltip-description={` ${(description || "").trim()}${editor.handle.inDevelopmentMode() ? `\n\nID: ${node.id}. Position: (${node.position.x}, ${node.position.y}).` : ""} `.trim()} @@ -651,7 +651,7 @@ style:--clip-path-id={`url(#${clipPathId})`} style:--data-color={`var(--color-data-${(node.primaryOutput?.dataType || "General").toLowerCase()})`} style:--data-color-dim={`var(--color-data-${(node.primaryOutput?.dataType || "General").toLowerCase()}-dim)`} - data-tooltip-label={node.displayName === node.reference ? node.displayName : `${node.displayName} (${node.reference})`} + data-tooltip-label={node.displayName === node.reference || !node.reference ? node.displayName : `${node.displayName} (${node.reference})`} data-tooltip-description={` ${(description || "").trim()}${editor.handle.inDevelopmentMode() ? `\n\nID: ${node.id}. Position: (${node.position.x}, ${node.position.y}).` : ""} `.trim()} diff --git a/frontend/src/components/widgets/labels/TextLabel.svelte b/frontend/src/components/widgets/labels/TextLabel.svelte index 4174ebf43a..8465ff871d 100644 --- a/frontend/src/components/widgets/labels/TextLabel.svelte +++ b/frontend/src/components/widgets/labels/TextLabel.svelte @@ -72,7 +72,8 @@ font-style: italic; } - &.monospace { + &.monospace, + code { font-family: "Source Code Pro", monospace; font-size: 12px; } @@ -94,5 +95,10 @@ a { color: inherit; } + + code { + background: var(--color-3-darkgray); + padding: 0 2px; + } } diff --git a/frontend/src/components/window/title-bar/WindowButtonsWeb.svelte b/frontend/src/components/window/title-bar/WindowButtonsWeb.svelte index 5f2776f90a..a87b41f622 100644 --- a/frontend/src/components/window/title-bar/WindowButtonsWeb.svelte +++ b/frontend/src/components/window/title-bar/WindowButtonsWeb.svelte @@ -1,24 +1,15 @@