[gtk+/wip/ebassi/render-solid-colors: 1/3] gsk: Store a solid color inside GskRenderNode
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/ebassi/render-solid-colors: 1/3] gsk: Store a solid color inside GskRenderNode
- Date: Thu, 17 Nov 2016 17:43:53 +0000 (UTC)
commit 54fe34f94a02ec01f1d82485ff7a897c1ff3712d
Author: Emmanuele Bassi <ebassi gnome org>
Date: Wed Nov 16 16:17:40 2016 +0000
gsk: Store a solid color inside GskRenderNode
Some nodes render a solid color, and can be optimized depending on the
rendering operation.
gsk/gskrendernode.c | 35 +++++++++++++++++++++++++++++++++++
gsk/gskrendernode.h | 4 ++++
gsk/gskrendernodeprivate.h | 7 +++++++
3 files changed, 46 insertions(+), 0 deletions(-)
---
diff --git a/gsk/gskrendernode.c b/gsk/gskrendernode.c
index be64fba..5b1fa7b 100644
--- a/gsk/gskrendernode.c
+++ b/gsk/gskrendernode.c
@@ -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
diff --git a/gsk/gskrendernode.h b/gsk/gskrendernode.h
index c6f5086..a7cf437 100644
--- a/gsk/gskrendernode.h
+++ b/gsk/gskrendernode.h
@@ -126,6 +126,10 @@ void gsk_render_node_set_scaling_filter (GskRenderNode *
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);
GDK_AVAILABLE_IN_3_90
diff --git a/gsk/gskrendernodeprivate.h b/gsk/gskrendernodeprivate.h
index 3447822..594497d 100644
--- a/gsk/gskrendernodeprivate.h
+++ b/gsk/gskrendernodeprivate.h
@@ -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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]