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

Commit da019873de50ce1830b0113e67acfb78078fb80a
Parent: e2bdcdb1daaf7ffcf9e4e93adfb0f18bc88ad958
Author: mcol <mcol@posteo.net>
Date: 2020-11-12 00:53:54 +0000
Committer: mcol <mcol@posteo.net>
Committed: 2020-11-12 00:53:54 +0000

simplify resizing and make compatible with zoom

src/shell.c Modified

@@ -80,23 +80,14 @@
     server->grabbed_view = view;
     server->cursor_mode = mode;
 
-    if (mode == CURSOR_MOVE) {
-	double zoom = server->current_desk->zoom;
-	server->grab_x = server->cursor->x - view->x * zoom;
-	server->grab_y = server->cursor->y - view->y * zoom;
-    } else {
-	struct wlr_box geo_box;
-	wlr_xdg_surface_get_geometry(view->surface, &geo_box);
-
-	double border_x = (view->x + geo_box.x) + ((edges & WLR_EDGE_RIGHT) ? geo_box.width : 0);
-	double border_y = (view->y + geo_box.y) + ((edges & WLR_EDGE_BOTTOM) ? geo_box.height : 0);
-	server->grab_x = server->cursor->x - border_x;
-	server->grab_y = server->cursor->y - border_y;
-
-	server->grab_geobox = geo_box;
-	server->grab_geobox.x += view->x;
-	server->grab_geobox.y += view->y;
-
+    double zoom = server->current_desk->zoom;
+    server->grab_x = server->cursor->x - view->x * zoom;
+    server->grab_y = server->cursor->y - view->y * zoom;
+
+    if (mode == CURSOR_RESIZE) {
+	wlr_xdg_surface_get_geometry(view->surface, &server->grab_geobox);
+	server->grab_geobox.x = view->x;
+	server->grab_geobox.y = view->y;
 	server->resize_edges = edges;
     }
 }

src/input.h Modified

@@ -4,7 +4,7 @@
 #include "types.h"
 
 void process_cursor_move(struct server *server, uint32_t time, double zoom);
-void process_cursor_resize(struct server *server, uint32_t time);
+void process_cursor_resize(struct server *server, uint32_t time, double zoom);
 bool view_at(
     struct view *view, double lx, double ly, struct wlr_surface **surface,
     double *sx, double *sy

src/input.c Modified

@@ -19,46 +19,32 @@
 }
 
 
-void process_cursor_resize(struct server *server, uint32_t time) {
+void process_cursor_resize(struct server *server, uint32_t time, double zoom) {
     struct view *view = server->grabbed_view;
-    double border_x = server->cursor->x - server->grab_x;
-    double border_y = server->cursor->y - server->grab_y;
-    int new_left = server->grab_geobox.x;
-    int new_right = server->grab_geobox.x + server->grab_geobox.width;
-    int new_top = server->grab_geobox.y;
-    int new_bottom = server->grab_geobox.y + server->grab_geobox.height; 
+    int x = server->grab_geobox.x;
+    int width = server->grab_geobox.width;
+    int y = server->grab_geobox.y;
+    int height = server->grab_geobox.height;
+
+    double cx = (server->cursor->x - server->grab_x) / zoom;
+    double cy = (server->cursor->y - server->grab_y) / zoom;
 
     if (server->resize_edges & WLR_EDGE_TOP) {
-        new_top = border_y;
-        if (new_top >= new_bottom) {
-            new_top = new_bottom - 1;
-        }
+	height -= cy - y;
+	y = cy;
     } else if (server->resize_edges & WLR_EDGE_BOTTOM) {
-        new_bottom = border_y;
-        if (new_bottom <= new_top) {
-            new_bottom = new_top + 1;
-        }
+        height += cy - y;
     }
     if (server->resize_edges & WLR_EDGE_LEFT) {
-        new_left = border_x;
-        if (new_left >= new_right) {
-            new_left = new_right - 1;
-        }
+        width -= cx - x;
+	x = cx;
     } else if (server->resize_edges & WLR_EDGE_RIGHT) {
-        new_right = border_x;
-        if (new_right <= new_left) {
-            new_right = new_left + 1;
-        }
+        width += cx - x;
     }
 
-    struct wlr_box geo_box;
-    wlr_xdg_surface_get_geometry(view->surface, &geo_box);
-    view->x = new_left - geo_box.x;
-    view->y = new_top - geo_box.y;
-
-    int new_width = new_right - new_left;
-    int new_height = new_bottom - new_top;
-    wlr_xdg_toplevel_set_size(view->surface, new_width, new_height);
+    view->x = x;
+    view->y = y;
+    wlr_xdg_toplevel_set_size(view->surface, width, height);
 }
 
 
@@ -144,7 +130,7 @@
 	    break;
 
 	case CURSOR_RESIZE:
-	    process_cursor_resize(server, time);
+	    process_cursor_resize(server, time, zoom);
 	    break;
     }
 }