Skip to content

Commit 13eefe2

Browse files
committed
refactor: improve mouse move handling in layouts, add tooltip support, and optimize event propagation logic
1 parent aa27970 commit 13eefe2

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

event_handlers.v

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,17 @@ fn mouse_move_handler(layout &Layout, mut e Event, mut w Window) {
131131
return
132132
}
133133
}
134+
if layout.shape.point_in_shape(e.mouse_x, e.mouse_y) {
135+
if layout.shape.on_mouse_move != unsafe { nil } {
136+
// make move handler mouse coordinates relative to layout.shape
137+
mut ev := event_relative_to(layout.shape, e)
138+
layout.shape.on_mouse_move(layout, mut ev, mut w)
139+
if ev.is_handled {
140+
e.is_handled = true
141+
return
142+
}
143+
}
144+
}
134145
if e.is_handled || layout.shape.disabled {
135146
return
136147
}

view_container.v

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,20 @@ fn (mut cv ContainerView) generate_layout(mut _ Window) Layout {
106106
on_click: cv.on_click
107107
on_char: cv.on_char
108108
on_keydown: cv.on_keydown
109-
on_mouse_move: cv.on_mouse_move
110-
// on_mouse_move_shape: if cv.tooltip != unsafe { nil } {
111-
// cv.on_mouse_move_shape
112-
// } else {
113-
// unsafe { nil }
114-
// }
115-
on_mouse_up: cv.on_mouse_up
116-
on_hover: cv.on_hover
117-
amend_layout: cv.amend_layout
109+
on_mouse_move: if cv.tooltip != unsafe { nil } {
110+
fn [cv] (layout &Layout, mut e Event, mut w Window) {
111+
cv.on_mouse_move_tooltip(layout.shape, mut e, mut w)
112+
if cv.on_mouse_move != unsafe { nil } {
113+
cv.on_mouse_move(layout, mut e, mut w)
114+
}
115+
e.is_handled = true
116+
}
117+
} else {
118+
cv.on_mouse_move
119+
}
120+
on_mouse_up: cv.on_mouse_up
121+
on_hover: cv.on_hover
122+
amend_layout: cv.amend_layout
118123
}
119124
}
120125

@@ -371,10 +376,10 @@ pub fn circle(cfg ContainerCfg) View {
371376
return circle
372377
}
373378

374-
fn (mut cfg ContainerView) on_mouse_move_shape(shape &Shape, mut e Event, mut w Window) {
375-
if cfg.tooltip != unsafe { nil } {
376-
if cfg.tooltip.content.len > 0 {
377-
w.animation_add(mut cfg.tooltip.animation_tooltip())
379+
fn (cv ContainerView) on_mouse_move_tooltip(shape &Shape, mut e Event, mut w Window) {
380+
if cv.tooltip != unsafe { nil } {
381+
if cv.tooltip.content.len > 0 {
382+
w.animation_add(mut cv.tooltip.animation_tooltip())
378383
gui_tooltip.bounds = DrawClip{
379384
x: shape.x
380385
y: shape.y

0 commit comments

Comments
 (0)