Skip to content

Commit 962f4b9

Browse files
committed
Improve toolbar tooltips
1 parent 0becc60 commit 962f4b9

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/backend/wayland/toolbar/render.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,22 @@ pub fn render_top_strip(
2727
let use_icons = snapshot.use_icons;
2828
let gap = 8.0;
2929
let mut x = 16.0;
30+
let tool_tooltip = |tool: Tool, label: &str| {
31+
let default_hint = match tool {
32+
Tool::Line => Some("Shift+Drag"),
33+
Tool::Rect => Some("Ctrl+Drag"),
34+
Tool::Ellipse => Some("Tab+Drag"),
35+
Tool::Arrow => Some("Ctrl+Shift+Drag"),
36+
_ => None,
37+
};
38+
let binding = match (snapshot.binding_hints.for_tool(tool), default_hint) {
39+
(Some(binding), Some(fallback)) => Some(format!("{}, {}", binding, fallback)),
40+
(Some(binding), None) => Some(binding.to_string()),
41+
(None, Some(fallback)) => Some(fallback.to_string()),
42+
(None, None) => None,
43+
};
44+
format_binding_label(label, binding.as_deref())
45+
};
3046

3147
// Drag handle (left)
3248
let handle_w = 18.0;
@@ -103,7 +119,7 @@ pub fn render_top_strip(
103119
let icon_y = y + (btn_size - icon_size) / 2.0;
104120
icon_fn(ctx, icon_x, icon_y, icon_size);
105121

106-
let tooltip = format_binding_label(label, snapshot.binding_hints.for_tool(*tool));
122+
let tooltip = tool_tooltip(*tool, label);
107123
hits.push(HitRegion {
108124
rect: (x, y, btn_size, btn_size),
109125
event: ToolbarEvent::SelectTool(*tool),
@@ -244,7 +260,7 @@ pub fn render_top_strip(
244260
.unwrap_or(false);
245261
draw_button(ctx, x, y, btn_w, btn_h, is_active, is_hover);
246262
draw_label_center(ctx, x, y, btn_w, btn_h, label);
247-
let tooltip = format_binding_label(label, snapshot.binding_hints.for_tool(*tool));
263+
let tooltip = tool_tooltip(*tool, label);
248264
hits.push(HitRegion {
249265
rect: (x, y, btn_w, btn_h),
250266
event: ToolbarEvent::SelectTool(*tool),
@@ -704,6 +720,10 @@ pub fn render_side_palette(
704720
toggle_hover,
705721
"Erase by stroke",
706722
);
723+
let toggle_tooltip = format_binding_label(
724+
"Erase by stroke",
725+
snapshot.binding_hints.toggle_eraser_mode.as_deref(),
726+
);
707727
hits.push(HitRegion {
708728
rect: (x, toggle_y, toggle_w, toggle_h),
709729
event: ToolbarEvent::SetEraserMode(if stroke_active {
@@ -712,7 +732,7 @@ pub fn render_side_palette(
712732
EraserMode::Stroke
713733
}),
714734
kind: HitKind::Click,
715-
tooltip: None,
735+
tooltip: Some(toggle_tooltip),
716736
});
717737
y += eraser_card_h + section_gap;
718738
}

src/ui/toolbar.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ pub struct ToolbarBindingHints {
195195
pub marker: Option<String>,
196196
pub highlight: Option<String>,
197197
pub eraser: Option<String>,
198+
pub toggle_eraser_mode: Option<String>,
198199
pub text: Option<String>,
199200
pub clear: Option<String>,
200201
pub fill: Option<String>,
@@ -227,6 +228,7 @@ impl ToolbarBindingHints {
227228
marker: first(&kb.select_marker_tool),
228229
highlight: first(&kb.select_highlight_tool),
229230
eraser: first(&kb.select_eraser_tool),
231+
toggle_eraser_mode: first(&kb.toggle_eraser_mode),
230232
text: first(&kb.enter_text_mode),
231233
clear: first(&kb.clear_canvas),
232234
fill: first(&kb.toggle_fill),

0 commit comments

Comments
 (0)