feat: add drag_pos and drag_anchor to Button
This commit is contained in:
parent
752a356d38
commit
0493d3899a
1 changed files with 11 additions and 1 deletions
|
|
@ -77,6 +77,8 @@ fn State(ctx_type: type) type {
|
||||||
plane: Plane,
|
plane: Plane,
|
||||||
active: bool = false,
|
active: bool = false,
|
||||||
hover: bool = false,
|
hover: bool = false,
|
||||||
|
drag_anchor: ?Widget.Pos = null,
|
||||||
|
drag_pos: ?Widget.Pos = null,
|
||||||
opts: Options(ctx_type),
|
opts: Options(ctx_type),
|
||||||
|
|
||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
@ -120,6 +122,7 @@ fn State(ctx_type: type) type {
|
||||||
switch (btn_enum) {
|
switch (btn_enum) {
|
||||||
input.mouse.BUTTON1 => {
|
input.mouse.BUTTON1 => {
|
||||||
self.active = true;
|
self.active = true;
|
||||||
|
self.drag_anchor = self.to_rel_cursor(x, y);
|
||||||
tui.need_render();
|
tui.need_render();
|
||||||
},
|
},
|
||||||
input.mouse.BUTTON4, input.mouse.BUTTON5 => {
|
input.mouse.BUTTON4, input.mouse.BUTTON5 => {
|
||||||
|
|
@ -131,9 +134,12 @@ fn State(ctx_type: type) type {
|
||||||
return true;
|
return true;
|
||||||
} else if (try m.match(.{ "B", input.event.release, tp.extract(&btn), tp.any, tp.extract(&x), tp.extract(&y), tp.any, tp.any })) {
|
} else if (try m.match(.{ "B", input.event.release, tp.extract(&btn), tp.any, tp.extract(&x), tp.extract(&y), tp.any, tp.any })) {
|
||||||
self.call_click_handler(@enumFromInt(btn), self.to_rel_cursor(x, y));
|
self.call_click_handler(@enumFromInt(btn), self.to_rel_cursor(x, y));
|
||||||
|
self.drag_anchor = null;
|
||||||
|
self.drag_pos = null;
|
||||||
tui.need_render();
|
tui.need_render();
|
||||||
return true;
|
return true;
|
||||||
} else if (try m.match(.{ "D", input.event.press, tp.extract(&btn), tp.more })) {
|
} else if (try m.match(.{ "D", input.event.press, tp.extract(&btn), tp.any, tp.extract(&x), tp.extract(&y), tp.any, tp.any })) {
|
||||||
|
self.drag_pos = .{ .x = x, .y = y };
|
||||||
if (self.opts.on_event) |h| {
|
if (self.opts.on_event) |h| {
|
||||||
self.active = false;
|
self.active = false;
|
||||||
h.send(from, m) catch {};
|
h.send(from, m) catch {};
|
||||||
|
|
@ -145,6 +151,8 @@ fn State(ctx_type: type) type {
|
||||||
h.send(from, m) catch {};
|
h.send(from, m) catch {};
|
||||||
}
|
}
|
||||||
self.call_click_handler(@enumFromInt(btn), self.to_rel_cursor(x, y));
|
self.call_click_handler(@enumFromInt(btn), self.to_rel_cursor(x, y));
|
||||||
|
self.drag_anchor = null;
|
||||||
|
self.drag_pos = null;
|
||||||
tui.need_render();
|
tui.need_render();
|
||||||
return true;
|
return true;
|
||||||
} else if (try m.match(.{ "H", tp.extract(&self.hover) })) {
|
} else if (try m.match(.{ "H", tp.extract(&self.hover) })) {
|
||||||
|
|
@ -152,6 +160,8 @@ fn State(ctx_type: type) type {
|
||||||
tui.need_render();
|
tui.need_render();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
self.drag_anchor = null;
|
||||||
|
self.drag_pos = null;
|
||||||
return self.opts.on_receive(&self.opts.ctx, self, from, m);
|
return self.opts.on_receive(&self.opts.ctx, self, from, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue