Simplify corner arcs in X11 code
This commit is contained in:
		
							parent
							
								
									d5fd674d2f
								
							
						
					
					
						commit
						aab9fef78c
					
				
							
								
								
									
										61
									
								
								src/x11/x.c
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								src/x11/x.c
									
									
									
									
									
								
							| @ -81,18 +81,18 @@ static void x_win_move(window_x11 *win, int x, int y, int width, int height) | ||||
|         } | ||||
| } | ||||
| 
 | ||||
| void x_win_round_corners(window_x11 *win, const int rad) | ||||
| static void x_win_round_corners(window_x11 *win, const int rad) | ||||
| { | ||||
|         const int width = win->dim.w; | ||||
|         const int height = win->dim.h; | ||||
|         const int dia = 2 * rad; | ||||
|         const int degrees = 64; // the factor to convert degrees to XFillArc's angle param
 | ||||
| 
 | ||||
|         Pixmap mask = XCreatePixmap(xctx.dpy, win->xwin, width, height, 1); | ||||
|         XGCValues xgcv; | ||||
| 
 | ||||
|         GC shape_gc = XCreateGC(xctx.dpy, mask, 0, &xgcv); | ||||
| 
 | ||||
|         const int dia = 2 * rad; | ||||
| 
 | ||||
|         XSetForeground(xctx.dpy, shape_gc, 0); | ||||
|         XFillRectangle(xctx.dpy, | ||||
|                        mask, | ||||
| @ -104,43 +104,26 @@ void x_win_round_corners(window_x11 *win, const int rad) | ||||
| 
 | ||||
|         XSetForeground(xctx.dpy, shape_gc, 1); | ||||
| 
 | ||||
|         XFillArc(xctx.dpy, | ||||
|                  mask, | ||||
|                  shape_gc, | ||||
|                  0, | ||||
|                  0, | ||||
|                  dia, | ||||
|                  dia, | ||||
|                  0, | ||||
|                  360 * 64); | ||||
|         XFillArc(xctx.dpy, | ||||
|                  mask, | ||||
|                  shape_gc, | ||||
|                  width - dia - 1, | ||||
|                  0, | ||||
|                  dia, | ||||
|                  dia, | ||||
|                  0, | ||||
|                  360 * 64); | ||||
|         XFillArc(xctx.dpy, | ||||
|                  mask, | ||||
|                  shape_gc, | ||||
|                  0, | ||||
|                  height - dia - 1, | ||||
|                  dia, | ||||
|                  dia, | ||||
|                  0, | ||||
|                  360 * 64); | ||||
|         XFillArc(xctx.dpy, | ||||
|                  mask, | ||||
|                  shape_gc, | ||||
|                  width - dia - 1, | ||||
|                  height - dia - 1, | ||||
|                  dia, | ||||
|                  dia, | ||||
|                  0, | ||||
|                  360 * 64); | ||||
|         /* To mark all pixels, which should get exposed, we
 | ||||
|          * use a circle for every corner and two overlapping rectangles */ | ||||
|         unsigned const int centercoords[] = { | ||||
|                 0,               0, | ||||
|                 width - dia - 1, 0, | ||||
|                 0,               height - dia - 1, | ||||
|                 width - dia - 1, height - dia - 1, | ||||
|         }; | ||||
| 
 | ||||
|         for (int i = 0; i < sizeof(centercoords)/sizeof(unsigned int); i = i+2) { | ||||
|                 XFillArc(xctx.dpy, | ||||
|                          mask, | ||||
|                          shape_gc, | ||||
|                          centercoords[i], | ||||
|                          centercoords[i+1], | ||||
|                          dia, | ||||
|                          dia, | ||||
|                          degrees * 0, | ||||
|                          degrees * 360); | ||||
|         } | ||||
|         XFillRectangle(xctx.dpy, | ||||
|                        mask, | ||||
|                        shape_gc, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Benedikt Heine
						Benedikt Heine