selection math
This commit is contained in:
parent
2be2dc6ac7
commit
9d234eab11
99
main.zig
99
main.zig
|
@ -30,6 +30,24 @@ const Size = struct {
|
|||
}
|
||||
};
|
||||
|
||||
const Selection = struct {
|
||||
const Self = @This();
|
||||
|
||||
start: Point,
|
||||
end: Point,
|
||||
|
||||
fn fromPoint(point: Point) Self {
|
||||
return .{
|
||||
.start = point,
|
||||
.end = point,
|
||||
};
|
||||
}
|
||||
|
||||
fn asBox(self: Self) Box {
|
||||
return Box.fromCorners(self.start, self.end);
|
||||
}
|
||||
};
|
||||
|
||||
const Box = struct {
|
||||
const Self = @This();
|
||||
|
||||
|
@ -74,8 +92,8 @@ const Box = struct {
|
|||
|
||||
const pos = Point{.x = left, .y = top,};
|
||||
const extents = Size{
|
||||
.width = right - left,
|
||||
.height = bot - top,
|
||||
.width = @intCast(u32, right - left),
|
||||
.height = @intCast(u32, bot - top),
|
||||
};
|
||||
|
||||
return Self {
|
||||
|
@ -370,8 +388,29 @@ const Seat = struct {
|
|||
pointer: ?struct {
|
||||
pointer: *wl.Pointer,
|
||||
button_state: ?wl.Pointer.ButtonState = null,
|
||||
selection: SelectionState = SelectionState.None(),
|
||||
} = null,
|
||||
|
||||
|
||||
const SelectionTag = enum {
|
||||
none,
|
||||
pre,
|
||||
updating,
|
||||
post,
|
||||
};
|
||||
|
||||
const SelectionState = union(SelectionTag) {
|
||||
|
||||
none: void,
|
||||
pre: Point,
|
||||
updating: Selection,
|
||||
post: Box,
|
||||
|
||||
fn None() SelectionState {
|
||||
return SelectionState.none;
|
||||
}
|
||||
};
|
||||
|
||||
fn init(self: *Self, state: *State.Init) void {
|
||||
self.state = state;
|
||||
|
||||
|
@ -381,8 +420,47 @@ const Seat = struct {
|
|||
|
||||
fn pointerListener(pointer: *wl.Pointer, event: wl.Pointer.Event, self: *Self) void {
|
||||
_ = pointer;
|
||||
_ = self;
|
||||
_ = event;
|
||||
|
||||
std.debug.print("selection: {}\n", .{self.pointer.?.selection});
|
||||
|
||||
switch (event) {
|
||||
.enter => {},
|
||||
.leave => {},
|
||||
.motion => |motion| {
|
||||
const x = motion.surface_x.toInt();
|
||||
const y = motion.surface_y.toInt();
|
||||
|
||||
const end = Point{.x = x, .y = y,};
|
||||
|
||||
switch (self.pointer.?.selection) {
|
||||
.pre => {
|
||||
self.pointer.?.selection = .{.updating = .{.start = end, .end = end}};
|
||||
},
|
||||
.updating => |*selection| {
|
||||
selection.end = end;
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
},
|
||||
.button => |button| {
|
||||
switch (button.state) {
|
||||
.pressed => {
|
||||
self.pointer.?.selection = SelectionState{.pre = .{}};
|
||||
},
|
||||
.released => {
|
||||
switch (self.pointer.?.selection) {
|
||||
.updating => |selection| {
|
||||
const box = selection.asBox();
|
||||
self.pointer.?.selection = .{.post = box};
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -440,12 +518,13 @@ const Seat = struct {
|
|||
if (self.keyboard.?.xkb) |xkb_| {
|
||||
const keysym = xkb.xkb_state_key_get_one_sym(xkb_.state, key.key + 8);
|
||||
|
||||
const buf_len = 32;
|
||||
const buf = self.state.ally.alloc(u8, buf_len) catch null;
|
||||
if (buf) |buffer| {
|
||||
_ = xkb.xkb_keysym_get_name(keysym, @ptrCast([*c]u8, buffer), buf_len);
|
||||
std.debug.print("key: {s} {s}\n", .{buffer, if (key.state == .pressed) "pressed" else "released"});
|
||||
}
|
||||
// const buf_len = 32;
|
||||
// const buf = self.state.ally.alloc(u8, buf_len) catch null;
|
||||
// if (buf) |buffer| {
|
||||
// _ = xkb.xkb_keysym_get_name(keysym, @ptrCast([*c]u8, buffer), buf_len);
|
||||
// std.debug.print("key: {s} {s}\n", .{buffer, if (key.state == .pressed) "pressed" else "released"});
|
||||
// }
|
||||
|
||||
switch (key.state) {
|
||||
.pressed => {
|
||||
switch (keysym) {
|
||||
|
|
Loading…
Reference in a new issue