gsk: Store a solid color inside GskRenderNode
Some nodes render a solid color, and can be optimized depending on the rendering operation.
This commit is contained in:
@@ -1228,6 +1228,14 @@ gsk_render_node_has_texture (GskRenderNode *node)
|
||||
return node->texture != NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gsk_render_node_has_solid_color (GskRenderNode *node)
|
||||
{
|
||||
g_return_val_if_fail (GSK_IS_RENDER_NODE (node), FALSE);
|
||||
|
||||
return node->solid_color_set;
|
||||
}
|
||||
|
||||
GskTexture *
|
||||
gsk_render_node_get_texture (GskRenderNode *node)
|
||||
{
|
||||
@@ -1236,6 +1244,15 @@ gsk_render_node_get_texture (GskRenderNode *node)
|
||||
return node->texture;
|
||||
}
|
||||
|
||||
void
|
||||
gsk_render_node_get_solid_color (GskRenderNode *node,
|
||||
GdkRGBA *color)
|
||||
{
|
||||
g_return_if_fail (GSK_IS_RENDER_NODE (node));
|
||||
|
||||
*color = node->solid_color;
|
||||
}
|
||||
|
||||
/**
|
||||
* gsk_render_node_set_texture:
|
||||
* @node: a #GskRenderNode
|
||||
@@ -1263,6 +1280,24 @@ gsk_render_node_set_texture (GskRenderNode *node,
|
||||
gsk_texture_ref (texture);
|
||||
}
|
||||
|
||||
void
|
||||
gsk_render_node_set_solid_color (GskRenderNode *node,
|
||||
const GdkRGBA *color)
|
||||
{
|
||||
g_return_if_fail (GSK_IS_RENDER_NODE (node));
|
||||
|
||||
if (color != NULL)
|
||||
{
|
||||
if (gdk_rgba_equal (color, &node->solid_color))
|
||||
return;
|
||||
|
||||
node->solid_color = *color;
|
||||
node->solid_color_set = TRUE;
|
||||
}
|
||||
else
|
||||
node->solid_color_set = FALSE;
|
||||
}
|
||||
|
||||
/*< private >
|
||||
* gsk_render_node_get_surface:
|
||||
* @node: a #GskRenderNode
|
||||
|
||||
@@ -125,6 +125,10 @@ void gsk_render_node_set_scaling_filter (GskRenderNode *
|
||||
GskScalingFilter min_filter,
|
||||
GskScalingFilter mag_filter);
|
||||
|
||||
GDK_AVAILABLE_IN_3_90
|
||||
void gsk_render_node_set_solid_color (GskRenderNode *node,
|
||||
const GdkRGBA *color);
|
||||
|
||||
GDK_AVAILABLE_IN_3_90
|
||||
void gsk_render_node_set_name (GskRenderNode *node,
|
||||
const char *name);
|
||||
|
||||
@@ -37,6 +37,8 @@ struct _GskRenderNode
|
||||
/* The contents of the node as a texture */
|
||||
GskTexture *texture;
|
||||
|
||||
GdkRGBA solid_color;
|
||||
|
||||
/* Paint opacity */
|
||||
double opacity;
|
||||
|
||||
@@ -63,6 +65,7 @@ struct _GskRenderNode
|
||||
gboolean hidden : 1;
|
||||
gboolean opaque : 1;
|
||||
gboolean transform_set : 1;
|
||||
gboolean solid_color_set : 1;
|
||||
gboolean needs_world_matrix_update : 1;
|
||||
};
|
||||
|
||||
@@ -87,8 +90,12 @@ cairo_surface_t *gsk_render_node_get_surface (GskRenderNode *node);
|
||||
|
||||
GskTexture *gsk_render_node_get_texture (GskRenderNode *node);
|
||||
|
||||
void gsk_render_node_get_solid_color (GskRenderNode *node,
|
||||
GdkRGBA *color);
|
||||
|
||||
gboolean gsk_render_node_has_surface (GskRenderNode *node);
|
||||
gboolean gsk_render_node_has_texture (GskRenderNode *node);
|
||||
gboolean gsk_render_node_has_solid_color (GskRenderNode *node);
|
||||
|
||||
GskBlendMode gsk_render_node_get_blend_mode (GskRenderNode *node);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user