Skip to content

Commit fc01fad

Browse files
committed
wio: simplify gesture api
1 parent 1ee53a9 commit fc01fad

5 files changed

Lines changed: 31 additions & 107 deletions

File tree

demo/src/main.zig

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ fn eventFn(data: ?*anyopaque, event: wio.Event) void {
9191
.scroll_vertical, .scroll_horizontal => |value| std.log.info("{s} {d}", .{ @tagName(event), value }),
9292
.touch => |touch| std.log.info("touch {}: ({},{})", .{ touch.id, touch.x, touch.y }),
9393
.touch_end => |touch| std.log.info("touch {}: {s}", .{ touch.id, if (touch.ignore) "ignore" else "end" }),
94-
.gesture_hold => |gesture| std.log.info("{s} ({} fingers)", .{ @tagName(event), gesture.fingers }),
95-
.gesture_pan_x, .gesture_pan_y, .gesture_zoom, .gesture_rotate => |gesture| std.log.info("{s} ({} fingers) {}", .{ @tagName(event), gesture.fingers, gesture.value }),
94+
.gesture_pan_x, .gesture_pan_y, .gesture_zoom, .gesture_rotate => |value| std.log.info("{s} {}", .{ @tagName(event), value }),
9695
.drop_position => |pos| std.log.info("drop_position ({},{})", .{ pos.x, pos.y }),
9796
else => std.log.info("{s}", .{@tagName(event)}),
9897
}

src/macos.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -925,11 +925,11 @@ export fn wioScroll(self: *Window, x: f32, y: f32) void {
925925
}
926926

927927
export fn wioGestureZoom(self: *Window, value: f32) void {
928-
internal.eventFn(self.event_fn_data, .{ .gesture_zoom = .{ .fingers = 2, .value = value + 1 } });
928+
internal.eventFn(self.event_fn_data, .{ .gesture_zoom = value + 1 });
929929
}
930930

931931
export fn wioGestureRotate(self: *Window, value: f32) void {
932-
internal.eventFn(self.event_fn_data, .{ .gesture_rotate = .{ .fingers = 2, .value = -value } });
932+
internal.eventFn(self.event_fn_data, .{ .gesture_rotate = -value });
933933
}
934934

