[gtk+] fixed: Port to GskRenderNode
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] fixed: Port to GskRenderNode
- Date: Sat, 5 Nov 2016 02:36:40 +0000 (UTC)
commit 079f0427cbce1eaeab6fb45f9e9e6f843c174ba8
Author: Benjamin Otte <otte redhat com>
Date: Sat Nov 5 03:31:21 2016 +0100
fixed: Port to GskRenderNode
The fishbowl demo uses this.
gtk/gtkfixed.c | 34 +++++++++++++++++++++++-----------
1 files changed, 23 insertions(+), 11 deletions(-)
---
diff --git a/gtk/gtkfixed.c b/gtk/gtkfixed.c
index 2e57c66..c1c9062 100644
--- a/gtk/gtkfixed.c
+++ b/gtk/gtkfixed.c
@@ -70,8 +70,9 @@
#include "gtkfixed.h"
-#include "gtkprivate.h"
#include "gtkintl.h"
+#include "gtkprivate.h"
+#include "gtkwidgetprivate.h"
struct _GtkFixedPrivate
@@ -97,8 +98,8 @@ static void gtk_fixed_measure (GtkWidget *widget,
static void gtk_fixed_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
-static gboolean gtk_fixed_draw (GtkWidget *widget,
- cairo_t *cr);
+static GskRenderNode *gtk_fixed_get_render_node (GtkWidget *widget,
+ GskRenderer *renderer);
static void gtk_fixed_add (GtkContainer *container,
GtkWidget *widget);
static void gtk_fixed_remove (GtkContainer *container,
@@ -134,7 +135,7 @@ gtk_fixed_class_init (GtkFixedClass *class)
widget_class->realize = gtk_fixed_realize;
widget_class->measure = gtk_fixed_measure;
widget_class->size_allocate = gtk_fixed_size_allocate;
- widget_class->draw = gtk_fixed_draw;
+ widget_class->get_render_node = gtk_fixed_get_render_node;
container_class->add = gtk_fixed_add;
container_class->remove = gtk_fixed_remove;
@@ -515,14 +516,19 @@ gtk_fixed_forall (GtkContainer *container,
}
}
-static gboolean
-gtk_fixed_draw (GtkWidget *widget,
- cairo_t *cr)
+static GskRenderNode *
+gtk_fixed_get_render_node (GtkWidget *widget,
+ GskRenderer *renderer)
{
GtkFixed *fixed = GTK_FIXED (widget);
GtkFixedPrivate *priv = fixed->priv;
GtkFixedChild *child;
+ GskRenderNode *node, *child_node;
+ graphene_matrix_t m;
+ graphene_point3d_t p;
GList *list;
+
+ node = gtk_widget_create_render_node (widget, renderer, G_OBJECT_TYPE_NAME (widget));
for (list = priv->children;
list;
@@ -530,11 +536,17 @@ gtk_fixed_draw (GtkWidget *widget,
{
child = list->data;
- gtk_container_propagate_draw (GTK_CONTAINER (fixed),
- child->widget,
- cr);
+ child_node = gtk_widget_get_render_node (child->widget, renderer);
+ if (child_node == NULL)
+ continue;
+
+ graphene_matrix_init_translate (&m, graphene_point3d_init (&p, child->x, child->y, 0));
+ gsk_render_node_set_transform (child_node, &m);
+
+ gsk_render_node_append_child (node, child_node);
+ gsk_render_node_unref (child_node);
}
- return FALSE;
+ return node;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]