]> git.mdlowis.com Git - proto/labwc.git/commitdiff
cursor: Handle min size better
authorJoshua Ashton <joshua@froggi.es>
Sun, 17 Oct 2021 18:32:27 +0000 (18:32 +0000)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sun, 17 Oct 2021 18:49:05 +0000 (19:49 +0100)
Less janky than just returning if one extent reaches max, and also uses the new min_size function for xwayland hint support.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
src/cursor.c

index cea92cfd74526f74e5fc8381538b473916160b6b..774e044b8862c242d553d960b4448a0719772e16 100644 (file)
@@ -82,9 +82,6 @@ process_cursor_move(struct server *server, uint32_t time)
        view->impl->move(view, server->grab_box.x + dx, server->grab_box.y + dy);
 }
 
-#define MIN_VIEW_WIDTH (100)
-#define MIN_VIEW_HEIGHT (60)
-
 static void
 process_cursor_resize(struct server *server, uint32_t time)
 {
@@ -97,22 +94,33 @@ process_cursor_resize(struct server *server, uint32_t time)
                .x = view->x, .y = view->y, .width = view->w, .height = view->h
        };
 
+       int min_width, min_height;
+       view_min_size(view, &min_width, &min_height);
+
        if (server->resize_edges & WLR_EDGE_TOP) {
+               if (server->grab_box.height - dy < min_height) {
+                       dy = server->grab_box.height - min_height;
+               }
                new_view_geo.y = server->grab_box.y + dy;
                new_view_geo.height = server->grab_box.height - dy;
        } else if (server->resize_edges & WLR_EDGE_BOTTOM) {
+               if (server->grab_box.height + dy < min_height) {
+                       dy = min_height - server->grab_box.height;
+               }
                new_view_geo.height = server->grab_box.height + dy;
        }
        if (server->resize_edges & WLR_EDGE_LEFT) {
+               if (server->grab_box.width - dx < min_width) {
+                       dx = server->grab_box.width - min_width;
+               }
                new_view_geo.x = server->grab_box.x + dx;
                new_view_geo.width = server->grab_box.width - dx;
        } else if (server->resize_edges & WLR_EDGE_RIGHT) {
+               if (server->grab_box.width + dx < min_width) {
+                       dx = min_width - server->grab_box.width;
+               }
                new_view_geo.width = server->grab_box.width + dx;
        }
-       if ((new_view_geo.height < MIN_VIEW_HEIGHT) ||
-           (new_view_geo.width < MIN_VIEW_WIDTH)) {
-               return;
-       }
 
        view_move_resize(view, new_view_geo);
 }