cairo_surface_t * _gtk_icon_helper_ensure_surface (GtkIconHelper *self, GtkStyleContext *context) { cairo_surface_t *surface = NULL; GtkIconSet *icon_set; switch (self->priv->storage_type) { case GTK_IMAGE_SURFACE: ensure_surface_from_surface (self, context); break; case GTK_IMAGE_PIXBUF: ensure_surface_from_pixbuf (self, context); break; case GTK_IMAGE_STOCK: G_GNUC_BEGIN_IGNORE_DEPRECATIONS; icon_set = gtk_icon_factory_lookup_default (self->priv->stock_id); if (icon_set != NULL) ensure_surface_for_icon_set (self, context, icon_set); else surface = NULL; G_GNUC_END_IGNORE_DEPRECATIONS; break; case GTK_IMAGE_ICON_SET: icon_set = self->priv->icon_set; ensure_surface_for_icon_set (self, context, icon_set); break; case GTK_IMAGE_ICON_NAME: case GTK_IMAGE_GICON: ensure_surface_for_gicon (self, context); break; case GTK_IMAGE_ANIMATION: case GTK_IMAGE_EMPTY: default: surface = NULL; break; } if (surface == NULL && self->priv->rendered_surface != NULL) surface = cairo_surface_reference (self->priv->rendered_surface); return surface; }
cairo_surface_t * gtk_icon_helper_load_surface (GtkIconHelper *self, int scale) { cairo_surface_t *surface; GtkIconSet *icon_set; GIcon *gicon; switch (gtk_image_definition_get_storage_type (self->priv->def)) { case GTK_IMAGE_SURFACE: surface = ensure_surface_from_surface (self, gtk_image_definition_get_surface (self->priv->def)); break; case GTK_IMAGE_PIXBUF: surface = ensure_surface_from_pixbuf (self, gtk_css_node_get_style (gtk_css_gadget_get_node (GTK_CSS_GADGET (self))), scale, gtk_image_definition_get_pixbuf (self->priv->def), gtk_image_definition_get_scale (self->priv->def)); break; case GTK_IMAGE_STOCK: G_GNUC_BEGIN_IGNORE_DEPRECATIONS; icon_set = gtk_icon_factory_lookup_default (gtk_image_definition_get_stock (self->priv->def)); G_GNUC_END_IGNORE_DEPRECATIONS; if (icon_set != NULL) surface = ensure_surface_for_icon_set (self, gtk_css_node_get_style (gtk_css_gadget_get_node (GTK_CSS_GADGET (self))), gtk_widget_get_direction (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self))), scale, icon_set); else surface = NULL; break; case GTK_IMAGE_ICON_SET: icon_set = gtk_image_definition_get_icon_set (self->priv->def); surface = ensure_surface_for_icon_set (self, gtk_css_node_get_style (gtk_css_gadget_get_node (GTK_CSS_GADGET (self))), gtk_widget_get_direction (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self))), scale, icon_set); break; case GTK_IMAGE_ICON_NAME: if (self->priv->use_fallback) gicon = g_themed_icon_new_with_default_fallbacks (gtk_image_definition_get_icon_name (self->priv->def)); else gicon = g_themed_icon_new (gtk_image_definition_get_icon_name (self->priv->def)); surface = ensure_surface_for_gicon (self, gtk_css_node_get_style (gtk_css_gadget_get_node (GTK_CSS_GADGET (self))), gtk_widget_get_direction (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self))), scale, gicon); g_object_unref (gicon); break; case GTK_IMAGE_GICON: surface = ensure_surface_for_gicon (self, gtk_css_node_get_style (gtk_css_gadget_get_node (GTK_CSS_GADGET (self))), gtk_widget_get_direction (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self))), scale, gtk_image_definition_get_gicon (self->priv->def)); break; case GTK_IMAGE_ANIMATION: case GTK_IMAGE_EMPTY: default: surface = NULL; break; } return surface; }