forked from AuroraMiddleware/gtk
Convert GtkAccelLabel to indirect rendering
This commit is contained in:
parent
be0de54237
commit
bed5e6fb16
@ -139,8 +139,8 @@ static void gtk_accel_label_get_property (GObject *object,
|
|||||||
GParamSpec *pspec);
|
GParamSpec *pspec);
|
||||||
static void gtk_accel_label_destroy (GtkWidget *widget);
|
static void gtk_accel_label_destroy (GtkWidget *widget);
|
||||||
static void gtk_accel_label_finalize (GObject *object);
|
static void gtk_accel_label_finalize (GObject *object);
|
||||||
static gboolean gtk_accel_label_draw (GtkWidget *widget,
|
static GskRenderNode *gtk_accel_label_get_render_node (GtkWidget *widget,
|
||||||
cairo_t *cr);
|
GskRenderer *renderer);
|
||||||
static const gchar *gtk_accel_label_get_string (GtkAccelLabel *accel_label);
|
static const gchar *gtk_accel_label_get_string (GtkAccelLabel *accel_label);
|
||||||
|
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ gtk_accel_label_class_init (GtkAccelLabelClass *class)
|
|||||||
gobject_class->set_property = gtk_accel_label_set_property;
|
gobject_class->set_property = gtk_accel_label_set_property;
|
||||||
gobject_class->get_property = gtk_accel_label_get_property;
|
gobject_class->get_property = gtk_accel_label_get_property;
|
||||||
|
|
||||||
widget_class->draw = gtk_accel_label_draw;
|
widget_class->get_render_node = gtk_accel_label_get_render_node;
|
||||||
widget_class->get_preferred_width = gtk_accel_label_get_preferred_width;
|
widget_class->get_preferred_width = gtk_accel_label_get_preferred_width;
|
||||||
widget_class->destroy = gtk_accel_label_destroy;
|
widget_class->destroy = gtk_accel_label_destroy;
|
||||||
|
|
||||||
@ -443,16 +443,17 @@ get_first_baseline (PangoLayout *layout)
|
|||||||
return PANGO_PIXELS (result);
|
return PANGO_PIXELS (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static GskRenderNode *
|
||||||
gtk_accel_label_draw (GtkWidget *widget,
|
gtk_accel_label_get_render_node (GtkWidget *widget,
|
||||||
cairo_t *cr)
|
GskRenderer *renderer)
|
||||||
{
|
{
|
||||||
GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (widget);
|
GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (widget);
|
||||||
guint ac_width;
|
guint ac_width;
|
||||||
GtkAllocation allocation;
|
GtkAllocation allocation;
|
||||||
GtkRequisition requisition;
|
GtkRequisition requisition;
|
||||||
|
GskRenderNode *res;
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (gtk_accel_label_parent_class)->draw (widget, cr);
|
res = GTK_WIDGET_CLASS (gtk_accel_label_parent_class)->get_render_node (widget, renderer);
|
||||||
|
|
||||||
ac_width = gtk_accel_label_get_accel_width (accel_label);
|
ac_width = gtk_accel_label_get_accel_width (accel_label);
|
||||||
gtk_widget_get_allocation (widget, &allocation);
|
gtk_widget_get_allocation (widget, &allocation);
|
||||||
@ -465,6 +466,17 @@ gtk_accel_label_draw (GtkWidget *widget,
|
|||||||
PangoLayout *accel_layout;
|
PangoLayout *accel_layout;
|
||||||
gint x;
|
gint x;
|
||||||
gint y;
|
gint y;
|
||||||
|
GtkAllocation alloc, clip;
|
||||||
|
GskRenderNode *node;
|
||||||
|
cairo_t *cr;
|
||||||
|
|
||||||
|
node = gtk_widget_create_render_node (widget, renderer, "AccelLabel Content");
|
||||||
|
|
||||||
|
gtk_widget_get_clip (widget, &clip);
|
||||||
|
_gtk_widget_get_allocation (widget, &alloc);
|
||||||
|
|
||||||
|
cr = gsk_render_node_get_draw_context (node);
|
||||||
|
cairo_translate (cr, alloc.x - clip.x, alloc.y - clip.y);
|
||||||
|
|
||||||
context = gtk_widget_get_style_context (widget);
|
context = gtk_widget_get_style_context (widget);
|
||||||
|
|
||||||
@ -485,9 +497,14 @@ gtk_accel_label_draw (GtkWidget *widget,
|
|||||||
gtk_style_context_restore (context);
|
gtk_style_context_restore (context);
|
||||||
|
|
||||||
g_object_unref (accel_layout);
|
g_object_unref (accel_layout);
|
||||||
|
|
||||||
|
cairo_destroy (cr);
|
||||||
|
|
||||||
|
gsk_render_node_append_child (res, node);
|
||||||
|
gsk_render_node_unref (node);
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user