[gnome-software] Show font screenshots



commit f8d925510dd35e41da75733310f6cc510355915d
Author: Richard Hughes <richard hughsie com>
Date:   Tue Oct 22 16:35:40 2013 +0100

    Show font screenshots
    
    The font screenshots are not in standard large/small sizes so load the preview
    at any size provided.

 src/gs-app.c                      |    5 ++++-
 src/gs-screenshot-image.c         |    3 ++-
 src/gs-screenshot.c               |   14 +++++++++++---
 src/gs-screenshot.h               |    4 +++-
 src/gs-shell-details.c            |   23 ++++++++++++++++++++---
 src/plugins/gs-plugin-appstream.c |    2 --
 6 files changed, 40 insertions(+), 11 deletions(-)
---
diff --git a/src/gs-app.c b/src/gs-app.c
index e2eae0d..8ba94db 100644
--- a/src/gs-app.c
+++ b/src/gs-app.c
@@ -233,7 +233,10 @@ gs_app_to_string (GsApp *app)
        for (i = 0; i < priv->screenshots->len; i++) {
                ss = g_ptr_array_index (priv->screenshots, i);
                g_string_append_printf (str, "\tscreenshot-%02i:\t%s\n",
-                                       i, gs_screenshot_get_url (ss, G_MAXUINT, G_MAXUINT));
+                                       i, gs_screenshot_get_url (ss,
+                                                                 G_MAXUINT,
+                                                                 G_MAXUINT,
+                                                                 NULL));
        }
        tmp = g_hash_table_lookup (priv->urls, GS_APP_URL_KIND_HOMEPAGE);
        if (tmp != NULL)
diff --git a/src/gs-screenshot-image.c b/src/gs-screenshot-image.c
index a29782a..b5b2a92 100644
--- a/src/gs-screenshot-image.c
+++ b/src/gs-screenshot-image.c
@@ -259,7 +259,8 @@ gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
        /* test if size specific cachdir exists */
        url = gs_screenshot_get_url (priv->screenshot,
                                     priv->width,
-                                    priv->height);
+                                    priv->height,
+                                    NULL);
        if (url == NULL) {
                /* TRANSLATORS: this is when we request a screenshot size that
                 * the generator did not create or the parser did not add */
diff --git a/src/gs-screenshot.c b/src/gs-screenshot.c
index 989a99f..4a744dc 100644
--- a/src/gs-screenshot.c
+++ b/src/gs-screenshot.c
@@ -114,8 +114,8 @@ gs_screenshot_add_image (GsScreenshot *screenshot,
        /* check if already exists */
        item = gs_screenshot_get_item (screenshot, width, height);
        if (item != NULL) {
-               g_warning ("replaced URL %s with %s for %ux%u",
-                          item->url, url, width, height);
+               g_debug ("replaced URL %s with %s for %ux%u",
+                        item->url, url, width, height);
                g_free (item->url);
                item->url = g_strdup (url);
        } else {
@@ -131,7 +131,10 @@ gs_screenshot_add_image (GsScreenshot *screenshot,
  * gs_screenshot_get_url:
  **/
 const gchar *
-gs_screenshot_get_url (GsScreenshot *screenshot, guint width, guint height)
+gs_screenshot_get_url (GsScreenshot *screenshot,
+                      guint width,
+                      guint height,
+                      GtkRequisition *provided)
 {
        GsScreenshotItem *item;
 
@@ -143,6 +146,11 @@ gs_screenshot_get_url (GsScreenshot *screenshot, guint width, guint height)
        if (item == NULL)
                return NULL;
 
+       if (provided != NULL) {
+               provided->width = item->width;
+               provided->height = item->height;
+       }
+
        return item->url;
 }
 
diff --git a/src/gs-screenshot.h b/src/gs-screenshot.h
index 90ca16f..33f0d2b 100644
--- a/src/gs-screenshot.h
+++ b/src/gs-screenshot.h
@@ -23,6 +23,7 @@
 #define __GS_SCREENSHOT_H
 
 #include <glib-object.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
@@ -64,7 +65,8 @@ void           gs_screenshot_add_image        (GsScreenshot           *screenshot,
                                                 guint                   height);
 const gchar    *gs_screenshot_get_url          (GsScreenshot           *screenshot,
                                                 guint                   width,
-                                                guint                   height);
+                                                guint                   height,
+                                                GtkRequisition         *provided);
 
 G_END_DECLS
 
diff --git a/src/gs-shell-details.c b/src/gs-shell-details.c
index 9d4e557..b3433bf 100644
--- a/src/gs-shell-details.c
+++ b/src/gs-shell-details.c
@@ -245,6 +245,7 @@ gs_shell_details_screenshot_selected_cb (GtkListBox *list,
 static void
 gs_shell_details_refresh_screenshots (GsShellDetails *shell_details)
 {
+       const gchar *tmp;
        GPtrArray *screenshots;
        GsScreenshot *ss;
        GsShellDetailsPrivate *priv = shell_details->priv;
@@ -252,6 +253,7 @@ gs_shell_details_refresh_screenshots (GsShellDetails *shell_details)
        GtkWidget *ssimg;
        GtkWidget *widget;
        guint i;
+       GtkRequisition provided;
 
        /* set screenshots */
        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder,
@@ -272,9 +274,24 @@ gs_shell_details_refresh_screenshots (GsShellDetails *shell_details)
        gs_screenshot_image_set_cachedir (GS_SCREENSHOT_IMAGE (ssimg),
                                          g_get_user_cache_dir ());
        gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssimg), ss);
-       gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
-                                     GS_SCREENSHOT_SIZE_LARGE_WIDTH,
-                                     GS_SCREENSHOT_SIZE_LARGE_HEIGHT);
+
+       /* do we have a screenshot of the right size? */
+       tmp = gs_screenshot_get_url (ss,
+                                    GS_SCREENSHOT_SIZE_LARGE_WIDTH,
+                                    GS_SCREENSHOT_SIZE_LARGE_HEIGHT,
+                                    &provided);
+       if (tmp != NULL) {
+               gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
+                                             GS_SCREENSHOT_SIZE_LARGE_WIDTH,
+                                             GS_SCREENSHOT_SIZE_LARGE_HEIGHT);
+       } else {
+               /* use any size provided */
+               gs_screenshot_get_url (ss, G_MAXUINT, G_MAXUINT, &provided);
+               gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
+                                             provided.width,
+                                             provided.height);
+       }
+
        gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg), NULL);
        gtk_box_pack_start (GTK_BOX (widget), ssimg, FALSE, FALSE, 0);
        gtk_widget_set_visible (ssimg, TRUE);
diff --git a/src/plugins/gs-plugin-appstream.c b/src/plugins/gs-plugin-appstream.c
index 6c78826..a27826b 100644
--- a/src/plugins/gs-plugin-appstream.c
+++ b/src/plugins/gs-plugin-appstream.c
@@ -431,8 +431,6 @@ gs_plugin_refine_add_screenshots (GsApp *app, AppstreamApp *item)
                                              ss_kind == APPSTREAM_SCREENSHOT_KIND_DEFAULT);
                for (j = 0; j < images_as->len; j++) {
                        im = g_ptr_array_index (images_as, j);
-                       if (appstream_image_get_kind (im) == APPSTREAM_IMAGE_KIND_SOURCE)
-                               continue;
                        gs_screenshot_add_image (screenshot,
                                                 appstream_image_get_url (im),
                                                 appstream_image_get_width (im),


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