mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge pull request #74 from Luminarys/master
Added in proper floating window resizing
This commit is contained in:
		
						commit
						ab5805ca6e
					
				
					 2 changed files with 22 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -337,6 +337,7 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct
 | 
			
		|||
	}
 | 
			
		||||
	// Do checks to determine if proper keys are being held
 | 
			
		||||
	swayc_t *view = active_workspace->focused;
 | 
			
		||||
	uint32_t edge = 0;
 | 
			
		||||
	if (m1_held && view) {
 | 
			
		||||
		if (view->is_floating) {
 | 
			
		||||
			while (keys_pressed[i++]) {
 | 
			
		||||
| 
						 | 
				
			
			@ -344,7 +345,6 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct
 | 
			
		|||
					int dx = mouse_origin.x - prev_pos.x;
 | 
			
		||||
					int dy = mouse_origin.y - prev_pos.y;
 | 
			
		||||
					sway_log(L_DEBUG, "Moving from px: %d to cx: %d and from py: %d to cy: %d", prev_pos.x, mouse_origin.x, prev_pos.y, mouse_origin.y);
 | 
			
		||||
					sway_log(L_DEBUG, "Moving: dx: %d, dy: %d", dx, dy);
 | 
			
		||||
 | 
			
		||||
					view->x += dx;
 | 
			
		||||
					view->y += dy;
 | 
			
		||||
| 
						 | 
				
			
			@ -360,31 +360,35 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct
 | 
			
		|||
					int dx = mouse_origin.x - prev_pos.x;
 | 
			
		||||
					int dy = mouse_origin.y - prev_pos.y;
 | 
			
		||||
					sway_log(L_DEBUG, "Moving from px: %d to cx: %d and from py: %d to cy: %d", prev_pos.x, mouse_origin.x, prev_pos.y, mouse_origin.y);
 | 
			
		||||
					sway_log(L_INFO, "Moving: dx: %d, dy: %d", dx, dy);
 | 
			
		||||
 | 
			
		||||
					// Move and resize the view based on the dx/dy and mouse position
 | 
			
		||||
					int midway_x = view->x + view->width/2;
 | 
			
		||||
					int midway_y = view->y + view->height/2;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
					if (dx < 0) {
 | 
			
		||||
						changed_floating = true;
 | 
			
		||||
						if (mouse_origin.x > midway_x) {
 | 
			
		||||
							sway_log(L_INFO, "Downsizing view to the left");
 | 
			
		||||
							view->width += dx;
 | 
			
		||||
							edge += WLC_RESIZE_EDGE_RIGHT;
 | 
			
		||||
						} else {
 | 
			
		||||
							sway_log(L_INFO, "Upsizing view to the left");
 | 
			
		||||
							view->x += dx;
 | 
			
		||||
							view->width -= dx;
 | 
			
		||||
							edge += WLC_RESIZE_EDGE_LEFT;
 | 
			
		||||
						}
 | 
			
		||||
					} else if (dx > 0){
 | 
			
		||||
						changed_floating = true;
 | 
			
		||||
						if (mouse_origin.x > midway_x) {
 | 
			
		||||
							sway_log(L_INFO, "Upsizing to the right");
 | 
			
		||||
							view->width += dx;
 | 
			
		||||
							edge += WLC_RESIZE_EDGE_RIGHT;
 | 
			
		||||
						} else {
 | 
			
		||||
							sway_log(L_INFO, "Downsizing to the right");
 | 
			
		||||
							view->x += dx;
 | 
			
		||||
							view->width -= dx;
 | 
			
		||||
							edge += WLC_RESIZE_EDGE_LEFT;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -393,20 +397,25 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct
 | 
			
		|||
						if (mouse_origin.y > midway_y) {
 | 
			
		||||
							sway_log(L_INFO, "Downsizing view to the top");
 | 
			
		||||
							view->height += dy;
 | 
			
		||||
							edge += WLC_RESIZE_EDGE_BOTTOM;
 | 
			
		||||
						} else {
 | 
			
		||||
							sway_log(L_INFO, "Upsizing the view to the top");
 | 
			
		||||
							view->y += dy;
 | 
			
		||||
							view->height -= dy;
 | 
			
		||||
							edge += WLC_RESIZE_EDGE_TOP;
 | 
			
		||||
						}
 | 
			
		||||
					} else if (dy > 0) {
 | 
			
		||||
						changed_floating = true;
 | 
			
		||||
						if (mouse_origin.y > midway_y) {
 | 
			
		||||
							sway_log(L_INFO, "Upsizing to the bottom");
 | 
			
		||||
							view->height += dy;
 | 
			
		||||
							edge += WLC_RESIZE_EDGE_BOTTOM;
 | 
			
		||||
						} else {
 | 
			
		||||
							edge = WLC_RESIZE_EDGE_BOTTOM;
 | 
			
		||||
							sway_log(L_INFO, "Downsizing to the bottom");
 | 
			
		||||
							view->y += dy;
 | 
			
		||||
							view->height -= dy;
 | 
			
		||||
							edge += WLC_RESIZE_EDGE_TOP;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
| 
						 | 
				
			
			@ -424,7 +433,17 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct
 | 
			
		|||
	prev_handle = handle;
 | 
			
		||||
	prev_pos = mouse_origin;
 | 
			
		||||
	if (changed_floating) {
 | 
			
		||||
		arrange_windows(view, -1, -1);
 | 
			
		||||
		struct wlc_geometry geometry = {
 | 
			
		||||
			.origin = {
 | 
			
		||||
				.x = view->x,
 | 
			
		||||
				.y = view->y
 | 
			
		||||
			},
 | 
			
		||||
			.size = {
 | 
			
		||||
				.w = view->width,
 | 
			
		||||
				.h = view->height
 | 
			
		||||
			}
 | 
			
		||||
		};
 | 
			
		||||
		wlc_view_set_geometry(view->handle, edge, &geometry);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	return false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -237,8 +237,6 @@ void arrange_windows(swayc_t *container, int width, int height) {
 | 
			
		|||
					wlc_view_bring_to_front(view->handle);
 | 
			
		||||
				} else {
 | 
			
		||||
					wlc_view_set_geometry(view->handle, 0, &geometry);
 | 
			
		||||
					view->width = width;
 | 
			
		||||
					view->height = height;
 | 
			
		||||
					// Bring the views to the front in order of the list, the list
 | 
			
		||||
					// will be kept up to date so that more recently focused views
 | 
			
		||||
					// have higher indexes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue