mirror of
				https://github.com/wizbright/waybox.git
				synced 2025-11-03 09:01:45 -05:00 
			
		
		
		
	Merge branch 'master' of https://github.com/wizbright/waybox
This commit is contained in:
		
						commit
						428484959c
					
				
					 3 changed files with 46 additions and 28 deletions
				
			
		| 
						 | 
					@ -42,7 +42,7 @@ struct wb_server {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct wb_view *grabbed_view;
 | 
						struct wb_view *grabbed_view;
 | 
				
			||||||
	double grab_x, grab_y;
 | 
						double grab_x, grab_y;
 | 
				
			||||||
	int grab_width, grab_height;
 | 
						struct wlr_box grab_geo_box;
 | 
				
			||||||
	uint32_t resize_edges;
 | 
						uint32_t resize_edges;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct wlr_xdg_shell *xdg_shell;
 | 
						struct wlr_xdg_shell *xdg_shell;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,33 +10,44 @@ static void process_cursor_move(struct wb_server *server) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void process_cursor_resize(struct wb_server *server) {
 | 
					static void process_cursor_resize(struct wb_server *server) {
 | 
				
			||||||
	struct wb_view *view = server->grabbed_view;
 | 
						struct wb_view *view = server->grabbed_view;
 | 
				
			||||||
	double dx = server->cursor->cursor->x - server->grab_x;
 | 
						double border_x = server->cursor->cursor->x - server->grab_x;
 | 
				
			||||||
	double dy = server->cursor->cursor->y - server->grab_y;
 | 
						double border_y = server->cursor->cursor->y - server->grab_y;
 | 
				
			||||||
	double x = view->x;
 | 
						int new_left = server->grab_geo_box.x;
 | 
				
			||||||
	double y = view->y;
 | 
						int new_right = server->grab_geo_box.x + server->grab_geo_box.width;
 | 
				
			||||||
	int width = server->grab_width;
 | 
						int new_top = server->grab_geo_box.y;
 | 
				
			||||||
	int height = server->grab_height;
 | 
						int new_bottom = server->grab_geo_box.y + server->grab_geo_box.height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (server->resize_edges & WLR_EDGE_TOP) {
 | 
						if (server->resize_edges & WLR_EDGE_TOP) {
 | 
				
			||||||
		y = server->grab_y + dy;
 | 
							new_top = border_y;
 | 
				
			||||||
		height -= dy;
 | 
							if (new_top >= new_bottom) {
 | 
				
			||||||
		if (height < 1) {
 | 
								new_top = new_bottom - 1;
 | 
				
			||||||
			y += height;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else if (server->resize_edges & WLR_EDGE_BOTTOM) {
 | 
						} else if (server->resize_edges & WLR_EDGE_BOTTOM) {
 | 
				
			||||||
		height += dy;
 | 
							new_bottom = border_y;
 | 
				
			||||||
 | 
							if (new_bottom <= new_top) {
 | 
				
			||||||
 | 
								new_bottom = new_top + 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (server->resize_edges & WLR_EDGE_LEFT) {
 | 
						if (server->resize_edges & WLR_EDGE_LEFT) {
 | 
				
			||||||
		x = server->grab_x + dx;
 | 
							new_left = border_x;
 | 
				
			||||||
		width -= dx;
 | 
							if (new_left >= new_right) {
 | 
				
			||||||
		if (width < 1) {
 | 
								new_left = new_right - 1;
 | 
				
			||||||
			x += width;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else if (server->resize_edges & WLR_EDGE_RIGHT) {
 | 
						} else if (server->resize_edges & WLR_EDGE_RIGHT) {
 | 
				
			||||||
		width += dx;
 | 
							new_right = border_x;
 | 
				
			||||||
 | 
							if (new_right <= new_left) {
 | 
				
			||||||
 | 
								new_right = new_left + 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	view->x = x;
 | 
						}
 | 
				
			||||||
	view->y = y;
 | 
					
 | 
				
			||||||
	wlr_xdg_toplevel_set_size(view->xdg_surface, width, height);
 | 
						struct wlr_box geo_box;
 | 
				
			||||||
 | 
						wlr_xdg_surface_get_geometry(view->xdg_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->xdg_surface, new_width, new_height);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void process_cursor_motion(struct wb_server *server, uint32_t time) {
 | 
					static void process_cursor_motion(struct wb_server *server, uint32_t time) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,19 +90,26 @@ static void begin_interactive(struct wb_view *view,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	server->grabbed_view = view;
 | 
						server->grabbed_view = view;
 | 
				
			||||||
	server->cursor->cursor_mode = mode;
 | 
						server->cursor->cursor_mode = mode;
 | 
				
			||||||
	struct wlr_box geo_box;
 | 
					
 | 
				
			||||||
	wlr_xdg_surface_get_geometry(view->xdg_surface, &geo_box);
 | 
					 | 
				
			||||||
	if (mode == WB_CURSOR_MOVE) {
 | 
						if (mode == WB_CURSOR_MOVE) {
 | 
				
			||||||
		server->grab_x = server->cursor->cursor->x - view->x;
 | 
							server->grab_x = server->cursor->cursor->x - view->x;
 | 
				
			||||||
		server->grab_y = server->cursor->cursor->y - view->y;
 | 
							server->grab_y = server->cursor->cursor->y - view->y;
 | 
				
			||||||
	} else {
 | 
						} else if (mode == WB_CURSOR_RESIZE) {
 | 
				
			||||||
		server->grab_x = server->cursor->cursor->x + geo_box.x;
 | 
							struct wlr_box geo_box;
 | 
				
			||||||
		server->grab_y = server->cursor->cursor->y + geo_box.y;
 | 
							wlr_xdg_surface_get_geometry(view->xdg_surface, &geo_box);
 | 
				
			||||||
	}
 | 
					
 | 
				
			||||||
	server->grab_width = geo_box.width;
 | 
							double border_x = (view->x + geo_box.x) + ((edges & WLR_EDGE_RIGHT) ? geo_box.width : 0);
 | 
				
			||||||
	server->grab_height = geo_box.height;
 | 
							double border_y = (view->y + geo_box.y) + ((edges & WLR_EDGE_BOTTOM) ? geo_box.height : 0);
 | 
				
			||||||
 | 
							server->grab_x = server->cursor->cursor->x - border_x;
 | 
				
			||||||
 | 
							server->grab_y = server->cursor->cursor->y - border_y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							server->grab_geo_box = geo_box;
 | 
				
			||||||
 | 
							server->grab_geo_box.x += view->x;
 | 
				
			||||||
 | 
							server->grab_geo_box.y += view->y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		server->resize_edges = edges;
 | 
							server->resize_edges = edges;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void xdg_toplevel_request_move(
 | 
					static void xdg_toplevel_request_move(
 | 
				
			||||||
		struct wl_listener *listener, void *data) {
 | 
							struct wl_listener *listener, void *data) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue