[gnome-control-center] background: Add emblem for slideshow previews



commit 035126a970da54711ae0076ccae1e79f84c081f5
Author: Bastien Nocera <hadess hadess net>
Date:   Tue Dec 14 20:29:33 2010 +0000

    background: Add emblem for slideshow previews
    
    Though for some reason the icon ends up being tiny...

 panels/background/Makefile.am                      |    7 +-
 panels/background/background.ui                    |    8 +-
 panels/background/bg-colors-source.c               |    2 +-
 panels/background/bg-source.c                      |    2 +-
 panels/background/bg-wallpapers-source.c           |    4 +-
 panels/background/cc-background-panel.c            |   11 ++-
 panels/background/gnome-wp-item.c                  |   56 +++++------
 panels/background/gnome-wp-item.h                  |   18 ++--
 panels/background/slideshow-emblem.svg             |  104 ++++++++++++++++++++
 ...-emblem-symbolic.svg => slideshow-symbolic.svg} |    0
 10 files changed, 156 insertions(+), 56 deletions(-)
---
diff --git a/panels/background/Makefile.am b/panels/background/Makefile.am
index c9c1f2f..56ecee3 100644
--- a/panels/background/Makefile.am
+++ b/panels/background/Makefile.am
@@ -7,8 +7,11 @@ dist_ui_DATA = \
 	display-base.png \
 	display-overlay.png
 
-slideshowicondir = $(datadir)/icons/hicolor/scalable/emblems/
-slideshowicon_DATA = slideshow-emblem-symbolic.svg
+slideshowicondir = $(datadir)/icons/hicolor/scalable/categories/
+slideshowicon_DATA = slideshow-symbolic.svg
+
+slideshowemblemdir = $(datadir)/icons/hicolor/scalable/emblems/
+slideshowemblem_DATA = slideshow-emblem.svg
 
 INCLUDES =						\
 	$(PANEL_CFLAGS)					\
diff --git a/panels/background/background.ui b/panels/background/background.ui
index f436402..fdb020f 100644
--- a/panels/background/background.ui
+++ b/panels/background/background.ui
@@ -4,8 +4,8 @@
   <!-- interface-naming-policy project-wide -->
   <object class="GtkListStore" id="backgrounds-liststore">
     <columns>
-      <!-- column-name pixbuf -->
-      <column type="GdkPixbuf"/>
+      <!-- column-name gicon -->
+      <column type="GIcon"/>
       <!-- column-name data -->
       <column type="gpointer"/>
       <!-- column-name source-id -->
@@ -69,7 +69,7 @@
                 <child>
                   <object class="GtkCellRendererPixbuf" id="pixbuf-renderer"/>
                   <attributes>
-                    <attribute name="pixbuf">0</attribute>
+                    <attribute name="gicon">0</attribute>
                   </attributes>
                 </child>
               </object>
@@ -135,7 +135,7 @@
             <child>
               <object class="GtkImage" id="slide_image">
                 <property name="visible">True</property>
-                <property name="icon_name">slideshow-emblem-symbolic</property>
+                <property name="icon_name">slideshow-symbolic</property>
               </object>
               <packing>
                 <property name="expand">False</property>
diff --git a/panels/background/bg-colors-source.c b/panels/background/bg-colors-source.c
index 52b1e2d..6bed0a5 100644
--- a/panels/background/bg-colors-source.c
+++ b/panels/background/bg-colors-source.c
@@ -81,7 +81,7 @@ bg_colors_source_init (BgColorsSource *self)
   for (c = colors, n = color_names; *c; c++, n++)
     {
       GnomeWPItem *item;
-      GdkPixbuf *pixbuf;
+      GIcon *pixbuf;
       GdkColor color;
 
       item = g_new0 (GnomeWPItem, 1);
diff --git a/panels/background/bg-source.c b/panels/background/bg-source.c
index 9f130cc..ba447fb 100644
--- a/panels/background/bg-source.c
+++ b/panels/background/bg-source.c
@@ -136,7 +136,7 @@ bg_source_init (BgSource *self)
 
   priv = self->priv = SOURCE_PRIVATE (self);
 
-  priv->store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_POINTER);
+  priv->store = gtk_list_store_new (2, G_TYPE_ICON, G_TYPE_POINTER);
 }
 
 GtkListStore*
