Introduce output zoom.
Ideally, we would want to use <modifier>+Scroll binding but that will have
to wait for axis events. For now we just use keybindings. Zoom in/out with
Super+Up/Down.
diff --git a/src/shell.c b/src/shell.c
index 8628462..ee71dcc 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1035,6 +1035,50 @@
}
static void
+zoom_in_binding(struct wl_input_device *device, uint32_t time,
+ uint32_t key, uint32_t button, uint32_t state, void *data)
+{
+ struct weston_input_device *wd = (struct weston_input_device *) device;
+ struct weston_compositor *compositor = wd->compositor;
+ struct weston_output *output;
+
+ wl_list_for_each(output, &compositor->output_list, link) {
+ if (pixman_region32_contains_point(&output->region,
+ device->x, device->y, NULL)) {
+ output->zoom.active = 1;
+ output->zoom.level -= output->zoom.increment;
+
+ if (output->zoom.level < output->zoom.increment)
+ output->zoom.level = output->zoom.increment;
+
+ weston_output_update_zoom(output, device->x, device->y);
+ }
+ }
+}
+
+static void
+zoom_out_binding(struct wl_input_device *device, uint32_t time,
+ uint32_t key, uint32_t button, uint32_t state, void *data)
+{
+ struct weston_input_device *wd = (struct weston_input_device *) device;
+ struct weston_compositor *compositor = wd->compositor;
+ struct weston_output *output;
+
+ wl_list_for_each(output, &compositor->output_list, link) {
+ if (pixman_region32_contains_point(&output->region,
+ device->x, device->y, NULL)) {
+ output->zoom.level += output->zoom.increment;
+ if (output->zoom.level >= 1.0) {
+ output->zoom.active = 0;
+ output->zoom.level = 1.0;
+ }
+
+ weston_output_update_zoom(output, device->x, device->y);
+ }
+ }
+}
+
+static void
terminate_binding(struct wl_input_device *device, uint32_t time,
uint32_t key, uint32_t button, uint32_t state, void *data)
{
@@ -1833,6 +1877,10 @@
terminate_binding, ec);
weston_compositor_add_binding(ec, 0, BTN_LEFT, 0,
click_to_activate_binding, ec);
+ weston_compositor_add_binding(ec, KEY_UP, 0, MODIFIER_SUPER,
+ zoom_in_binding, shell);
+ weston_compositor_add_binding(ec, KEY_DOWN, 0, MODIFIER_SUPER,
+ zoom_out_binding, shell);
weston_compositor_add_binding(ec, 0, BTN_LEFT,
MODIFIER_SUPER | MODIFIER_ALT,
rotate_binding, NULL);