gsk: Tweak cairo node apis

Rename the surface getter to peek, following other render
node getters, and make the surface-based constructor private,
since it is not something we want to encourage.

Update all callers.
This commit is contained in:
Matthias Clasen 2017-10-20 08:52:02 +02:00
parent eee89587c3
commit 243bd4f0c8
8 changed files with 21 additions and 49 deletions

View File

@ -813,7 +813,7 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self,
case GSK_CAIRO_NODE: case GSK_CAIRO_NODE:
{ {
cairo_surface_t *surface = gsk_cairo_node_get_surface (node); const cairo_surface_t *surface = gsk_cairo_node_peek_surface (node);
int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST; int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST;
if (surface == NULL) if (surface == NULL)
@ -828,7 +828,7 @@ gsk_gl_renderer_add_render_item (GskGLRenderer *self,
gsk_gl_driver_bind_source_texture (self->gl_driver, item.render_data.texture_id); gsk_gl_driver_bind_source_texture (self->gl_driver, item.render_data.texture_id);
gsk_gl_driver_init_texture_with_surface (self->gl_driver, gsk_gl_driver_init_texture_with_surface (self->gl_driver,
item.render_data.texture_id, item.render_data.texture_id,
surface, (cairo_surface_t *)surface,
gl_min_filter, gl_min_filter,
gl_mag_filter); gl_mag_filter);
item.mode = MODE_TEXTURE; item.mode = MODE_TEXTURE;

View File

@ -183,13 +183,10 @@ float gsk_outset_shadow_node_get_blur_radius (GskRenderNode
GDK_AVAILABLE_IN_3_90 GDK_AVAILABLE_IN_3_90
GskRenderNode * gsk_cairo_node_new (const graphene_rect_t *bounds); GskRenderNode * gsk_cairo_node_new (const graphene_rect_t *bounds);
GDK_AVAILABLE_IN_3_90 GDK_AVAILABLE_IN_3_90
GskRenderNode * gsk_cairo_node_new_for_surface (const graphene_rect_t *bounds,
cairo_surface_t *surface);
GDK_AVAILABLE_IN_3_90
cairo_t * gsk_cairo_node_get_draw_context (GskRenderNode *node, cairo_t * gsk_cairo_node_get_draw_context (GskRenderNode *node,
GskRenderer *renderer); GskRenderer *renderer);
GDK_AVAILABLE_IN_3_94 GDK_AVAILABLE_IN_3_94
cairo_surface_t * gsk_cairo_node_get_surface (GskRenderNode *node); const cairo_surface_t * gsk_cairo_node_peek_surface (GskRenderNode *node);
GDK_AVAILABLE_IN_3_90 GDK_AVAILABLE_IN_3_90
GskRenderNode * gsk_container_node_new (GskRenderNode **children, GskRenderNode * gsk_container_node_new (GskRenderNode **children,

View File

@ -1829,16 +1829,8 @@ static const GskRenderNodeClass GSK_CAIRO_NODE_CLASS = {
gsk_cairo_node_deserialize gsk_cairo_node_deserialize
}; };
/*< private > const cairo_surface_t *
* gsk_cairo_node_get_surface: gsk_cairo_node_peek_surface (GskRenderNode *node)
* @node: a #GskRenderNode
*
* Retrieves the surface set using gsk_render_node_set_surface().
*
* Returns: (transfer none) (nullable): a Cairo surface
*/
cairo_surface_t *
gsk_cairo_node_get_surface (GskRenderNode *node)
{ {
GskCairoNode *self = (GskCairoNode *) node; GskCairoNode *self = (GskCairoNode *) node;

View File

@ -48,6 +48,9 @@ GskRenderNode * gsk_render_node_deserialize_node (GskRenderNodeType typ
GVariant *variant, GVariant *variant,
GError **error); GError **error);
GskRenderNode * gsk_cairo_node_new_for_surface (const graphene_rect_t *bounds,
cairo_surface_t *surface);
G_END_DECLS G_END_DECLS
#endif /* __GSK_RENDER_NODE_PRIVATE_H__ */ #endif /* __GSK_RENDER_NODE_PRIVATE_H__ */

View File

@ -353,7 +353,7 @@ gsk_vulkan_render_pass_add_node (GskVulkanRenderPass *self,
return; return;
case GSK_CAIRO_NODE: case GSK_CAIRO_NODE:
if (gsk_cairo_node_get_surface (node) == NULL) if (gsk_cairo_node_peek_surface (node) == NULL)
return; return;
if (gsk_vulkan_clip_contains_rect (&constants->clip, &node->bounds)) if (gsk_vulkan_clip_contains_rect (&constants->clip, &node->bounds))
pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE; pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE;
@ -691,7 +691,7 @@ gsk_vulkan_render_pass_get_node_as_texture (GskVulkanRenderPass *self,
case GSK_CAIRO_NODE: case GSK_CAIRO_NODE:
if (graphene_rect_equal (bounds, &node->bounds)) if (graphene_rect_equal (bounds, &node->bounds))
{ {
surface = cairo_surface_reference (gsk_cairo_node_get_surface (node)); surface = cairo_surface_reference ((cairo_surface_t *)gsk_cairo_node_peek_surface (node));
goto got_surface; goto got_surface;
} }
break; break;
@ -910,7 +910,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self,
{ {
cairo_surface_t *surface; cairo_surface_t *surface;
surface = gsk_cairo_node_get_surface (op->render.node); surface = gsk_cairo_node_peek_surface (op->render.node);
op->render.source = gsk_vulkan_image_new_from_data (uploader, op->render.source = gsk_vulkan_image_new_from_data (uploader,
cairo_image_surface_get_data (surface), cairo_image_surface_get_data (surface),
cairo_image_surface_get_width (surface), cairo_image_surface_get_width (surface),

View File

@ -322,7 +322,7 @@ populate_render_node_properties (GtkListStore *store,
else else
{ {
text = "Surface"; text = "Surface";
surface = gsk_cairo_node_get_surface (node); surface = (cairo_surface_t *)gsk_cairo_node_peek_surface (node);
} }
show_inline = cairo_image_surface_get_height (surface) <= 40 && show_inline = cairo_image_surface_get_height (surface) <= 40 &&

View File

@ -430,10 +430,7 @@ cairo_node (guint n)
{ {
GskRenderNode **nodes = g_newa (GskRenderNode *, n); GskRenderNode **nodes = g_newa (GskRenderNode *, n);
GskRenderNode *container; GskRenderNode *container;
cairo_surface_t *surface;
graphene_rect_t bounds; graphene_rect_t bounds;
gint offset = 0, height, width, stride;
guchar *buf;
guint i; guint i;
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
@ -442,25 +439,7 @@ cairo_node (guint n)
bounds.origin.x = g_random_int_range (0, 1000 - bounds.size.width); bounds.origin.x = g_random_int_range (0, 1000 - bounds.size.width);
bounds.size.height = g_random_int_range (20, 100); bounds.size.height = g_random_int_range (20, 100);
bounds.origin.y = g_random_int_range (0, 1000 - bounds.size.height); bounds.origin.y = g_random_int_range (0, 1000 - bounds.size.height);
nodes [i] = gsk_cairo_node_new (&bounds);
height = g_random_int_range (1, 100);
width = g_random_int_range (1, 100);
stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, width + offset);
buf = g_malloc (stride * height);
if (i % 3 == 0)
surface = NULL;
else
surface = cairo_image_surface_create_for_data (buf, CAIRO_FORMAT_ARGB32, width, height, stride);
nodes[i] = gsk_cairo_node_new_for_surface (&bounds, surface);
/* Offset in stride helps to test when image is not 'tightly packed' condition */
offset = offset ? 0 : 3;
cairo_surface_destroy (surface);
g_free (buf);
} }
container = gsk_container_node_new (nodes, n); container = gsk_container_node_new (nodes, n);

View File

@ -255,17 +255,18 @@ static GskRenderNode *
ducky (void) ducky (void)
{ {
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf;
cairo_surface_t *surface;
GskRenderNode *node; GskRenderNode *node;
cairo_t *cr;
pixbuf = gdk_pixbuf_new_from_file_at_size ("ducky.png", 100, 100, NULL); pixbuf = gdk_pixbuf_new_from_file_at_size ("ducky.png", 100, 100, NULL);
surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, 1, NULL); node = gsk_cairo_node_new (&GRAPHENE_RECT_INIT (0, 0,
node = gsk_cairo_node_new_for_surface (&GRAPHENE_RECT_INIT (0, 0, gdk_pixbuf_get_width (pixbuf),
cairo_image_surface_get_width (surface), gdk_pixbuf_get_height (pixbuf)));
cairo_image_surface_get_height (surface)), cr = gsk_cairo_node_get_draw_context (node, NULL);
surface); gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_paint (cr);
cairo_destroy (cr);
g_object_unref (pixbuf); g_object_unref (pixbuf);
cairo_surface_destroy (surface);
return node; return node;
} }