mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	Use cairo_push_group() for all double buffering, drop window_copy_*()
This commit is contained in:
		
							parent
							
								
									f39a9ccbb3
								
							
						
					
					
						commit
						e164e4ef72
					
				
					 4 changed files with 24 additions and 55 deletions
				
			
		| 
						 | 
					@ -171,21 +171,20 @@ dnd_draw(struct dnd *dnd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct rectangle allocation;
 | 
						struct rectangle allocation;
 | 
				
			||||||
	cairo_t *cr;
 | 
						cairo_t *cr;
 | 
				
			||||||
	cairo_surface_t *wsurface, *surface;
 | 
						cairo_surface_t *surface;
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	window_draw(dnd->window);
 | 
						window_draw(dnd->window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	window_get_child_allocation(dnd->window, &allocation);
 | 
						surface = window_get_surface(dnd->window);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	wsurface = window_get_surface(dnd->window);
 | 
					 | 
				
			||||||
	surface = cairo_surface_create_similar(wsurface,
 | 
					 | 
				
			||||||
					       CAIRO_CONTENT_COLOR_ALPHA,
 | 
					 | 
				
			||||||
					       allocation.width,
 | 
					 | 
				
			||||||
					       allocation.height);
 | 
					 | 
				
			||||||
	cairo_surface_destroy(wsurface);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cr = cairo_create(surface);
 | 
						cr = cairo_create(surface);
 | 
				
			||||||
 | 
						window_get_child_allocation(dnd->window, &allocation);
 | 
				
			||||||
 | 
						cairo_rectangle(cr, allocation.x, allocation.y,
 | 
				
			||||||
 | 
								allocation.width, allocation.height);
 | 
				
			||||||
 | 
						cairo_clip(cr);
 | 
				
			||||||
 | 
						cairo_push_group(cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cairo_translate(cr, allocation.x, allocation.y);
 | 
				
			||||||
	cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
 | 
						cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
 | 
				
			||||||
	cairo_set_source_rgba(cr, 0, 0, 0, 0.8);
 | 
						cairo_set_source_rgba(cr, 0, 0, 0, 0.8);
 | 
				
			||||||
	cairo_paint(cr);
 | 
						cairo_paint(cr);
 | 
				
			||||||
| 
						 | 
					@ -199,9 +198,9 @@ dnd_draw(struct dnd *dnd)
 | 
				
			||||||
		cairo_paint(cr);
 | 
							cairo_paint(cr);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cairo_pop_group_to_source(cr);
 | 
				
			||||||
 | 
						cairo_paint(cr);
 | 
				
			||||||
	cairo_destroy(cr);
 | 
						cairo_destroy(cr);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	window_copy_surface(dnd->window, &allocation, surface);
 | 
					 | 
				
			||||||
	cairo_surface_destroy(surface);
 | 
						cairo_surface_destroy(surface);
 | 
				
			||||||
	window_flush(dnd->window);
 | 
						window_flush(dnd->window);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -140,7 +140,7 @@ image_draw(struct image *image)
 | 
				
			||||||
	struct rectangle allocation;
 | 
						struct rectangle allocation;
 | 
				
			||||||
	GdkPixbuf *pb;
 | 
						GdkPixbuf *pb;
 | 
				
			||||||
	cairo_t *cr;
 | 
						cairo_t *cr;
 | 
				
			||||||
	cairo_surface_t *wsurface, *surface;
 | 
						cairo_surface_t *surface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	window_draw(image->window);
 | 
						window_draw(image->window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -153,14 +153,15 @@ image_draw(struct image *image)
 | 
				
			||||||
	if (pb == NULL)
 | 
						if (pb == NULL)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wsurface = window_get_surface(image->window);
 | 
						surface = window_get_surface(image->window);
 | 
				
			||||||
	surface = cairo_surface_create_similar(wsurface,
 | 
					 | 
				
			||||||
					       CAIRO_CONTENT_COLOR_ALPHA,
 | 
					 | 
				
			||||||
					       allocation.width,
 | 
					 | 
				
			||||||
					       allocation.height);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cairo_surface_destroy(wsurface);
 | 
					 | 
				
			||||||
	cr = cairo_create(surface);
 | 
						cr = cairo_create(surface);
 | 
				
			||||||
 | 
						window_get_child_allocation(image->window, &allocation);
 | 
				
			||||||
 | 
						cairo_rectangle(cr, allocation.x, allocation.y,
 | 
				
			||||||
 | 
								allocation.width, allocation.height);
 | 
				
			||||||
 | 
						cairo_clip(cr);
 | 
				
			||||||
 | 
						cairo_push_group(cr);
 | 
				
			||||||
 | 
						cairo_translate(cr, allocation.x, allocation.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
 | 
						cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
 | 
				
			||||||
	cairo_set_source_rgba(cr, 0, 0, 0, 1);
 | 
						cairo_set_source_rgba(cr, 0, 0, 0, 1);
 | 
				
			||||||
	cairo_paint(cr);
 | 
						cairo_paint(cr);
 | 
				
			||||||
| 
						 | 
					@ -169,11 +170,13 @@ image_draw(struct image *image)
 | 
				
			||||||
			  allocation.width, allocation.height);
 | 
								  allocation.width, allocation.height);
 | 
				
			||||||
	cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
 | 
						cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
 | 
				
			||||||
	cairo_paint(cr);
 | 
						cairo_paint(cr);
 | 
				
			||||||
	cairo_destroy(cr);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g_object_unref(pb);
 | 
						g_object_unref(pb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	window_copy_surface(image->window, &allocation, surface);
 | 
						cairo_pop_group_to_source(cr);
 | 
				
			||||||
 | 
						cairo_paint(cr);
 | 
				
			||||||
 | 
						cairo_destroy(cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	window_flush(image->window);
 | 
						window_flush(image->window);
 | 
				
			||||||
	cairo_surface_destroy(surface);
 | 
						cairo_surface_destroy(surface);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1102,30 +1102,6 @@ window_set_child_size(struct window *window, int32_t width, int32_t height)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					 | 
				
			||||||
window_copy_image(struct window *window,
 | 
					 | 
				
			||||||
		  struct rectangle *rectangle, EGLImageKHR image)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	/* set image as read buffer, copy pixels or something... */
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
window_copy_surface(struct window *window,
 | 
					 | 
				
			||||||
		    struct rectangle *rectangle,
 | 
					 | 
				
			||||||
		    cairo_surface_t *surface)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	cairo_t *cr;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cr = cairo_create (window->cairo_surface);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cairo_set_source_surface (cr,
 | 
					 | 
				
			||||||
				  surface,
 | 
					 | 
				
			||||||
				  rectangle->x, rectangle->y);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cairo_paint (cr);
 | 
					 | 
				
			||||||
	cairo_destroy (cr);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static gboolean
 | 
					static gboolean
 | 
				
			||||||
idle_redraw(void *data)
 | 
					idle_redraw(void *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -141,10 +141,6 @@ window_get_child_allocation(struct window *window,
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
window_set_child_size(struct window *window, int32_t width, int32_t height);
 | 
					window_set_child_size(struct window *window, int32_t width, int32_t height);
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
window_copy_image(struct window *window,
 | 
					 | 
				
			||||||
		  struct rectangle *rectangle,
 | 
					 | 
				
			||||||
		  void *image);
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
window_schedule_redraw(struct window *window);
 | 
					window_schedule_redraw(struct window *window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -154,11 +150,6 @@ window_damage(struct window *window, int32_t x, int32_t y,
 | 
				
			||||||
cairo_surface_t *
 | 
					cairo_surface_t *
 | 
				
			||||||
window_get_surface(struct window *window);
 | 
					window_get_surface(struct window *window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					 | 
				
			||||||
window_copy_surface(struct window *window,
 | 
					 | 
				
			||||||
		    struct rectangle *rectangle,
 | 
					 | 
				
			||||||
		    cairo_surface_t *surface);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
window_flush(struct window *window);
 | 
					window_flush(struct window *window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue