gimp but for windows: a wayland compositor
git clone https://github.com/m-col/wimp
Files | Refs | Readme

Commit 6bedda13c02a6692a93ad6486e3a6dbc9ad58fc0
Parent: 7dc71ce1bf1c6432c80378dc2dd567a35f4d4a8f
Author: mcol <mcol@posteo.net>
Date: 2020-12-05 18:02:36 +0000
Committer: mcol <mcol@posteo.net>
Committed: 2020-12-05 18:02:36 +0000

Replace save_pan and reset_pan with only reset_zoom

save_pan was made redundant by the marking system, but resetting the
zoom is an important functionality so that was added as a standalone
action.

src/config.c Modified

@@ -50,10 +50,8 @@
 	kb->action = &prev_desk;
     else if (strcasecmp(name, "pan_desk") == 0)
 	kb->action = &pan_desk;
-    else if (strcasecmp(name, "reset_pan") == 0)
-	kb->action = &reset_pan;
-    else if (strcasecmp(name, "save_pan") == 0)
-	kb->action = &save_pan;
+    else if (strcasecmp(name, "reset_zoom") == 0)
+	kb->action = &reset_zoom;
     else if (strcasecmp(name, "zoom_in") == 0) {
 	kb->action = &zoom_desk;
 	kb->data = calloc(1, sizeof(int));

src/action.h Modified

@@ -10,8 +10,7 @@
 void next_desk(struct server *server, void *data);
 void prev_desk(struct server *server, void *data);
 void pan_desk(struct server *server, void *data);
-void reset_pan(struct server *server, void *data);
-void save_pan(struct server *server, void *data);
+void reset_zoom(struct server *server, void *data);
 void zoom_desk(struct server *server, void *data);
 void zoom_desk_mouse(struct server *server, void *data);
 void set_mark(struct server *server, void *data);

src/action.c Modified

@@ -1,6 +1,7 @@
 #include <sys/vt.h>
 #include <wlr/backend.h>
 #include <wlr/backend/session.h>
+#include <wlr/types/wlr_output_layout.h>
 
 #include "action.h"
 #include "desk.h"
@@ -74,23 +75,23 @@
 }
 
 
-void reset_pan(struct server *server, void *data) {
+void reset_zoom(struct server *server, void *data) {
     struct desk *desk = server->current_desk;
+    double f = 1 / desk->zoom;
+    struct wlr_box *extents = wlr_output_layout_get_box(server->output_layout, NULL);
+    double fx = extents->width * (f - 1) / 2;
+    double fy = extents->height * (f - 1) / 2;
     struct view *view;
     wl_list_for_each(view, &desk->views, link) {
-	view->x -= desk->panned_x;
-	view->y -= desk->panned_y;
+	view->x -= fx;
+	view->y -= fy;
     }
-    desk->panned_x = desk->panned_y = 0;
+    desk->panned_x -= fx;
+    desk->panned_y -= fy;
     desk->zoom = 1;
 }
 
 
-void save_pan(struct server *server, void *data) {
-    server->current_desk->panned_x = server->current_desk->panned_y = 0;
-}
-
-
 void zoom_desk(struct server *server, void *data) {
     /* dir > 0 ? zoom in : zoom out */
     struct desk *desk = server->current_desk;

deskwm.conf Modified

@@ -38,10 +38,9 @@
 bind	Ctrl	q		close_current_window
 bind		Tab		next_desk
 bind		ISO_Left_Tab	prev_desk
-bind		r		save_pan
-bind	Shift	r		reset_pan
 bind		i		zoom_in
 bind		o		zoom_out
+bind		r		reset_zoom
 # The line after 'exec' is executed by /bin/sh
 bind		Return		exec wterm