[gimp] pdb: don't allow to convert non-u8 images to indexed



commit 2857c1c031678d52d88c7d880efa7147042c8989
Author: Michael Natterer <mitch gimp org>
Date:   Wed Apr 25 17:39:49 2012 +0200

    pdb: don't allow to convert non-u8 images to indexed

 app/pdb/convert-cmds.c       |    3 ++-
 app/pdb/gimppdb-utils.c      |   23 +++++++++++++++++++++++
 app/pdb/gimppdb-utils.h      |    4 ++++
 tools/pdbgen/pdb/convert.pdb |    3 ++-
 4 files changed, 31 insertions(+), 2 deletions(-)
---
diff --git a/app/pdb/convert-cmds.c b/app/pdb/convert-cmds.c
index 8a316f4..ca63696 100644
--- a/app/pdb/convert-cmds.c
+++ b/app/pdb/convert-cmds.c
@@ -129,7 +129,8 @@ image_convert_indexed_invoker (GimpProcedure      *procedure,
     {
       GimpPalette *pal = NULL;
 
-      if (gimp_pdb_image_is_not_base_type (image, GIMP_INDEXED, error) &&
+      if (gimp_pdb_image_is_not_base_type (image, GIMP_INDEXED, error)   &&
+          gimp_pdb_image_has_precision (image, GIMP_PRECISION_U8, error) &&
           gimp_item_stack_is_flat (GIMP_ITEM_STACK (gimp_image_get_layers (image))))
         {
           switch (palette_type)
diff --git a/app/pdb/gimppdb-utils.c b/app/pdb/gimppdb-utils.c
index 1742f3b..245db60 100644
--- a/app/pdb/gimppdb-utils.c
+++ b/app/pdb/gimppdb-utils.c
@@ -626,6 +626,29 @@ gimp_pdb_image_is_not_base_type (GimpImage          *image,
   return FALSE;
 }
 
+gboolean
+gimp_pdb_image_has_precision (GimpImage      *image,
+                              GimpPrecision   precision,
+                              GError        **error)
+{
+  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  if (gimp_image_get_precision (image) == precision)
+    return TRUE;
+
+  g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_ERROR_INVALID_ARGUMENT,
+               _("Image '%s' (%d) has precision '%s', "
+                 "but an image of precision '%s' is expected"),
+               gimp_image_get_display_name (image),
+               gimp_image_get_ID (image),
+               gimp_pdb_enum_value_get_nick (GIMP_TYPE_PRECISION,
+                                             gimp_image_get_precision (image)),
+               gimp_pdb_enum_value_get_nick (GIMP_TYPE_PRECISION, precision));
+
+  return FALSE;
+}
+
 GimpStroke *
 gimp_pdb_get_vectors_stroke (GimpVectors  *vectors,
                              gint          stroke_ID,
diff --git a/app/pdb/gimppdb-utils.h b/app/pdb/gimppdb-utils.h
index 1fc7370..d7efe6f 100644
--- a/app/pdb/gimppdb-utils.h
+++ b/app/pdb/gimppdb-utils.h
@@ -88,6 +88,10 @@ gboolean        gimp_pdb_image_is_not_base_type (GimpImage          *image,
                                                  GimpImageBaseType   type,
                                                  GError            **error);
 
+gboolean        gimp_pdb_image_has_precision    (GimpImage          *image,
+                                                 GimpPrecision       precision,
+                                                 GError            **error);
+
 GimpStroke    * gimp_pdb_get_vectors_stroke     (GimpVectors        *vectors,
                                                  gint                stroke_ID,
                                                  gboolean            writable,
diff --git a/tools/pdbgen/pdb/convert.pdb b/tools/pdbgen/pdb/convert.pdb
index a88cb12..d660ca9 100644
--- a/tools/pdbgen/pdb/convert.pdb
+++ b/tools/pdbgen/pdb/convert.pdb
@@ -130,7 +130,8 @@ HELP
 {
   GimpPalette *pal = NULL;
 
-  if (gimp_pdb_image_is_not_base_type (image, GIMP_INDEXED, error) &&
+  if (gimp_pdb_image_is_not_base_type (image, GIMP_INDEXED, error)   &&
+      gimp_pdb_image_has_precision (image, GIMP_PRECISION_U8, error) &&
       gimp_item_stack_is_flat (GIMP_ITEM_STACK (gimp_image_get_layers (image))))
     {
       switch (palette_type)



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