void nautilus_ui_frame_image (GdkPixbuf **pixbuf) { GtkBorder border; GdkPixbuf *pixbuf_with_frame; border.left = NAUTILUS_THUMBNAIL_FRAME_LEFT; border.top = NAUTILUS_THUMBNAIL_FRAME_TOP; border.right = NAUTILUS_THUMBNAIL_FRAME_RIGHT; border.bottom = NAUTILUS_THUMBNAIL_FRAME_BOTTOM; pixbuf_with_frame = gd_embed_image_in_frame (*pixbuf, "resource:///org/gnome/nautilus/icons/thumbnail_frame.png", &border, &border); g_object_unref (*pixbuf); *pixbuf = pixbuf_with_frame; }
static GdkPixbuf * biji_note_obj_get_icon (BijiItem *item) { GdkRGBA note_color; const gchar *text; cairo_t *cr; PangoLayout *layout; PangoFontDescription *desc; GdkPixbuf *ret = NULL; cairo_surface_t *surface = NULL; GtkBorder frame_slice = { 4, 3, 3, 6 }; BijiNoteObj *note = BIJI_NOTE_OBJ (item); if (note->priv->icon) return note->priv->icon; /* Create & Draw surface */ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, BIJI_ICON_WIDTH, BIJI_ICON_HEIGHT) ; cr = cairo_create (surface); /* Background */ cairo_rectangle (cr, 0, 0, BIJI_ICON_WIDTH, BIJI_ICON_HEIGHT); if (biji_note_obj_get_rgba (note, ¬e_color)) gdk_cairo_set_source_rgba (cr, ¬e_color); cairo_fill (cr); /* Text */ text = biji_note_id_get_content (note->priv->id); if (text != NULL) { cairo_translate (cr, 10, 10); layout = pango_cairo_create_layout (cr); pango_layout_set_width (layout, 180000 ); pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR); pango_layout_set_height (layout, 180000 ) ; pango_layout_set_text (layout, text, -1); desc = pango_font_description_from_string (BIJI_ICON_FONT); pango_layout_set_font_description (layout, desc); pango_font_description_free (desc); cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); g_object_unref (layout); } cairo_destroy (cr); ret = gdk_pixbuf_get_from_surface (surface, 0, 0, BIJI_ICON_WIDTH, BIJI_ICON_HEIGHT); cairo_surface_destroy (surface); note->priv->icon = gd_embed_image_in_frame (ret, "resource:///org/gnome/bijiben/thumbnail-frame.png", &frame_slice, &frame_slice); g_clear_object (&ret); return note->priv->icon; }
static void photos_base_item_check_effects_and_update_info (PhotosBaseItem *self) { PhotosBaseItemPrivate *priv = self->priv; GApplication *app; GIcon *pix; GList *emblem_icons = NULL; GList *windows; GdkPixbuf *emblemed_pixbuf = NULL; GdkPixbuf *thumbnailed_pixbuf = NULL; GdkWindow *window; gint scale; if (priv->original_icon == NULL) goto out; emblemed_pixbuf = g_object_ref (priv->original_icon); if (priv->favorite) { pix = photos_base_item_create_symbolic_emblem (PHOTOS_ICON_FAVORITE); emblem_icons = g_list_prepend (emblem_icons, pix); } if (g_list_length (emblem_icons) > 0) { GIcon *emblemed_icon; GList *l; GtkIconInfo *icon_info; GtkIconTheme *theme; gint height; gint size; gint width; emblem_icons = g_list_reverse (emblem_icons); emblemed_icon = g_emblemed_icon_new (G_ICON (priv->original_icon), NULL); for (l = emblem_icons; l != NULL; l = g_list_next (l)) { GEmblem *emblem; GIcon *emblem_icon = G_ICON (l->data); emblem = g_emblem_new (emblem_icon); g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (emblemed_icon), emblem); g_object_unref (emblem); } theme = gtk_icon_theme_get_default (); width = gdk_pixbuf_get_width (priv->original_icon); height = gdk_pixbuf_get_height (priv->original_icon); size = (width > height) ? width : height; icon_info = gtk_icon_theme_lookup_by_gicon (theme, emblemed_icon, size, GTK_ICON_LOOKUP_FORCE_SIZE); if (icon_info != NULL) { GError *error = NULL; GdkPixbuf *tmp; tmp = gtk_icon_info_load_icon (icon_info, &error); if (error != NULL) { g_warning ("Unable to render the emblem: %s", error->message); g_error_free (error); } else { g_object_unref (emblemed_pixbuf); emblemed_pixbuf = tmp; } g_object_unref (icon_info); } g_object_unref (emblemed_icon); } g_clear_pointer (&priv->surface, (GDestroyNotify) cairo_surface_destroy); if (priv->thumb_path != NULL) { GtkBorder *slice; slice = photos_utils_get_thumbnail_frame_border (); thumbnailed_pixbuf = gd_embed_image_in_frame (emblemed_pixbuf, "resource:///org/gnome/photos/thumbnail-frame.png", slice, slice); gtk_border_free (slice); } else thumbnailed_pixbuf = g_object_ref (emblemed_pixbuf); app = g_application_get_default (); scale = photos_application_get_scale_factor (PHOTOS_APPLICATION (app)); windows = gtk_application_get_windows (GTK_APPLICATION (app)); window = gtk_widget_get_window (GTK_WIDGET (windows->data)); priv->surface = gdk_cairo_surface_create_from_pixbuf (thumbnailed_pixbuf, scale, window); g_signal_emit (self, signals[INFO_UPDATED], 0); out: g_clear_object (&thumbnailed_pixbuf); g_clear_object (&emblemed_pixbuf); g_list_free_full (emblem_icons, g_object_unref); }