935935
export fn wioDupeClipboardText(allocator: *const std.mem.Allocator, bytes: [*:0]const u8, len: *usize) ?[*]u8 {

src/unix/wayland.zig

Lines changed: 21 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,7 @@ var activation: ?*h.xdg_activation_v1 = null;
101101
var text_input: ?*h.zwp_text_input_v3 = null;
102102
var cursor_shape_device: ?*h.wp_cursor_shape_device_v1 = null;
103103
var relative_pointer: ?*h.zwp_relative_pointer_v1 = null;
104-
var swipe_gesture: ?*h.zwp_pointer_gesture_swipe_v1 = null;
105-
var pinch_gesture: ?*h.zwp_pointer_gesture_pinch_v1 = null;
106-
var hold_gesture: ?*h.zwp_pointer_gesture_hold_v1 = null;
104+
var gesture_pinch: ?*h.zwp_pointer_gesture_pinch_v1 = null;
107105
var data_device: ?*h.wl_data_device = null;
108106
var data_offer: ?*h.wl_data_offer = null;
109107
var data_source: ?*h.wl_data_source = null;
@@ -132,7 +130,6 @@ var preedit_active = false;
132130
var commit_string: std.ArrayList(u8) = .empty;
133131
var touch_ids: std.StaticBitSet(256) = .empty;
134132
var touch_info: std.AutoHashMapUnmanaged(i32, struct { public_id: u8, window: *Window }) = .empty;
135-
var gesture_fingers: u8 = undefined;
136133
var clipboard_text: []const u8 = "";
137134

138135
var pending_drag_has_uri: bool = false;
@@ -257,9 +254,7 @@ fn destroyProxies() void {
257254
if (data_source) |_| h.wl_data_source_destroy(data_source);
258255
if (data_offer) |_| h.wl_data_offer_destroy(data_offer);
259256
if (data_device) |_| h.wl_data_device_destroy(data_device);
260-
if (hold_gesture) |_| h.zwp_pointer_gesture_hold_v1_destroy(hold_gesture);
261-
if (pinch_gesture) |_| h.zwp_pointer_gesture_pinch_v1_destroy(pinch_gesture);
262-
if (swipe_gesture) |_| h.zwp_pointer_gesture_swipe_v1_destroy(swipe_gesture);
257+
if (gesture_pinch) |_| h.zwp_pointer_gesture_pinch_v1_destroy(gesture_pinch);
263258
if (relative_pointer) |_| h.zwp_relative_pointer_v1_destroy(relative_pointer);
264259
if (cursor_shape_device) |_| h.wp_cursor_shape_device_v1_destroy(cursor_shape_device);
265260
if (text_input) |_| h.zwp_text_input_v3_destroy(text_input);
@@ -881,17 +876,9 @@ fn seatCapabilities(_: ?*anyopaque, _: ?*h.wl_seat, capabilities: h.wl_seat_capa
881876
touch_ids = .empty;
882877
touch_info.clearRetainingCapacity();
883878
}
884-
if (hold_gesture) |_| {
885-
h.zwp_pointer_gesture_hold_v1_destroy(hold_gesture);
886-
hold_gesture = null;
887-
}
888-
if (pinch_gesture) |_| {
889-
h.zwp_pointer_gesture_pinch_v1_destroy(pinch_gesture);
890-
pinch_gesture = null;
891-
}
892-
if (swipe_gesture) |_| {
893-
h.zwp_pointer_gesture_swipe_v1_destroy(swipe_gesture);
894-
swipe_gesture = null;
879+
if (gesture_pinch) |_| {
880+
h.zwp_pointer_gesture_pinch_v1_destroy(gesture_pinch);
881+
gesture_pinch = null;
895882
}
896883
if (relative_pointer) |_| {
897884
h.zwp_relative_pointer_v1_destroy(relative_pointer);
@@ -925,12 +912,8 @@ fn seatCapabilities(_: ?*anyopaque, _: ?*h.wl_seat, capabilities: h.wl_seat_capa
925912
_ = h.zwp_relative_pointer_v1_add_listener(relative_pointer, &relative_pointer_listener, null);
926913
}
927914
if (pointer_gestures) |_| {
928-
swipe_gesture = h.zwp_pointer_gestures_v1_get_swipe_gesture(pointer_gestures, pointer);
929-
_ = h.zwp_pointer_gesture_swipe_v1_add_listener(swipe_gesture, &swipe_gesture_listener, null);
930-
pinch_gesture = h.zwp_pointer_gestures_v1_get_pinch_gesture(pointer_gestures, pointer);
931-
_ = h.zwp_pointer_gesture_pinch_v1_add_listener(pinch_gesture, &pinch_gesture_listener, null);
932-
hold_gesture = h.zwp_pointer_gestures_v1_get_hold_gesture(pointer_gestures, pointer);
933-
_ = h.zwp_pointer_gesture_hold_v1_add_listener(hold_gesture, &hold_gesture_listener, null);
915+
gesture_pinch = h.zwp_pointer_gestures_v1_get_pinch_gesture(pointer_gestures, pointer);
916+
_ = h.zwp_pointer_gesture_pinch_v1_add_listener(gesture_pinch, &gesture_pinch_listener, null);
934917
}
935918
}
936919
if (capabilities & h.WL_SEAT_CAPABILITY_TOUCH != 0) {
@@ -1085,90 +1068,38 @@ fn relativePointerMotion(_: ?*anyopaque, _: ?*h.zwp_relative_pointer_v1, _: u32,
10851068
}
10861069
}
10871070

1088-
const swipe_gesture_listener: h.zwp_pointer_gesture_swipe_v1_listener = .{
1089-
.begin = swipeBegin,
1090-
.update = swipeUpdate,
1091-
.end = swipeEnd,
1071+
const gesture_pinch_listener: h.zwp_pointer_gesture_pinch_v1_listener = .{
1072+
.begin = gesturePinchBegin,
1073+
.update = gesturePinchUpdate,
1074+
.end = gesturePinchEnd,
10921075
};
10931076

1094-
fn swipeBegin(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_swipe_v1, _: u32, _: u32, surface: ?*h.wl_surface, fingers: u32) callconv(.c) void {
1095-
if (getWindow(surface)) |window| {
1096-
gesture_focus = window;
1097-
gesture_fingers = @truncate(fingers);
1098-
}
1099-
}
1100-
1101-
fn swipeUpdate(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_swipe_v1, _: u32, dx: h.wl_fixed_t, dy: h.wl_fixed_t) callconv(.c) void {
1102-
if (gesture_focus) |window| {
1103-
if (dx != 0) {
1104-
internal.eventFn(window.event_fn_data, .{ .gesture_pan_x = .{ .fingers = gesture_fingers, .value = fixedToFloat(dx) } });
1105-
}
1106-
if (dy != 0) {
1107-
internal.eventFn(window.event_fn_data, .{ .gesture_pan_y = .{ .fingers = gesture_fingers, .value = fixedToFloat(dy) } });
1108-
}
1109-
}
1110-
}
1111-
1112-
fn swipeEnd(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_swipe_v1, _: u32, _: u32, cancelled: i32) callconv(.c) void {
1113-
if (gesture_focus) |window| {
1114-
if (cancelled == 1) {
1115-
internal.eventFn(window.event_fn_data, .gesture_ignore);
1077+
fn gesturePinchBegin(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_pinch_v1, _: u32, _: u32, surface: ?*h.wl_surface, fingers: u32) callconv(.c) void {
1078+
if (fingers == 2) {
1079+
if (getWindow(surface)) |window| {
1080+
gesture_focus = window;
11161081
}
11171082
}
11181083
}
11191084

1120-
const pinch_gesture_listener: h.zwp_pointer_gesture_pinch_v1_listener = .{
1121-
.begin = pinchBegin,
1122-
.update = pinchUpdate,
1123-
.end = pinchEnd,
1124-
};
1125-
1126-
fn pinchBegin(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_pinch_v1, _: u32, _: u32, surface: ?*h.wl_surface, fingers: u32) callconv(.c) void {
1127-
if (getWindow(surface)) |window| {
1128-
gesture_focus = window;
1129-
gesture_fingers = @truncate(fingers);
1130-
}
1131-
}
1132-
1133-
fn pinchUpdate(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_pinch_v1, _: u32, dx: h.wl_fixed_t, dy: h.wl_fixed_t, scale: h.wl_fixed_t, rotation: h.wl_fixed_t) callconv(.c) void {
1085+
fn gesturePinchUpdate(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_pinch_v1, _: u32, dx: h.wl_fixed_t, dy: h.wl_fixed_t, scale: h.wl_fixed_t, rotation: h.wl_fixed_t) callconv(.c) void {
11341086
if (gesture_focus) |window| {
11351087
if (dx != 0) {
1136-
internal.eventFn(window.event_fn_data, .{ .gesture_pan_x = .{ .fingers = gesture_fingers, .value = fixedToFloat(dx) } });
1088+
internal.eventFn(window.event_fn_data, .{ .gesture_pan_x = fixedToFloat(dx) });
11371089
}
11381090
if (dy != 0) {
1139-
internal.eventFn(window.event_fn_data, .{ .gesture_pan_y = .{ .fingers = gesture_fingers, .value = fixedToFloat(dy) } });
1091+
internal.eventFn(window.event_fn_data, .{ .gesture_pan_y = fixedToFloat(dy) });
11401092
}
11411093
if (scale != 0) {
1142-
internal.eventFn(window.event_fn_data, .{ .gesture_zoom = .{ .fingers = gesture_fingers, .value = fixedToFloat(scale) } });
1094+
internal.eventFn(window.event_fn_data, .{ .gesture_zoom = fixedToFloat(scale) });
11431095
}
11441096
if (rotation != 0) {
1145-
internal.eventFn(window.event_fn_data, .{ .gesture_rotate = .{ .fingers = gesture_fingers, .value = fixedToFloat(rotation) } });
1146-
}
1147-
}
1148-
}
1149-
1150-
fn pinchEnd(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_pinch_v1, _: u32, _: u32, cancelled: i32) callconv(.c) void {
1151-
if (gesture_focus) |window| {
1152-
if (cancelled == 1) {
1153-
internal.eventFn(window.event_fn_data, .gesture_ignore);
1097+
internal.eventFn(window.event_fn_data, .{ .gesture_rotate = fixedToFloat(rotation) });
11541098
}
11551099
}
11561100
}
11571101

1158-
const hold_gesture_listener: h.zwp_pointer_gesture_hold_v1_listener = .{
1159-
.begin = holdBegin,
1160-
.end = holdEnd,
1161-
};
1162-
1163-
fn holdBegin(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_hold_v1, _: u32, _: u32, surface: ?*h.wl_surface, fingers: u32) callconv(.c) void {
1164-
if (getWindow(surface)) |window| {
1165-
gesture_focus = window;
1166-
gesture_fingers = @truncate(fingers);
1167-
internal.eventFn(window.event_fn_data, .{ .gesture_hold = .{ .fingers = gesture_fingers, .value = 0 } });
1168-
}
1169-
}
1170-
1171-
fn holdEnd(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_hold_v1, _: u32, _: u32, cancelled: i32) callconv(.c) void {
1102+
fn gesturePinchEnd(_: ?*anyopaque, _: ?*h.zwp_pointer_gesture_pinch_v1, _: u32, _: u32, cancelled: i32) callconv(.c) void {
11721103
if (gesture_focus) |window| {
11731104
if (cancelled == 1) {
11741105
internal.eventFn(window.event_fn_data, .gesture_ignore);

src/wasm/Wio.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,11 @@ class Wio {
181181
event.preventDefault();
182182
window.drop_files = [];
183183
window.drop_text = null;
184-
wioEvent(data, 31);
184+
wioEvent(data, 30);
185185
});
186186
canvas.addEventListener("dragover", (event) => {
187187
event.preventDefault();
188-
wioEvent(data, 32, event.offsetX, event.offsetY);
188+
wioEvent(data, 31, event.offsetX, event.offsetY);
189189
});
190190
canvas.addEventListener("drop", (event) => {
191191
event.preventDefault();
@@ -194,7 +194,7 @@ class Wio {
194194
}
195195
const text = event.dataTransfer.getData("text/plain");
196196
window.drop_text = text.length > 0 ? text : null;
197-
wioEvent(data, 33);
197+
wioEvent(data, 32);
198198
});
199199

200200
this.windows.push(window);

src/wio.zig

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -613,11 +613,10 @@ pub const Event = union(enum) {
613613
/// not affect the program.
614614
touch_end: TouchEnd,
615615

616-
gesture_hold: Gesture,
617-
gesture_pan_x: Gesture,
618-
gesture_pan_y: Gesture,
619-
gesture_zoom: Gesture,
620-
gesture_rotate: Gesture,
616+
gesture_pan_x: f32,
617+
gesture_pan_y: f32,
618+
gesture_zoom: f32,
619+
gesture_rotate: f32,
621620
gesture_ignore: void,
622621

623622
drop_begin: void,
@@ -634,11 +633,6 @@ pub const Event = union(enum) {
634633
id: u8,
635634
ignore: bool,
636635
};
637-
638-
pub const Gesture = struct {
639-
fingers: u8,
640-
value: f32,
641-
};
642636
};
643637

644638
pub const EventType = @typeInfo(Event).@"union".tag_type.?;

0 commit comments

Comments
 (0)