[gimp] libgimp: do not assume there are selected layers.



commit 3edcaa4baa709e375d34cae86f90d4a720c095ea
Author: Jehan <jehan girinstud io>
Date:   Sat Jun 27 18:11:40 2020 +0200

    libgimp: do not assume there are selected layers.
    
    The list of selected layers may be empty, which doesn't matter much
    because we don't actually do much with this list in current export code.
    In the code modified in this commit, we were only using existing layers
    to set the type of a new layer (which seems very useless right now as
    anyway the layer type has to be the image base type with or without
    alpha, so a with_alpha boolean parameter would be just as good, unless
    we plan to support different color model layers in a same image).

 libgimp/gimpexport.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)
---
diff --git a/libgimp/gimpexport.c b/libgimp/gimpexport.c
index c54e2c5834..1aa8a4de63 100644
--- a/libgimp/gimpexport.c
+++ b/libgimp/gimpexport.c
@@ -86,17 +86,33 @@ export_merge (GimpImage  *image,
 
   if (nvisible <= 1)
     {
-      GimpLayer *transp;
+      GimpLayer     *transp;
+      GimpImageType  layer_type;
 
       /* if there is only one (or zero) visible layer, add a new
        * transparent layer that has the same size as the canvas.  The
        * merge that follows will ensure that the offset, opacity and
        * size are correct
        */
+      switch (gimp_image_base_type (image))
+        {
+        case GIMP_RGB:
+          layer_type = GIMP_RGBA_IMAGE;
+          break;
+        case GIMP_GRAY:
+          layer_type = GIMP_GRAYA_IMAGE;
+          break;
+        case GIMP_INDEXED:
+          layer_type = GIMP_INDEXEDA_IMAGE;
+          break;
+        default:
+          /* In case we add a new type in future. */
+          g_return_if_reached ();
+        }
       transp = gimp_layer_new (image, "-",
                                gimp_image_width (image),
                                gimp_image_height (image),
-                               gimp_drawable_type ((*drawables)->data) | 1,
+                               layer_type,
                                100.0, GIMP_LAYER_MODE_NORMAL);
       gimp_image_insert_layer (image, transp, NULL, 1);
       gimp_selection_none (image);
@@ -137,7 +153,7 @@ export_merge (GimpImage  *image,
   /* remove any remaining (invisible) layers */
   for (iter = layers; iter; iter = iter->next)
     {
-      if (iter->data != (*drawables)->data)
+      if (! g_list_find (*drawables, iter->data))
         gimp_image_remove_layer (image, iter->data);
     }
 


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