static void ensure_surface_from_pixbuf (GtkIconHelper *self, GtkStyleContext *context) { gint width, height; GdkPixbuf *pixbuf, *stated; int scale; if (!check_invalidate_surface (self, context)) return; if (self->priv->rendered_surface) return; if (get_pixbuf_size (self, context, &width, &height, &scale)) pixbuf = gdk_pixbuf_scale_simple (self->priv->orig_pixbuf, width, height, GDK_INTERP_BILINEAR); else pixbuf = g_object_ref (self->priv->orig_pixbuf); stated = ensure_stated_pixbuf_from_pixbuf (self, context, pixbuf); g_object_unref (pixbuf); pixbuf = stated; self->priv->rendered_surface_width = (width + scale - 1) / scale; self->priv->rendered_surface_height = (height + scale - 1) / scale; self->priv->rendered_surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, self->priv->window); g_object_unref (pixbuf); }
static void ensure_surface_from_pixbuf (GtkIconHelper *self, GtkStyleContext *context) { gint width, height; GdkPixbuf *pixbuf; int scale; if (!check_invalidate_surface (self, context)) return; if (self->priv->rendered_surface) return; scale = get_scale_factor (self, context); if (self->priv->force_scale_pixbuf && (self->priv->pixel_size != -1 || self->priv->icon_size != GTK_ICON_SIZE_INVALID)) { ensure_icon_size (self, context, &width, &height); if (scale != self->priv->orig_pixbuf_scale || width < gdk_pixbuf_get_width (self->priv->orig_pixbuf) / self->priv->orig_pixbuf_scale || height < gdk_pixbuf_get_height (self->priv->orig_pixbuf) / self->priv->orig_pixbuf_scale) { width = MIN (width * scale, gdk_pixbuf_get_width (self->priv->orig_pixbuf) * scale / self->priv->orig_pixbuf_scale); height = MIN (height * scale, gdk_pixbuf_get_height (self->priv->orig_pixbuf) * scale / self->priv->orig_pixbuf_scale); pixbuf = gdk_pixbuf_scale_simple (self->priv->orig_pixbuf, width, height, GDK_INTERP_BILINEAR); } else { pixbuf = g_object_ref (self->priv->orig_pixbuf); scale = self->priv->orig_pixbuf_scale; } } else { pixbuf = g_object_ref (self->priv->orig_pixbuf); scale = self->priv->orig_pixbuf_scale; } self->priv->rendered_surface_width = (gdk_pixbuf_get_width (pixbuf) + scale - 1) / scale; self->priv->rendered_surface_height = (gdk_pixbuf_get_height (pixbuf) + scale - 1) / scale; self->priv->rendered_surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, self->priv->window); g_object_unref (pixbuf); }
static void ensure_surface_from_surface (GtkIconHelper *self, GtkStyleContext *context) { if (!check_invalidate_surface (self, context)) return; if (self->priv->rendered_surface) return; self->priv->rendered_surface = cairo_surface_reference (self->priv->orig_surface); get_surface_size (self, context, self->priv->orig_surface, &self->priv->rendered_surface_width, &self->priv->rendered_surface_height); }
static void ensure_surface_for_icon_name_or_gicon (GtkIconHelper *self, GtkStyleContext *context) { GtkIconTheme *icon_theme; gint width, height, scale; GtkIconInfo *info; GtkIconLookupFlags flags; if (!check_invalidate_surface (self, context)) return; icon_theme = gtk_icon_theme_get_default (); flags = get_icon_lookup_flags (self); ensure_icon_size (self, context, &width, &height); scale = get_scale_factor (self, context); if (self->priv->storage_type == GTK_IMAGE_ICON_NAME && self->priv->icon_name != NULL) { info = gtk_icon_theme_lookup_icon_for_scale (icon_theme, self->priv->icon_name, MIN (width, height), scale, flags); } else if (self->priv->storage_type == GTK_IMAGE_GICON && self->priv->gicon != NULL) { info = gtk_icon_theme_lookup_by_gicon_for_scale (icon_theme, self->priv->gicon, MIN (width, height), scale, flags); } else { g_assert_not_reached (); return; } ensure_stated_surface_from_info (self, context, info, scale); if (info) g_object_unref (info); }
static void ensure_surface_for_icon_set (GtkIconHelper *self, GtkStyleContext *context, GtkIconSet *icon_set) { gint scale; if (!check_invalidate_surface (self, context)) return; scale = get_scale_factor (self, context); G_GNUC_BEGIN_IGNORE_DEPRECATIONS; self->priv->rendered_surface = gtk_icon_set_render_icon_surface (icon_set, context, self->priv->icon_size, scale, self->priv->window); G_GNUC_END_IGNORE_DEPRECATIONS; if (self->priv->rendered_surface) get_surface_size (self, context, self->priv->rendered_surface, &self->priv->rendered_surface_width, &self->priv->rendered_surface_height); }