From: Benjamin Otte Date: Wed, 14 Mar 2018 00:56:30 +0000 (+0100) Subject: iconhelper: Turn into a GObject X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~941 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2016f561766a490791d57d7ee4aebd37e8ccb512;p=gtk4.git iconhelper: Turn into a GObject --- diff --git a/gtk/gtkcellrendererpixbuf.c b/gtk/gtkcellrendererpixbuf.c index 731ebc51c5..a217634f94 100644 --- a/gtk/gtkcellrendererpixbuf.c +++ b/gtk/gtkcellrendererpixbuf.c @@ -417,18 +417,20 @@ gtk_cell_renderer_pixbuf_new (void) return g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF, NULL); } -static void -create_icon_helper (GtkIconHelper *icon_helper, +static GtkIconHelper * +create_icon_helper ( GtkCellRendererPixbuf *cellpixbuf, GtkWidget *widget) { GtkCellRendererPixbufPrivate *priv = cellpixbuf->priv; + GtkIconHelper *icon_helper; - gtk_icon_helper_init (icon_helper, - gtk_style_context_get_node (gtk_widget_get_style_context (widget)), - widget); + icon_helper = gtk_icon_helper_new (gtk_style_context_get_node (gtk_widget_get_style_context (widget)), + widget); _gtk_icon_helper_set_force_scale_pixbuf (icon_helper, TRUE); _gtk_icon_helper_set_definition (icon_helper, priv->image_def); + + return icon_helper; } static void @@ -448,19 +450,19 @@ gtk_cell_renderer_pixbuf_get_size (GtkCellRenderer *cell, gint calc_height; gint xpad, ypad; GtkStyleContext *context; - GtkIconHelper icon_helper; + GtkIconHelper *icon_helper; context = gtk_widget_get_style_context (widget); gtk_style_context_save (context); gtk_style_context_add_class (context, GTK_STYLE_CLASS_IMAGE); gtk_icon_size_set_style_classes (gtk_style_context_get_node (context), priv->icon_size); - create_icon_helper (&icon_helper, cellpixbuf, widget); + icon_helper = create_icon_helper (cellpixbuf, widget); - if (!_gtk_icon_helper_get_is_empty (&icon_helper)) - _gtk_icon_helper_get_size (&icon_helper, + if (!_gtk_icon_helper_get_is_empty (icon_helper)) + _gtk_icon_helper_get_size (icon_helper, &pixbuf_width, &pixbuf_height); - gtk_icon_helper_destroy (&icon_helper); + g_object_unref (icon_helper); gtk_style_context_restore (context); if (priv->pixbuf_expander_open) @@ -526,7 +528,7 @@ gtk_cell_renderer_pixbuf_snapshot (GtkCellRenderer *cell, GdkRectangle draw_rect; gboolean is_expander; gint xpad, ypad; - GtkIconHelper icon_helper; + GtkIconHelper *icon_helper; cairo_surface_t *surface; gtk_cell_renderer_pixbuf_get_size (cell, widget, (GdkRectangle *) cell_area, @@ -559,32 +561,32 @@ gtk_cell_renderer_pixbuf_snapshot (GtkCellRenderer *cell, if (is_expanded && priv->pixbuf_expander_open != NULL) { - gtk_icon_helper_init (&icon_helper, gtk_style_context_get_node (context), widget); + icon_helper = gtk_icon_helper_new (gtk_style_context_get_node (context), widget); surface = gdk_cairo_surface_create_from_pixbuf (priv->pixbuf_expander_open, 1, NULL); - _gtk_icon_helper_set_surface (&icon_helper, surface); + _gtk_icon_helper_set_surface (icon_helper, surface); cairo_surface_destroy (surface); } else if (!is_expanded && priv->pixbuf_expander_closed != NULL) { - gtk_icon_helper_init (&icon_helper, gtk_style_context_get_node (context), widget); + icon_helper = gtk_icon_helper_new (gtk_style_context_get_node (context), widget); surface = gdk_cairo_surface_create_from_pixbuf (priv->pixbuf_expander_closed, 1, NULL); - _gtk_icon_helper_set_surface (&icon_helper, surface); + _gtk_icon_helper_set_surface (icon_helper, surface); cairo_surface_destroy (surface); } else { - create_icon_helper (&icon_helper, cellpixbuf, widget); + icon_helper = create_icon_helper (cellpixbuf, widget); } } else { - create_icon_helper (&icon_helper, cellpixbuf, widget); + icon_helper = create_icon_helper (cellpixbuf, widget); } gtk_snapshot_offset (snapshot, pix_rect.x, pix_rect.y); - gtk_icon_helper_snapshot (&icon_helper, snapshot, pix_rect.width, pix_rect.height); + gtk_icon_helper_snapshot (icon_helper, snapshot, pix_rect.width, pix_rect.height); gtk_snapshot_offset (snapshot, - pix_rect.x, - pix_rect.y); - gtk_icon_helper_destroy (&icon_helper); + g_object_unref (icon_helper); gtk_style_context_restore (context); } diff --git a/gtk/gtkiconhelper.c b/gtk/gtkiconhelper.c index bb9a62e7e5..54a8212d30 100644 --- a/gtk/gtkiconhelper.c +++ b/gtk/gtkiconhelper.c @@ -35,6 +35,26 @@ #include "gtksnapshot.h" #include "gtkwidgetprivate.h" +struct _GtkIconHelper +{ + GObject parent_instance; + + GtkImageDefinition *def; + + gint pixel_size; + + guint use_fallback : 1; + guint force_scale_pixbuf : 1; + guint texture_is_symbolic : 1; + + GtkWidget *owner; + GtkCssNode *node; + GdkPaintable *paintable; + int texture_scale; +}; + +G_DEFINE_TYPE (GtkIconHelper, gtk_icon_helper, G_TYPE_OBJECT) + void gtk_icon_helper_invalidate (GtkIconHelper *self) { @@ -98,21 +118,39 @@ _gtk_icon_helper_clear (GtkIconHelper *self) } } -void -gtk_icon_helper_destroy (GtkIconHelper *self) +static void +gtk_icon_helper_finalize (GObject *object) { + GtkIconHelper *self = GTK_ICON_HELPER (object); + _gtk_icon_helper_clear (self); g_signal_handlers_disconnect_by_func (self->owner, G_CALLBACK (gtk_icon_helper_invalidate), self); gtk_image_definition_unref (self->def); + + G_OBJECT_CLASS (gtk_icon_helper_parent_class)->finalize (object); +} + +void +gtk_icon_helper_class_init (GtkIconHelperClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->finalize = gtk_icon_helper_finalize; } void -gtk_icon_helper_init (GtkIconHelper *self, - GtkCssNode *css_node, - GtkWidget *owner) +gtk_icon_helper_init (GtkIconHelper *self) { - memset (self, 0, sizeof (GtkIconHelper)); self->def = gtk_image_definition_new_empty (); +} + +GtkIconHelper * +gtk_icon_helper_new (GtkCssNode *css_node, + GtkWidget *owner) +{ + GtkIconHelper *self; + + self = g_object_new (GTK_TYPE_ICON_HELPER, NULL); self->pixel_size = -1; self->texture_is_symbolic = FALSE; @@ -121,6 +159,8 @@ gtk_icon_helper_init (GtkIconHelper *self, self->owner = owner; g_signal_connect_swapped (owner, "direction-changed", G_CALLBACK (gtk_icon_helper_invalidate), self); g_signal_connect_swapped (owner, "notify::scale-factor", G_CALLBACK (gtk_icon_helper_invalidate), self); + + return self; } static int diff --git a/gtk/gtkiconhelperprivate.h b/gtk/gtkiconhelperprivate.h index ce260b3f68..9b8357cf39 100644 --- a/gtk/gtkiconhelperprivate.h +++ b/gtk/gtkiconhelperprivate.h @@ -28,31 +28,12 @@ G_BEGIN_DECLS -typedef struct _GtkIconHelper GtkIconHelper; +#define GTK_TYPE_ICON_HELPER (gtk_icon_helper_get_type()) -struct _GtkIconHelper -{ - GObject parent_instance; +G_DECLARE_FINAL_TYPE(GtkIconHelper, gtk_icon_helper, GTK, ICON_HELPER, GObject) - GtkImageDefinition *def; - - gint pixel_size; - - guint use_fallback : 1; - guint force_scale_pixbuf : 1; - guint texture_is_symbolic : 1; - - GtkWidget *owner; - GtkCssNode *node; - GdkPaintable *paintable; - int texture_scale; -}; - -void gtk_icon_helper_init (GtkIconHelper *self, - GtkCssNode *css_node, - GtkWidget *owner); - -void gtk_icon_helper_destroy (GtkIconHelper *self); +GtkIconHelper *gtk_icon_helper_new (GtkCssNode *css_node, + GtkWidget *owner); void _gtk_icon_helper_clear (GtkIconHelper *self); diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index 970ab758ae..3013a93a29 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -78,7 +78,7 @@ struct _GtkImagePrivate { - GtkIconHelper icon_helper; + GtkIconHelper *icon_helper; GtkIconSize icon_size; float baseline_align; @@ -283,7 +283,7 @@ gtk_image_init (GtkImage *image) widget_node = gtk_widget_get_css_node (GTK_WIDGET (image)); gtk_widget_set_has_window (GTK_WIDGET (image), FALSE); - gtk_icon_helper_init (&priv->icon_helper, widget_node, GTK_WIDGET (image)); + priv->icon_helper = gtk_icon_helper_new (widget_node, GTK_WIDGET (image)); } static void @@ -294,7 +294,7 @@ gtk_image_finalize (GObject *object) gtk_image_clear (image); - gtk_icon_helper_destroy (&priv->icon_helper); + g_clear_object (&priv->icon_helper); g_free (priv->filename); g_free (priv->resource_path); @@ -342,7 +342,7 @@ gtk_image_set_property (GObject *object, break; case PROP_USE_FALLBACK: - if (_gtk_icon_helper_set_use_fallback (&priv->icon_helper, g_value_get_boolean (value))) + if (_gtk_icon_helper_set_use_fallback (priv->icon_helper, g_value_get_boolean (value))) g_object_notify_by_pspec (object, pspec); break; @@ -364,13 +364,13 @@ gtk_image_get_property (GObject *object, switch (prop_id) { case PROP_SURFACE: - g_value_set_boxed (value, _gtk_icon_helper_peek_surface (&priv->icon_helper)); + g_value_set_boxed (value, _gtk_icon_helper_peek_surface (priv->icon_helper)); break; case PROP_PAINTABLE: - g_value_set_object (value, _gtk_icon_helper_peek_paintable (&priv->icon_helper)); + g_value_set_object (value, _gtk_icon_helper_peek_paintable (priv->icon_helper)); break; case PROP_TEXTURE: - g_value_set_object (value, _gtk_icon_helper_peek_texture (&priv->icon_helper)); + g_value_set_object (value, _gtk_icon_helper_peek_texture (priv->icon_helper)); break; case PROP_FILE: g_value_set_string (value, priv->filename); @@ -379,22 +379,22 @@ gtk_image_get_property (GObject *object, g_value_set_enum (value, priv->icon_size); break; case PROP_PIXEL_SIZE: - g_value_set_int (value, _gtk_icon_helper_get_pixel_size (&priv->icon_helper)); + g_value_set_int (value, _gtk_icon_helper_get_pixel_size (priv->icon_helper)); break; case PROP_ICON_NAME: - g_value_set_string (value, _gtk_icon_helper_get_icon_name (&priv->icon_helper)); + g_value_set_string (value, _gtk_icon_helper_get_icon_name (priv->icon_helper)); break; case PROP_GICON: - g_value_set_object (value, _gtk_icon_helper_peek_gicon (&priv->icon_helper)); + g_value_set_object (value, _gtk_icon_helper_peek_gicon (priv->icon_helper)); break; case PROP_RESOURCE: g_value_set_string (value, priv->resource_path); break; case PROP_USE_FALLBACK: - g_value_set_boolean (value, _gtk_icon_helper_get_use_fallback (&priv->icon_helper)); + g_value_set_boolean (value, _gtk_icon_helper_get_use_fallback (priv->icon_helper)); break; case PROP_STORAGE_TYPE: - g_value_set_enum (value, _gtk_icon_helper_get_storage_type (&priv->icon_helper)); + g_value_set_enum (value, _gtk_icon_helper_get_storage_type (priv->icon_helper)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -910,7 +910,7 @@ gtk_image_set_from_icon_name (GtkImage *image, gtk_image_clear (image); if (icon_name) - _gtk_icon_helper_set_icon_name (&priv->icon_helper, icon_name); + _gtk_icon_helper_set_icon_name (priv->icon_helper, icon_name); g_object_notify_by_pspec (G_OBJECT (image), image_props[PROP_ICON_NAME]); @@ -945,7 +945,7 @@ gtk_image_set_from_gicon (GtkImage *image, if (icon) { - _gtk_icon_helper_set_gicon (&priv->icon_helper, icon); + _gtk_icon_helper_set_gicon (priv->icon_helper, icon); g_object_unref (icon); } @@ -978,7 +978,7 @@ gtk_image_set_from_surface (GtkImage *image, if (surface) { - _gtk_icon_helper_set_surface (&priv->icon_helper, surface); + _gtk_icon_helper_set_surface (priv->icon_helper, surface); cairo_surface_destroy (surface); } @@ -1000,7 +1000,7 @@ gtk_image_paintable_invalidate_size (GdkPaintable *paintable, { GtkImagePrivate *priv = gtk_image_get_instance_private (image); - gtk_icon_helper_invalidate (&priv->icon_helper); + gtk_icon_helper_invalidate (priv->icon_helper); } /** @@ -1028,7 +1028,7 @@ gtk_image_set_from_paintable (GtkImage *image, if (paintable) { - _gtk_icon_helper_set_paintable (&priv->icon_helper, paintable); + _gtk_icon_helper_set_paintable (priv->icon_helper, paintable); g_signal_connect (paintable, "invalidate-contents", G_CALLBACK (gtk_image_paintable_invalidate_contents), @@ -1070,7 +1070,7 @@ gtk_image_set_from_texture (GtkImage *image, if (texture) { - _gtk_icon_helper_set_texture (&priv->icon_helper, texture); + _gtk_icon_helper_set_texture (priv->icon_helper, texture); g_object_unref (texture); } @@ -1096,7 +1096,7 @@ gtk_image_get_storage_type (GtkImage *image) g_return_val_if_fail (GTK_IS_IMAGE (image), GTK_IMAGE_EMPTY); - return _gtk_icon_helper_get_storage_type (&priv->icon_helper); + return _gtk_icon_helper_get_storage_type (priv->icon_helper); } /** @@ -1119,7 +1119,7 @@ gtk_image_get_surface (GtkImage *image) g_return_val_if_fail (GTK_IS_IMAGE (image), NULL); - return _gtk_icon_helper_peek_surface (&priv->icon_helper); + return _gtk_icon_helper_peek_surface (priv->icon_helper); } /** @@ -1142,7 +1142,7 @@ gtk_image_get_paintable (GtkImage *image) g_return_val_if_fail (GTK_IS_IMAGE (image), NULL); - return _gtk_icon_helper_peek_paintable (&priv->icon_helper); + return _gtk_icon_helper_peek_paintable (priv->icon_helper); } /** @@ -1165,7 +1165,7 @@ gtk_image_get_texture (GtkImage *image) g_return_val_if_fail (GTK_IS_IMAGE (image), NULL); - return _gtk_icon_helper_peek_texture (&priv->icon_helper); + return _gtk_icon_helper_peek_texture (priv->icon_helper); } /** @@ -1191,7 +1191,7 @@ gtk_image_get_icon_name (GtkImage *image) g_return_val_if_fail (GTK_IS_IMAGE (image), NULL); - return _gtk_icon_helper_get_icon_name (&priv->icon_helper); + return _gtk_icon_helper_get_icon_name (priv->icon_helper); } /** @@ -1217,7 +1217,7 @@ gtk_image_get_gicon (GtkImage *image) g_return_val_if_fail (GTK_IS_IMAGE (image), NULL); - return _gtk_icon_helper_peek_gicon (&priv->icon_helper); + return _gtk_icon_helper_peek_gicon (priv->icon_helper); } /** @@ -1253,7 +1253,7 @@ gtk_image_unrealize (GtkWidget *widget) GtkImage *image = GTK_IMAGE (widget); GtkImagePrivate *priv = gtk_image_get_instance_private (image); - gtk_icon_helper_invalidate (&priv->icon_helper); + gtk_icon_helper_invalidate (priv->icon_helper); GTK_WIDGET_CLASS (gtk_image_parent_class)->unrealize (widget); } @@ -1294,13 +1294,13 @@ gtk_image_snapshot (GtkWidget *widget, width = gtk_widget_get_width (widget); height = gtk_widget_get_height (widget); - if (_gtk_icon_helper_get_storage_type (&priv->icon_helper) == GTK_IMAGE_PAINTABLE) + if (_gtk_icon_helper_get_storage_type (priv->icon_helper) == GTK_IMAGE_PAINTABLE) { - gtk_icon_helper_snapshot (&priv->icon_helper, snapshot, width, height); + gtk_icon_helper_snapshot (priv->icon_helper, snapshot, width, height); } else { - _gtk_icon_helper_get_size (&priv->icon_helper, &w, &h); + _gtk_icon_helper_get_size (priv->icon_helper, &w, &h); x = (width - w) / 2; baseline = gtk_widget_get_allocated_baseline (widget); @@ -1311,7 +1311,7 @@ gtk_image_snapshot (GtkWidget *widget, y = CLAMP (baseline - h * gtk_image_get_baseline_align (image), 0, height - h); gtk_snapshot_offset (snapshot, x, y); - gtk_icon_helper_snapshot (&priv->icon_helper, snapshot, w, h); + gtk_icon_helper_snapshot (priv->icon_helper, snapshot, w, h); gtk_snapshot_offset (snapshot, -x, -y); } } @@ -1357,7 +1357,7 @@ gtk_image_set_from_definition (GtkImage *image, if (def != NULL) { - _gtk_icon_helper_set_definition (&priv->icon_helper, def); + _gtk_icon_helper_set_definition (priv->icon_helper, def); gtk_image_notify_for_storage_type (image, gtk_image_definition_get_storage_type (def)); } @@ -1370,7 +1370,7 @@ gtk_image_get_definition (GtkImage *image) { GtkImagePrivate *priv = gtk_image_get_instance_private (image); - return gtk_icon_helper_get_definition (&priv->icon_helper); + return gtk_icon_helper_get_definition (priv->icon_helper); } /** @@ -1411,7 +1411,7 @@ gtk_image_clear (GtkImage *image) if (storage_type == GTK_IMAGE_PAINTABLE) { - GdkPaintable *paintable = _gtk_icon_helper_peek_paintable (&priv->icon_helper); + GdkPaintable *paintable = _gtk_icon_helper_peek_paintable (priv->icon_helper); g_signal_handlers_disconnect_by_func (paintable, gtk_image_paintable_invalidate_contents, image); @@ -1420,7 +1420,7 @@ gtk_image_clear (GtkImage *image) image); } - _gtk_icon_helper_clear (&priv->icon_helper); + _gtk_icon_helper_clear (priv->icon_helper); g_object_thaw_notify (G_OBJECT (image)); } @@ -1437,7 +1437,7 @@ gtk_image_measure (GtkWidget *widget, GtkImagePrivate *priv = gtk_image_get_instance_private (GTK_IMAGE (widget)); float baseline_align; - gtk_icon_helper_measure (&priv->icon_helper, + gtk_icon_helper_measure (priv->icon_helper, orientation, for_size, minimum, natural); @@ -1460,7 +1460,7 @@ gtk_image_style_updated (GtkWidget *widget) GtkStyleContext *context = gtk_widget_get_style_context (widget); GtkCssStyleChange *change = gtk_style_context_get_change (context); - gtk_icon_helper_invalidate_for_change (&priv->icon_helper, change); + gtk_icon_helper_invalidate_for_change (priv->icon_helper, change); GTK_WIDGET_CLASS (gtk_image_parent_class)->style_updated (widget); @@ -1484,7 +1484,7 @@ gtk_image_set_pixel_size (GtkImage *image, g_return_if_fail (GTK_IS_IMAGE (image)); - if (_gtk_icon_helper_set_pixel_size (&priv->icon_helper, pixel_size)) + if (_gtk_icon_helper_set_pixel_size (priv->icon_helper, pixel_size)) { if (gtk_widget_get_visible (GTK_WIDGET (image))) gtk_widget_queue_resize (GTK_WIDGET (image)); @@ -1507,7 +1507,7 @@ gtk_image_get_pixel_size (GtkImage *image) g_return_val_if_fail (GTK_IS_IMAGE (image), -1); - return _gtk_icon_helper_get_pixel_size (&priv->icon_helper); + return _gtk_icon_helper_get_pixel_size (priv->icon_helper); } /** @@ -1558,5 +1558,5 @@ gtk_image_get_image_size (GtkImage *image, { GtkImagePrivate *priv = gtk_image_get_instance_private (image); - _gtk_icon_helper_get_size (&priv->icon_helper, width, height); + _gtk_icon_helper_get_size (priv->icon_helper, width, height); }