diff options
author | Benjamin Otte <otte@redhat.com> | 2018-02-14 02:30:42 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2018-02-17 08:04:43 +0100 |
commit | 95ddb5756266b4aaf17c540851ab5ac4f67a5ad2 (patch) | |
tree | 3011beb194dced5fc955ab69f78e9c77070790fa | |
parent | 1b8a768279e1cf093b16c6c71965aa5cb1c80682 (diff) | |
download | gtk+-95ddb5756266b4aaf17c540851ab5ac4f67a5ad2.tar.gz |
cssimage: Get rid of draw vfunc
All remaining users of that vfunc now implement snapshot using cairo
render nodes (win32 and radial).
Also, GtkCssImageClass.snapshot is now NULL, so if a subclass doesn't
implement it, it will now crash.
Previously it would try to call the draw vfunc.
-rw-r--r-- | gtk/gtkcssimage.c | 58 | ||||
-rw-r--r-- | gtk/gtkcssimagebuiltin.c | 10 | ||||
-rw-r--r-- | gtk/gtkcssimageprivate.h | 4 | ||||
-rw-r--r-- | gtk/gtkcssimageradial.c | 17 | ||||
-rw-r--r-- | gtk/gtkcssimagewin32.c | 17 |
5 files changed, 43 insertions, 63 deletions
diff --git a/gtk/gtkcssimage.c b/gtk/gtkcssimage.c index 7ce0f0a7e2..665ef93c47 100644 --- a/gtk/gtkcssimage.c +++ b/gtk/gtkcssimage.c @@ -97,45 +97,6 @@ gtk_css_image_real_transition (GtkCssImage *start, } static void -gtk_css_image_real_draw (GtkCssImage *image, - cairo_t *cr, - double width, - double height) -{ - GtkSnapshot snapshot; - GskRenderNode *node; - cairo_region_t *clip; - - clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) { 0, 0, width, height }); - gtk_snapshot_init (&snapshot, NULL, FALSE, clip, "Fallback<%s>", G_OBJECT_TYPE_NAME (image)); - gtk_css_image_snapshot (image, &snapshot, width, height); - node = gtk_snapshot_finish (&snapshot); - - if (node != NULL) - { - gsk_render_node_draw (node, cr); - gsk_render_node_unref (node); - } - - cairo_region_destroy (clip); -} - -static void -gtk_css_image_real_snapshot (GtkCssImage *image, - GtkSnapshot *snapshot, - double width, - double height) -{ - cairo_t *cr; - - cr = gtk_snapshot_append_cairo (snapshot, - &GRAPHENE_RECT_INIT (0, 0, width, height), - "Fallback<%s>", G_OBJECT_TYPE_NAME (image)); - _gtk_css_image_draw (image, cr, width, height); - cairo_destroy (cr); -} - -static void _gtk_css_image_class_init (GtkCssImageClass *klass) { klass->get_width = gtk_css_image_real_get_width; @@ -144,8 +105,6 @@ _gtk_css_image_class_init (GtkCssImageClass *klass) klass->compute = gtk_css_image_real_compute; klass->equal = gtk_css_image_real_equal; klass->transition = gtk_css_image_real_transition; - klass->draw = gtk_css_image_real_draw; - klass->snapshot = gtk_css_image_real_snapshot; } static void @@ -260,7 +219,9 @@ _gtk_css_image_draw (GtkCssImage *image, double width, double height) { - GtkCssImageClass *klass; + GtkSnapshot snapshot; + GskRenderNode *node; + cairo_region_t *clip; g_return_if_fail (GTK_IS_CSS_IMAGE (image)); g_return_if_fail (cr != NULL); @@ -269,9 +230,18 @@ _gtk_css_image_draw (GtkCssImage *image, cairo_save (cr); - klass = GTK_CSS_IMAGE_GET_CLASS (image); + clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) { 0, 0, width, height }); + gtk_snapshot_init (&snapshot, NULL, FALSE, clip, "Fallback<%s>", G_OBJECT_TYPE_NAME (image)); + gtk_css_image_snapshot (image, &snapshot, width, height); + node = gtk_snapshot_finish (&snapshot); + + if (node != NULL) + { + gsk_render_node_draw (node, cr); + gsk_render_node_unref (node); + } - klass->draw (image, cr, width, height); + cairo_region_destroy (clip); cairo_restore (cr); } diff --git a/gtk/gtkcssimagebuiltin.c b/gtk/gtkcssimagebuiltin.c index fe15fb183f..aedc2e8ff5 100644 --- a/gtk/gtkcssimagebuiltin.c +++ b/gtk/gtkcssimagebuiltin.c @@ -444,10 +444,10 @@ gtk_css_image_builtin_draw_spinner (GtkCssImage *image, } static void -gtk_css_image_builtin_real_draw (GtkCssImage *image, - cairo_t *cr, - double width, - double height) +gtk_css_image_builtin_real_snapshot (GtkCssImage *image, + GtkSnapshot *snapshot, + double width, + double height) { /* It's a builtin image, other code will draw things */ } @@ -516,7 +516,7 @@ gtk_css_image_builtin_class_init (GtkCssImageBuiltinClass *klass) GtkCssImageClass *image_class = GTK_CSS_IMAGE_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass); - image_class->draw = gtk_css_image_builtin_real_draw; + image_class->snapshot = gtk_css_image_builtin_real_snapshot; image_class->parse = gtk_css_image_builtin_parse; image_class->print = gtk_css_image_builtin_print; image_class->compute = gtk_css_image_builtin_compute; diff --git a/gtk/gtkcssimageprivate.h b/gtk/gtkcssimageprivate.h index 9fc962df28..e4b06e2e75 100644 --- a/gtk/gtkcssimageprivate.h +++ b/gtk/gtkcssimageprivate.h @@ -71,10 +71,6 @@ struct _GtkCssImageClass double progress); /* draw to 0,0 with the given width and height */ - void (* draw) (GtkCssImage *image, - cairo_t *cr, - double width, - double height); void (* snapshot) (GtkCssImage *image, GtkSnapshot *snapshot, double width, diff --git a/gtk/gtkcssimageradial.c b/gtk/gtkcssimageradial.c index 0afd43040f..88a0357022 100644 --- a/gtk/gtkcssimageradial.c +++ b/gtk/gtkcssimageradial.c @@ -74,10 +74,10 @@ gtk_css_image_radial_get_start_end (GtkCssImageRadial *radial, } static void -gtk_css_image_radial_draw (GtkCssImage *image, - cairo_t *cr, - double width, - double height) +gtk_css_image_radial_snapshot (GtkCssImage *image, + GtkSnapshot *snapshot, + double width, + double height) { GtkCssImageRadial *radial = GTK_CSS_IMAGE_RADIAL (image); cairo_pattern_t *pattern; @@ -88,6 +88,11 @@ gtk_css_image_radial_draw (GtkCssImage *image, double r1, r2, r3, r4, r; double offset; int i, last; + cairo_t *cr; + + cr = gtk_snapshot_append_cairo (snapshot, + &GRAPHENE_RECT_INIT (0, 0, width, height), + "Fallback<%s>", G_OBJECT_TYPE_NAME (image)); x = _gtk_css_position_value_get_x (radial->position, width); y = _gtk_css_position_value_get_y (radial->position, height); @@ -225,6 +230,8 @@ gtk_css_image_radial_draw (GtkCssImage *image, cairo_fill (cr); cairo_pattern_destroy (pattern); + + cairo_destroy (cr); } static gboolean @@ -667,7 +674,7 @@ _gtk_css_image_radial_class_init (GtkCssImageRadialClass *klass) GtkCssImageClass *image_class = GTK_CSS_IMAGE_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass); - image_class->draw = gtk_css_image_radial_draw; + image_class->snapshot = gtk_css_image_radial_snapshot; image_class->parse = gtk_css_image_radial_parse; image_class->print = gtk_css_image_radial_print; image_class->compute = gtk_css_image_radial_compute; diff --git a/gtk/gtkcssimagewin32.c b/gtk/gtkcssimagewin32.c index d03fababcd..29eb13e650 100644 --- a/gtk/gtkcssimagewin32.c +++ b/gtk/gtkcssimagewin32.c @@ -26,14 +26,19 @@ G_DEFINE_TYPE (GtkCssImageWin32, _gtk_css_image_win32, GTK_TYPE_CSS_IMAGE) static void -gtk_css_image_win32_draw (GtkCssImage *image, - cairo_t *cr, - double width, - double height) +gtk_css_image_win32_snapshot (GtkCssImage *image, + GtkSnapshot *snapshot, + double width, + double height) { GtkCssImageWin32 *wimage = GTK_CSS_IMAGE_WIN32 (image); cairo_surface_t *surface; int dx, dy; + cairo_t *cr; + + cr = gtk_snapshot_append_cairo (snapshot, + &GRAPHENE_RECT_INIT (0, 0, width, height), + "Fallback<%s>", G_OBJECT_TYPE_NAME (image)); surface = gtk_win32_theme_create_surface (wimage->theme, wimage->part, wimage->state, wimage->margins, width, height, &dx, &dy); @@ -63,6 +68,8 @@ gtk_css_image_win32_draw (GtkCssImage *image, cairo_fill (cr); cairo_surface_destroy (surface); + + cairo_destroy (cr); } static gboolean @@ -242,7 +249,7 @@ _gtk_css_image_win32_class_init (GtkCssImageWin32Class *klass) object_class->finalize = gtk_css_image_win32_finalize; - image_class->draw = gtk_css_image_win32_draw; + image_class->snapshot = gtk_css_image_win32_snapshot; image_class->parse = gtk_css_image_win32_parse; image_class->print = gtk_css_image_win32_print; } |