mirror of
				https://github.com/swaywm/sway.git
				synced 2025-10-29 05:40:18 -04:00 
			
		
		
		
	swaybar: Lift background clearing out of main rendering function
This avoids us from using a bogus background_color value that mutates as swaybar renders things and deciding opacity depending on that. Also remove a redundant full surface clear. Just directly write our desired background color.
This commit is contained in:
		
							parent
							
								
									5d5b21dcce
								
							
						
					
					
						commit
						9cf66e8c7c
					
				
					 1 changed files with 14 additions and 13 deletions
				
			
		|  | @ -693,15 +693,6 @@ static uint32_t render_to_cairo(struct render_context *ctx) { | ||||||
| 	struct swaybar_output *output = ctx->output; | 	struct swaybar_output *output = ctx->output; | ||||||
| 	struct swaybar *bar = output->bar; | 	struct swaybar *bar = output->bar; | ||||||
| 	struct swaybar_config *config = bar->config; | 	struct swaybar_config *config = bar->config; | ||||||
| 	cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE); |  | ||||||
| 	if (output->focused) { |  | ||||||
| 		ctx->background_color = config->colors.focused_background; |  | ||||||
| 	} else { |  | ||||||
| 		ctx->background_color = config->colors.background; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	cairo_set_source_u32(cairo, ctx->background_color); |  | ||||||
| 	cairo_paint(cairo); |  | ||||||
| 
 | 
 | ||||||
| 	int th; | 	int th; | ||||||
| 	get_text_size(cairo, config->font_description, NULL, &th, NULL, 1, false, ""); | 	get_text_size(cairo, config->font_description, NULL, &th, NULL, 1, false, ""); | ||||||
|  | @ -763,8 +754,17 @@ void render_frame(struct swaybar_output *output) { | ||||||
| 
 | 
 | ||||||
| 	free_hotspots(&output->hotspots); | 	free_hotspots(&output->hotspots); | ||||||
| 
 | 
 | ||||||
|  | 	uint32_t background_color; | ||||||
|  | 	if (output->focused) { | ||||||
|  | 		background_color = output->bar->config->colors.focused_background; | ||||||
|  | 	} else { | ||||||
|  | 		background_color = output->bar->config->colors.background; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	struct render_context ctx = { 0 }; | 	struct render_context ctx = { 0 }; | ||||||
| 	ctx.output = output; | 	ctx.output = output; | ||||||
|  | 	// initial background color used for deciding the best way to antialias text
 | ||||||
|  | 	ctx.background_color = background_color; | ||||||
| 
 | 
 | ||||||
| 	cairo_surface_t *recorder = cairo_recording_surface_create( | 	cairo_surface_t *recorder = cairo_recording_surface_create( | ||||||
| 			CAIRO_CONTENT_COLOR_ALPHA, NULL); | 			CAIRO_CONTENT_COLOR_ALPHA, NULL); | ||||||
|  | @ -786,10 +786,11 @@ void render_frame(struct swaybar_output *output) { | ||||||
| 		ctx.textaa_sharp = fo; | 		ctx.textaa_sharp = fo; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	cairo_save(cairo); | 
 | ||||||
| 	cairo_set_operator(cairo, CAIRO_OPERATOR_CLEAR); | 	cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE); | ||||||
|  | 	cairo_set_source_u32(cairo, background_color); | ||||||
| 	cairo_paint(cairo); | 	cairo_paint(cairo); | ||||||
| 	cairo_restore(cairo); | 
 | ||||||
| 	uint32_t height = render_to_cairo(&ctx); | 	uint32_t height = render_to_cairo(&ctx); | ||||||
| 	int config_height = output->bar->config->height; | 	int config_height = output->bar->config->height; | ||||||
| 	if (config_height > 0) { | 	if (config_height > 0) { | ||||||
|  | @ -834,7 +835,7 @@ void render_frame(struct swaybar_output *output) { | ||||||
| 		wl_surface_damage(output->surface, 0, 0, | 		wl_surface_damage(output->surface, 0, 0, | ||||||
| 				output->width, output->height); | 				output->width, output->height); | ||||||
| 
 | 
 | ||||||
| 		uint32_t bg_alpha = ctx.background_color & 0xFF; | 		uint32_t bg_alpha = background_color & 0xFF; | ||||||
| 		if (bg_alpha == 0xFF) { | 		if (bg_alpha == 0xFF) { | ||||||
| 			struct wl_region *region = | 			struct wl_region *region = | ||||||
| 				wl_compositor_create_region(output->bar->compositor); | 				wl_compositor_create_region(output->bar->compositor); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alexander Orzechowski
						Alexander Orzechowski