[gimp] app: add new XCF property PROP_FLOAT_COLOR



commit 10360c9e130507a3cd74778dc1cc0ff06d8393f3
Author: Michael Natterer <mitch gimp org>
Date:   Fri Mar 24 22:35:57 2017 +0100

    app: add new XCF property PROP_FLOAT_COLOR
    
    We were still saving channel colors in 8 bit, this additionally
    saves/loads the color as float values. Still save the old PROP_COLOR
    for compatibility.

 app/xcf/xcf-load.c    |   10 ++++++++++
 app/xcf/xcf-private.h |    3 ++-
 app/xcf/xcf-save.c    |   34 +++++++++++++++++++++++++++-------
 3 files changed, 39 insertions(+), 8 deletions(-)
---
diff --git a/app/xcf/xcf-load.c b/app/xcf/xcf-load.c
index ab6d287..b73ecaf 100644
--- a/app/xcf/xcf-load.c
+++ b/app/xcf/xcf-load.c
@@ -1404,6 +1404,16 @@ xcf_load_channel_props (XcfInfo      *info,
           }
           break;
 
+        case PROP_FLOAT_COLOR:
+          {
+            gfloat col[3];
+
+            xcf_read_float (info, col, 3);
+
+            gimp_rgb_set (&(*channel)->color, col[0], col[1], col[2]);
+          }
+          break;
+
         case PROP_TATTOO:
           {
             GimpTattoo tattoo;
diff --git a/app/xcf/xcf-private.h b/app/xcf/xcf-private.h
index 8762dbc..aa80876 100644
--- a/app/xcf/xcf-private.h
+++ b/app/xcf/xcf-private.h
@@ -61,7 +61,8 @@ typedef enum
   PROP_COLOR_TAG          = 34,
   PROP_COMPOSITE_MODE     = 35,
   PROP_COMPOSITE_SPACE    = 36,
-  PROP_BLEND_SPACE        = 37
+  PROP_BLEND_SPACE        = 37,
+  PROP_FLOAT_COLOR        = 38
 } PropType;
 
 typedef enum
diff --git a/app/xcf/xcf-save.c b/app/xcf/xcf-save.c
index 4b19393..fd981c0 100644
--- a/app/xcf/xcf-save.c
+++ b/app/xcf/xcf-save.c
@@ -571,7 +571,6 @@ xcf_save_channel_props (XcfInfo      *info,
                         GError      **error)
 {
   GimpParasiteList *parasites;
-  guchar            col[3];
 
   if (channel == gimp_image_get_active_channel (image))
     xcf_check_error (xcf_save_prop (info, image, PROP_ACTIVE_CHANNEL, error));
@@ -595,10 +594,10 @@ xcf_save_channel_props (XcfInfo      *info,
                                   gimp_item_get_lock_position (GIMP_ITEM (channel))));
   xcf_check_error (xcf_save_prop (info, image, PROP_SHOW_MASKED, error,
                                   gimp_channel_get_show_masked (channel)));
-
-  gimp_rgb_get_uchar (&channel->color, &col[0], &col[1], &col[2]);
-  xcf_check_error (xcf_save_prop (info, image, PROP_COLOR, error, col));
-
+  xcf_check_error (xcf_save_prop (info, image, PROP_COLOR, error,
+                                  &channel->color));
+  xcf_check_error (xcf_save_prop (info, image, PROP_FLOAT_COLOR, error,
+                                  &channel->color));
   xcf_check_error (xcf_save_prop (info, image, PROP_TATTOO, error,
                                   gimp_item_get_tattoo (GIMP_ITEM (channel))));
 
@@ -902,14 +901,35 @@ xcf_save_prop (XcfInfo    *info,
 
     case PROP_COLOR:
       {
-        guchar *color = va_arg (args, guchar *);
+        GimpRGB *color = va_arg (args, GimpRGB *);
+        guchar   col[3];
+
+        gimp_rgb_get_uchar (color, &col[0], &col[1], &col[2]);
 
         size = 3;
 
         xcf_write_prop_type_check_error (info, prop_type);
         xcf_write_int32_check_error (info, &size, 1);
 
-        xcf_write_int8_check_error (info, color, 3);
+        xcf_write_int8_check_error (info, col, 3);
+      }
+      break;
+
+    case PROP_FLOAT_COLOR:
+      {
+        GimpRGB *color = va_arg (args, GimpRGB *);
+        gfloat   col[3];
+
+        col[0] = color->r;
+        col[1] = color->g;
+        col[2] = color->b;
+
+        size = 3 * 4;
+
+        xcf_write_prop_type_check_error (info, prop_type);
+        xcf_write_int32_check_error (info, &size, 1);
+
+        xcf_write_float_check_error (info, col, 3);
       }
       break;
 


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