@@ -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 }
0 commit comments