diff --git a/panels/background/bg-wallpapers-source.c b/panels/background/bg-wallpapers-source.c
index 38f4f21..8b76007 100644
--- a/panels/background/bg-wallpapers-source.c
+++ b/panels/background/bg-wallpapers-source.c
@@ -138,7 +138,7 @@ item_changed_cb (GnomeBG    *bg,
 
   if (gtk_tree_model_get_iter (model, &iter, path))
     {
-      GdkPixbuf *pixbuf;
+      GIcon *pixbuf;
 
       g_signal_handlers_block_by_func (bg, G_CALLBACK (item_changed_cb), data);
 
@@ -169,7 +169,7 @@ load_wallpapers (gchar              *key,
   BgWallpapersSourcePrivate *priv = source->priv;
   GtkTreeIter iter;
   GtkTreePath *path;
-  GdkPixbuf *pixbuf;
+  GIcon *pixbuf;
   GtkListStore *store = bg_source_get_liststore (BG_SOURCE (source));
 
   if (item->deleted == TRUE)
diff --git a/panels/background/cc-background-panel.c b/panels/background/cc-background-panel.c
index 7e92cb9..73fe774 100644
--- a/panels/background/cc-background-panel.c
+++ b/panels/background/cc-background-panel.c
@@ -528,10 +528,13 @@ preview_draw_cb (GtkWidget         *widget,
 
   if (priv->current_background)
     {
-      pixbuf = gnome_wp_item_get_thumbnail (priv->current_background,
-                                            priv->thumb_factory,
-                                            preview_width,
-                                            preview_height);
+      GIcon *icon;
+      icon = gnome_wp_item_get_frame_thumbnail (priv->current_background,
+                                                priv->thumb_factory,
+                                                preview_width,
+                                                preview_height,
+                                                -2);
+      pixbuf = GDK_PIXBUF (icon);
     }
 
   if (!priv->display_base)
diff --git a/panels/background/gnome-wp-item.c b/panels/background/gnome-wp-item.c
index 67c4d43..9685c60 100644
--- a/panels/background/gnome-wp-item.c
+++ b/panels/background/gnome-wp-item.c
@@ -211,64 +211,54 @@ void gnome_wp_item_free (GnomeWPItem * item) {
   g_free (item);
 }
 
-static GdkPixbuf *
-add_slideshow_frame (GdkPixbuf *pixbuf)
+static GEmblem *
+get_slideshow_icon (void)
 {
-  GdkPixbuf *sheet, *sheet2;
-  GdkPixbuf *tmp;
-  gint w, h;
+	GIcon *themed;
+	GEmblem *emblem;
 
-  w = gdk_pixbuf_get_width (pixbuf);
-  h = gdk_pixbuf_get_height (pixbuf);
-
-  sheet = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, w, h);
-  gdk_pixbuf_fill (sheet, 0x00000000);
-  sheet2 = gdk_pixbuf_new_subpixbuf (sheet, 1, 1, w - 2, h - 2);
-  gdk_pixbuf_fill (sheet2, 0xffffffff);
-  g_object_unref (sheet2);
-
-  tmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, w + 6, h + 6);
-
-  gdk_pixbuf_fill (tmp, 0x00000000);
-  gdk_pixbuf_composite (sheet, tmp, 6, 6, w, h, 6.0, 6.0, 1.0, 1.0, GDK_INTERP_NEAREST, 255);
-  gdk_pixbuf_composite (sheet, tmp, 3, 3, w, h, 3.0, 3.0, 1.0, 1.0, GDK_INTERP_NEAREST, 255);
-  gdk_pixbuf_composite (pixbuf, tmp, 0, 0, w, h, 0.0, 0.0, 1.0, 1.0, GDK_INTERP_NEAREST, 255);
-
-  g_object_unref (sheet);
-
-  return tmp;
+	themed = g_themed_icon_new ("slideshow-emblem");
+	emblem = g_emblem_new_with_origin (themed, G_EMBLEM_ORIGIN_DEVICE);
+	g_object_unref (themed);
+	return emblem;
 }
 
-GdkPixbuf * gnome_wp_item_get_frame_thumbnail (GnomeWPItem * item,
+GIcon * gnome_wp_item_get_frame_thumbnail (GnomeWPItem * item,
 					       GnomeDesktopThumbnailFactory * thumbs,
                                                int width,
                                                int height,
                                                gint frame) {
   GdkPixbuf *pixbuf = NULL;
+  GIcon *icon = NULL;
 
   set_bg_properties (item);
 
-  if (frame != -1)
+  if (frame >= 0)
     pixbuf = gnome_bg_create_frame_thumbnail (item->bg, thumbs, gdk_screen_get_default (), width, height, frame);
   else
     pixbuf = gnome_bg_create_thumbnail (item->bg, thumbs, gdk_screen_get_default(), width, height);
 
-  if (pixbuf && gnome_bg_changes_with_time (item->bg))
+  if (pixbuf && frame != -2 && gnome_bg_changes_with_time (item->bg))
     {
-      GdkPixbuf *tmp;
+      GEmblem *emblem;
 
-      tmp = add_slideshow_frame (pixbuf);
+      emblem = get_slideshow_icon ();
+      icon = g_emblemed_icon_new (G_ICON (pixbuf), emblem);
+      g_object_unref (emblem);
       g_object_unref (pixbuf);
-      pixbuf = tmp;
+    }
+  else
+    {
+      icon = G_ICON (pixbuf);
     }
 
   gnome_bg_get_image_size (item->bg, thumbs, width, height, &item->width, &item->height);
 
-  return pixbuf;
+  return icon;
 }
 
 
-GdkPixbuf * gnome_wp_item_get_thumbnail (GnomeWPItem * item,
+GIcon * gnome_wp_item_get_thumbnail (GnomeWPItem * item,
 					 GnomeDesktopThumbnailFactory * thumbs,
                                          gint width,
                                          gint height) {
@@ -283,7 +273,7 @@ void gnome_wp_item_update_size (GnomeWPItem * item,
   if (!strcmp (item->filename, "(none)")) {
     item->size = g_strdup (item->name);
   } else {
-    if (gnome_bg_has_multiple_sizes (item->bg))
+    if (gnome_bg_has_multiple_sizes (item->bg) || gnome_bg_changes_with_time (item->bg))
       item->size = g_strdup (_("multiple sizes"));
     else {
       if (thumbs != NULL && (item->width <= 0 || item->height <= 0)) {
diff --git a/panels/background/gnome-wp-item.h b/panels/background/gnome-wp-item.h
index 33a1489..01e40d5 100644
--- a/panels/background/gnome-wp-item.h
+++ b/panels/background/gnome-wp-item.h
@@ -73,15 +73,15 @@ GnomeWPItem * gnome_wp_item_new (const gchar *filename,
 				 GnomeDesktopThumbnailFactory *thumbnails);
 
 void gnome_wp_item_free (GnomeWPItem *item);
-GdkPixbuf * gnome_wp_item_get_thumbnail (GnomeWPItem *item,
-					 GnomeDesktopThumbnailFactory *thumbs,
-                                         gint width,
-                                         gint height);
-GdkPixbuf * gnome_wp_item_get_frame_thumbnail (GnomeWPItem *item,
-                                               GnomeDesktopThumbnailFactory *thumbs,
-                                               gint width,
-                                               gint height,
-                                               gint frame);
+GIcon * gnome_wp_item_get_thumbnail (GnomeWPItem *item,
+				     GnomeDesktopThumbnailFactory *thumbs,
+				     gint width,
+				     gint height);
+GIcon * gnome_wp_item_get_frame_thumbnail (GnomeWPItem *item,
+					   GnomeDesktopThumbnailFactory *thumbs,
+					   gint width,
+					   gint height,
+					   gint frame);
 void gnome_wp_item_update (GnomeWPItem *item);
 void gnome_wp_item_update_size (GnomeWPItem *item, GnomeDesktopThumbnailFactory *thumbs);
 void gnome_wp_item_ensure_gnome_bg (GnomeWPItem *item);
diff --git a/panels/background/slideshow-emblem.svg b/panels/background/slideshow-emblem.svg
new file mode 100644
index 0000000..4ba3a09
--- /dev/null
+++ b/panels/background/slideshow-emblem.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="128"
+   height="128"
+   id="svg4978"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="slideshow-emblem.svg">
+  <defs
+     id="defs4980" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.98994949"
+     inkscape:cx="41.944792"
+     inkscape:cy="39.155574"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="962"
+     inkscape:window-height="817"
+     inkscape:window-x="4"
+     inkscape:window-y="51"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata4983">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-924.36215)">
+    <g
+       style="display:inline"
+       id="g14317"
+       transform="matrix(7.1989829,0,0,7.1989829,-772.01578,-783.40043)">
+      <g
+         style="stroke:#000000;stroke-opacity:1"
+         transform="translate(69,-449)"
+         id="g14258"
+         inkscape:label="document-open-recent">
+        <path
+           sodipodi:type="arc"
+           style="color:#000000;fill:none;stroke:#000000;stroke-width:2.15384626;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="path14260"
+           sodipodi:cx="48"
+           sodipodi:cy="696"
+           sodipodi:rx="7"
+           sodipodi:ry="7"
+           d="m 55,696 c 0,3.86599 -3.134007,7 -7,7 -3.865993,0 -7,-3.13401 -7,-7 0,-3.86599 3.134007,-7 7,-7 3.865993,0 7,3.13401 7,7 z"
+           transform="matrix(0.92857143,0,0,0.92857143,2.9285714,49.21429)" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 45.5,693.5 2,2 3,-3"
+           id="path14262"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ccc" />
+      </g>
+      <g
+         inkscape:label="document-open-recent"
+         id="g4692"
+         transform="translate(69,-450)">
+        <path
+           transform="matrix(0.92857143,0,0,0.92857143,2.9285714,49.21429)"
+           d="m 55,696 c 0,3.86599 -3.134007,7 -7,7 -3.865993,0 -7,-3.13401 -7,-7 0,-3.86599 3.134007,-7 7,-7 3.865993,0 7,3.13401 7,7 z"
+           sodipodi:ry="7"
+           sodipodi:rx="7"
+           sodipodi:cy="696"
+           sodipodi:cx="48"
+           id="path3869"
+           style="color:#000000;fill:none;stroke:#ffffff;stroke-width:2.15384626;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:nodetypes="ccc"
+           inkscape:connector-curvature="0"
+           id="path4639"
+           d="m 45.5,693.5 2,2 3,-3"
+           style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/panels/background/slideshow-emblem-symbolic.svg b/panels/background/slideshow-symbolic.svg
similarity index 100%
rename from panels/background/slideshow-emblem-symbolic.svg
rename to panels/background/slideshow-symbolic.svg



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]