mirror of
				https://github.com/DreamMaoMao/maomaowm.git
				synced 2025-11-03 09:01:47 -05:00 
			
		
		
		
	opt: optimize snap_floating_window for no border render
This commit is contained in:
		
							parent
							
								
									1167380ad4
								
							
						
					
					
						commit
						c60f4e75c5
					
				
					 1 changed files with 29 additions and 15 deletions
				
			
		
							
								
								
									
										44
									
								
								src/maomao.c
									
										
									
									
									
								
							
							
						
						
									
										44
									
								
								src/maomao.c
									
										
									
									
									
								
							| 
						 | 
					@ -1311,9 +1311,9 @@ void applybounds(Client *c, struct wlr_box *bbox) {
 | 
				
			||||||
    c->geom.x = bbox->x + bbox->width - c->geom.width;
 | 
					    c->geom.x = bbox->x + bbox->width - c->geom.width;
 | 
				
			||||||
  if (c->geom.y >= bbox->y + bbox->height)
 | 
					  if (c->geom.y >= bbox->y + bbox->height)
 | 
				
			||||||
    c->geom.y = bbox->y + bbox->height - c->geom.height;
 | 
					    c->geom.y = bbox->y + bbox->height - c->geom.height;
 | 
				
			||||||
  if (c->geom.x <= bbox->x)
 | 
					  if (c->geom.x + c->geom.width <= bbox->x)
 | 
				
			||||||
    c->geom.x = bbox->x;
 | 
					    c->geom.x = bbox->x;
 | 
				
			||||||
  if (c->geom.y <= bbox->y)
 | 
					  if (c->geom.y + c->geom.height <= bbox->y)
 | 
				
			||||||
    c->geom.y = bbox->y;
 | 
					    c->geom.y = bbox->y;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2045,6 +2045,14 @@ void apply_window_snap(Client *c) {
 | 
				
			||||||
      snap_right_screen = 0;
 | 
					      snap_right_screen = 0;
 | 
				
			||||||
  int snap_up_mon = 0, snap_down_mon = 0, snap_left_mon = 0, snap_right_mon = 0;
 | 
					  int snap_up_mon = 0, snap_down_mon = 0, snap_left_mon = 0, snap_right_mon = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  unsigned int cbw = !render_border ? c->bw : 0;
 | 
				
			||||||
 | 
					  unsigned int tcbw;
 | 
				
			||||||
 | 
					  unsigned int cx,cy,cw,ch,tcx,tcy,tcw,tch;
 | 
				
			||||||
 | 
					  cx = c->geom.x + cbw;
 | 
				
			||||||
 | 
					  cy = c->geom.y + cbw;
 | 
				
			||||||
 | 
					  cw = c->geom.width - 2 * cbw;
 | 
				
			||||||
 | 
					  ch = c->geom.height - 2 * cbw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Client *tc;
 | 
					  Client *tc;
 | 
				
			||||||
  if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling)
 | 
					  if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling)
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
| 
						 | 
					@ -2056,10 +2064,16 @@ void apply_window_snap(Client *c) {
 | 
				
			||||||
    if (tc && tc->isfloating && !tc->iskilling && client_surface(tc)->mapped &&
 | 
					    if (tc && tc->isfloating && !tc->iskilling && client_surface(tc)->mapped &&
 | 
				
			||||||
        VISIBLEON(tc, c->mon)) {
 | 
					        VISIBLEON(tc, c->mon)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      snap_left_temp = c->geom.x - tc->geom.x - tc->geom.width;
 | 
					      tcbw = !render_border ? tc->bw : 0;
 | 
				
			||||||
      snap_right_temp = tc->geom.x - c->geom.x - c->geom.width;
 | 
					      tcx = tc->geom.x + tcbw;
 | 
				
			||||||
      snap_up_temp = c->geom.y - tc->geom.y - tc->geom.height;
 | 
					      tcy = tc->geom.y + tcbw;
 | 
				
			||||||
      snap_down_temp = tc->geom.y - c->geom.y - c->geom.height;
 | 
					      tcw = tc->geom.width - 2 * tcbw;
 | 
				
			||||||
 | 
					      tch = tc->geom.height - 2 * tcbw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      snap_left_temp = cx - tcx - tcw;
 | 
				
			||||||
 | 
					      snap_right_temp = tcx- cx - cw;
 | 
				
			||||||
 | 
					      snap_up_temp = cy - tcy - tch;
 | 
				
			||||||
 | 
					      snap_down_temp = tcy - cy - ch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (snap_left_temp < snap_left && snap_left_temp >= 0) {
 | 
					      if (snap_left_temp < snap_left && snap_left_temp >= 0) {
 | 
				
			||||||
        snap_left = snap_left_temp;
 | 
					        snap_left = snap_left_temp;
 | 
				
			||||||
| 
						 | 
					@ -2076,10 +2090,10 @@ void apply_window_snap(Client *c) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  snap_left_mon = c->geom.x - c->mon->m.x;
 | 
					  snap_left_mon = cx - c->mon->m.x;
 | 
				
			||||||
  snap_right_mon = c->mon->m.x + c->mon->m.width - c->geom.x - c->geom.width;
 | 
					  snap_right_mon = c->mon->m.x + c->mon->m.width - cx - cw;
 | 
				
			||||||
  snap_up_mon = c->geom.y - c->mon->m.y;
 | 
					  snap_up_mon = cy - c->mon->m.y;
 | 
				
			||||||
  snap_down_mon = c->mon->m.y + c->mon->m.height - c->geom.y - c->geom.height;
 | 
					  snap_down_mon = c->mon->m.y + c->mon->m.height - cy - ch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (snap_up_mon > 0 && snap_up_mon < snap_up)
 | 
					  if (snap_up_mon > 0 && snap_up_mon < snap_up)
 | 
				
			||||||
    snap_up = snap_up_mon;
 | 
					    snap_up = snap_up_mon;
 | 
				
			||||||
| 
						 | 
					@ -2090,11 +2104,11 @@ void apply_window_snap(Client *c) {
 | 
				
			||||||
  if (snap_right_mon > 0 && snap_right_mon < snap_right)
 | 
					  if (snap_right_mon > 0 && snap_right_mon < snap_right)
 | 
				
			||||||
    snap_right = snap_right_mon;
 | 
					    snap_right = snap_right_mon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  snap_left_screen = c->geom.x - c->mon->w.x;
 | 
					  snap_left_screen = cx - c->mon->w.x;
 | 
				
			||||||
  snap_right_screen = c->mon->w.x + c->mon->w.width - c->geom.x - c->geom.width;
 | 
					  snap_right_screen = c->mon->w.x + c->mon->w.width - cx - cw;
 | 
				
			||||||
  snap_up_screen = c->geom.y - c->mon->w.y;
 | 
					  snap_up_screen = cy - c->mon->w.y;
 | 
				
			||||||
  snap_down_screen =
 | 
					  snap_down_screen =
 | 
				
			||||||
      c->mon->w.y + c->mon->w.height - c->geom.y - c->geom.height;
 | 
					      c->mon->w.y + c->mon->w.height - cy - ch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (snap_up_screen > 0 && snap_up_screen < snap_up)
 | 
					  if (snap_up_screen > 0 && snap_up_screen < snap_up)
 | 
				
			||||||
    snap_up = snap_up_screen;
 | 
					    snap_up = snap_up_screen;
 | 
				
			||||||
| 
						 | 
					@ -2122,7 +2136,7 @@ void apply_window_snap(Client *c) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  c->oldgeom = c->geom;
 | 
					  c->oldgeom = c->geom;
 | 
				
			||||||
  resize(c, c->geom, 1);
 | 
					  resize(c, c->geom, 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
 | 
					Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue