[gimp/gimp-2-10] app: handle GimpImageViewable in GimpViewRendererImage



commit 61535e0756cde79ceadb85185eb3a6d80bb54acf
Author: Ell <ell_se yahoo com>
Date:   Wed Sep 4 17:20:00 2019 +0300

    app: handle GimpImageViewable in GimpViewRendererImage
    
    Allow using a GimpImageViewable as the source for a
    GimpViewRenderer, by allowing GimpViewRendererImage to handle this
    type of viewables.

 app/widgets/gimpviewrenderer-utils.c |  4 +++-
 app/widgets/gimpviewrendererimage.c  | 28 +++++++++++++++++++++++-----
 2 files changed, 26 insertions(+), 6 deletions(-)
---
diff --git a/app/widgets/gimpviewrenderer-utils.c b/app/widgets/gimpviewrenderer-utils.c
index 9034cf4f49..d2d7ee5026 100644
--- a/app/widgets/gimpviewrenderer-utils.c
+++ b/app/widgets/gimpviewrenderer-utils.c
@@ -30,6 +30,7 @@
 #include "core/gimpgradient.h"
 #include "core/gimpimage.h"
 #include "core/gimpimagefile.h"
+#include "core/gimpimageviewable.h"
 #include "core/gimplayer.h"
 #include "core/gimppalette.h"
 
@@ -62,7 +63,8 @@ gimp_view_renderer_type_from_viewable_type (GType viewable_type)
     {
       type = GIMP_TYPE_VIEW_RENDERER_BUFFER;
     }
-  else if (g_type_is_a (viewable_type, GIMP_TYPE_IMAGE))
+  else if (g_type_is_a (viewable_type, GIMP_TYPE_IMAGE) ||
+           g_type_is_a (viewable_type, GIMP_TYPE_IMAGE_VIEWABLE))
     {
       type = GIMP_TYPE_VIEW_RENDERER_IMAGE;
     }
diff --git a/app/widgets/gimpviewrendererimage.c b/app/widgets/gimpviewrendererimage.c
index 04a7135907..6c619e0f96 100644
--- a/app/widgets/gimpviewrendererimage.c
+++ b/app/widgets/gimpviewrendererimage.c
@@ -28,6 +28,7 @@
 #include "widgets-types.h"
 
 #include "core/gimpimage.h"
+#include "core/gimpimageviewable.h"
 #include "core/gimptempbuf.h"
 
 #include "gimpviewrendererimage.h"
@@ -62,8 +63,26 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer,
                                  GtkWidget        *widget)
 {
   GimpViewRendererImage *rendererimage = GIMP_VIEW_RENDERER_IMAGE (renderer);
-  GimpImage             *image         = GIMP_IMAGE (renderer->viewable);
+  GimpImage             *image;
   const gchar           *icon_name;
+  gint                   width;
+  gint                   height;
+
+  if (GIMP_IS_IMAGE (renderer->viewable))
+    {
+      image = GIMP_IMAGE (renderer->viewable);
+    }
+  else if (GIMP_IS_IMAGE_VIEWABLE (renderer->viewable))
+    {
+      image = gimp_image_viewable_get_image (
+        GIMP_IMAGE_VIEWABLE (renderer->viewable));
+    }
+  else
+    {
+      g_return_if_reached ();
+    }
+
+  gimp_viewable_get_size (renderer->viewable, &width, &height);
 
   /* The conditions checked here are mostly a hack to hide the fact that
    * we are creating the channel preview from the image preview and turning
@@ -82,8 +101,8 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer,
 
       gimp_image_get_resolution (image, &xres, &yres);
 
-      gimp_viewable_calc_preview_size (gimp_image_get_width  (image),
-                                       gimp_image_get_height (image),
+      gimp_viewable_calc_preview_size (width,
+                                       height,
                                        renderer->width,
                                        renderer->height,
                                        renderer->dot_for_dot,
@@ -99,8 +118,7 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer,
 
           temp_buf = gimp_viewable_get_new_preview (renderer->viewable,
                                                     renderer->context,
-                                                    gimp_image_get_width  (image),
-                                                    gimp_image_get_height (image));
+                                                    width, height);
 
           if (temp_buf)
             {


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