[gimp] plug-ins: remove the hardcoded compat enums from script-fu and pygimp



commit 0a0acc9f2ac98c10291fa4077d8cd4be71beda93
Author: Michael Natterer <mitch gimp org>
Date:   Mon Jan 9 16:00:10 2017 +0100

    plug-ins: remove the hardcoded compat enums from script-fu and pygimp
    
    Instead, simply look them up via the type system, and register their
    values like they were normal enums.

 plug-ins/pygimp/gimpenumsmodule.c   |  151 ++++-------------------------------
 plug-ins/script-fu/scheme-wrapper.c |  140 ++++++++------------------------
 2 files changed, 50 insertions(+), 241 deletions(-)
---
diff --git a/plug-ins/pygimp/gimpenumsmodule.c b/plug-ins/pygimp/gimpenumsmodule.c
index 177e49d..e1fbee5 100644
--- a/plug-ins/pygimp/gimpenumsmodule.c
+++ b/plug-ins/pygimp/gimpenumsmodule.c
@@ -89,135 +89,6 @@ add_misc_enums(PyObject *m)
 static void
 add_compat_enums(PyObject *m)
 {
-    PyModule_AddIntConstant(m, "ADD_WHITE_MASK",
-                            GIMP_ADD_MASK_WHITE);
-    PyModule_AddIntConstant(m, "ADD_BLACK_MASK",
-                            GIMP_ADD_MASK_BLACK);
-    PyModule_AddIntConstant(m, "ADD_ALPHA_MASK",
-                            GIMP_ADD_MASK_ALPHA);
-    PyModule_AddIntConstant(m, "ADD_ALPHA_TRANSFER_MASK",
-                            GIMP_ADD_MASK_ALPHA_TRANSFER);
-    PyModule_AddIntConstant(m, "ADD_SELECTION_MASK",
-                            GIMP_ADD_MASK_SELECTION);
-    PyModule_AddIntConstant(m, "ADD_COPY_MASK",
-                            GIMP_ADD_MASK_COPY);
-    PyModule_AddIntConstant(m, "ADD_CHANNEL_MASK",
-                            GIMP_ADD_MASK_CHANNEL);
-
-    PyModule_AddIntConstant(m, "FG_BG_RGB_MODE",
-                            GIMP_BLEND_FG_BG_RGB);
-    PyModule_AddIntConstant(m, "FG_BG_HSV_MODE",
-                            GIMP_BLEND_FG_BG_HSV);
-    PyModule_AddIntConstant(m, "FG_TRANSPARENT_MODE",
-                            GIMP_BLEND_FG_TRANSPARENT);
-    PyModule_AddIntConstant(m, "CUSTOM_MODE",
-                            GIMP_BLEND_CUSTOM);
-
-    PyModule_AddIntConstant(m, "FG_BUCKET_FILL",
-                            GIMP_BUCKET_FILL_FG);
-    PyModule_AddIntConstant(m, "BG_BUCKET_FILL",
-                            GIMP_BUCKET_FILL_BG);
-    PyModule_AddIntConstant(m, "PATTERN_BUCKET_FILL",
-                            GIMP_BUCKET_FILL_PATTERN);
-
-    PyModule_AddIntConstant(m, "BLUR_CONVOLVE",
-                            GIMP_CONVOLVE_BLUR);
-    PyModule_AddIntConstant(m, "SHARPEN_CONVOLVE",
-                            GIMP_CONVOLVE_SHARPEN);
-
-    PyModule_AddIntConstant(m, "IMAGE_CLONE",
-                            GIMP_CLONE_IMAGE);
-    PyModule_AddIntConstant(m, "PATTERN_CLONE",
-                            GIMP_CLONE_PATTERN);
-
-    PyModule_AddIntConstant(m, "FOREGROUND_FILL",
-                            GIMP_FILL_FOREGROUND);
-    PyModule_AddIntConstant(m, "BACKGROUND_FILL",
-                            GIMP_FILL_BACKGROUND);
-    PyModule_AddIntConstant(m, "WHITE_FILL",
-                            GIMP_FILL_WHITE);
-    PyModule_AddIntConstant(m, "TRANSPARENT_FILL",
-                            GIMP_FILL_TRANSPARENT);
-    PyModule_AddIntConstant(m, "PATTERN_FILL",
-                            GIMP_FILL_PATTERN);
-
-    PyModule_AddIntConstant(m, "DODGE",
-                            GIMP_DODGE_BURN_TYPE_DODGE);
-    PyModule_AddIntConstant(m, "BURN",
-                            GIMP_DODGE_BURN_TYPE_BURN);
-
-    PyModule_AddIntConstant(m, "SHADOWS",
-                            GIMP_TRANSFER_SHADOWS);
-    PyModule_AddIntConstant(m, "MIDTONES",
-                            GIMP_TRANSFER_MIDTONES);
-    PyModule_AddIntConstant(m, "HIGHLIGHTS",
-                            GIMP_TRANSFER_HIGHLIGHTS);
-
-    PyModule_AddIntConstant(m, "DESATURATE_LUMINOSITY",
-                            GIMP_DESATURATE_LUMA);
-
-    PyModule_AddIntConstant (m, "ALL_HUES",
-                             GIMP_HUE_RANGE_ALL);
-    PyModule_AddIntConstant (m, "RED_HUES",
-                             GIMP_HUE_RANGE_RED);
-    PyModule_AddIntConstant (m, "YELLOW_HUES",
-                             GIMP_HUE_RANGE_YELLOW);
-    PyModule_AddIntConstant (m, "GREEN_HUES",
-                             GIMP_HUE_RANGE_GREEN);
-    PyModule_AddIntConstant (m, "CYAN_HUES",
-                             GIMP_HUE_RANGE_CYAN);
-    PyModule_AddIntConstant (m, "BLUE_HUES",
-                             GIMP_HUE_RANGE_BLUE);
-    PyModule_AddIntConstant (m, "MAGENTA_HUES",
-                             GIMP_HUE_RANGE_MAGENTA);
-
-    PyModule_AddIntConstant (m, "NORMAL_MODE",
-                             GIMP_LAYER_MODE_NORMAL);
-    PyModule_AddIntConstant (m, "DISSOLVE_MODE",
-                             GIMP_LAYER_MODE_DISSOLVE);
-    PyModule_AddIntConstant (m, "BEHIND_MODE",
-                             GIMP_LAYER_MODE_BEHIND);
-    PyModule_AddIntConstant (m, "MULTIPLY_MODE",
-                             GIMP_LAYER_MODE_MULTIPLY_LEGACY);
-    PyModule_AddIntConstant (m, "SCREEN_MODE",
-                             GIMP_LAYER_MODE_SCREEN_LEGACY);
-    PyModule_AddIntConstant (m, "OVERLAY_MODE",
-                             GIMP_LAYER_MODE_OVERLAY_LEGACY);
-    PyModule_AddIntConstant (m, "DIFFERENCE_MODE",
-                             GIMP_LAYER_MODE_DIFFERENCE_LEGACY);
-    PyModule_AddIntConstant (m, "ADDITION_MODE",
-                             GIMP_LAYER_MODE_ADDITION_LEGACY);
-    PyModule_AddIntConstant (m, "SUBTRACT_MODE",
-                             GIMP_LAYER_MODE_SUBTRACT_LEGACY);
-    PyModule_AddIntConstant (m, "DARKEN_ONLY_MODE",
-                             GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY);
-    PyModule_AddIntConstant (m, "LIGHTEN_ONLY_MODE",
-                             GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY);
-    PyModule_AddIntConstant (m, "HUE_MODE",
-                             GIMP_LAYER_MODE_HSV_HUE_LEGACY);
-    PyModule_AddIntConstant (m, "SATURATION_MODE",
-                             GIMP_LAYER_MODE_HSV_SATURATION_LEGACY);
-    PyModule_AddIntConstant (m, "COLOR_MODE",
-                             GIMP_LAYER_MODE_HSV_COLOR_LEGACY);
-    PyModule_AddIntConstant (m, "VALUE_MODE",
-                             GIMP_LAYER_MODE_HSV_VALUE_LEGACY);
-    PyModule_AddIntConstant (m, "DIVIDE_MODE",
-                             GIMP_LAYER_MODE_DIVIDE_LEGACY);
-    PyModule_AddIntConstant (m, "DODGE_MODE",
-                             GIMP_LAYER_MODE_DODGE_LEGACY);
-    PyModule_AddIntConstant (m, "BURN_MODE",
-                             GIMP_LAYER_MODE_BURN_LEGACY);
-    PyModule_AddIntConstant (m, "HARDLIGHT_MODE",
-                             GIMP_LAYER_MODE_HARDLIGHT_LEGACY);
-    PyModule_AddIntConstant (m, "SOFTLIGHT_MODE",
-                             GIMP_LAYER_MODE_SOFTLIGHT_LEGACY);
-    PyModule_AddIntConstant (m, "GRAIN_EXTRACT_MODE",
-                             GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY);
-    PyModule_AddIntConstant (m, "GRAIN_MERGE_MODE",
-                             GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY);
-    PyModule_AddIntConstant (m, "COLOR_ERASE_MODE",
-                             GIMP_LAYER_MODE_COLOR_ERASE);
-
     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_RGB",
                             GIMP_EXPORT_CAN_HANDLE_RGB);
     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_GRAY",
@@ -248,16 +119,26 @@ add_compat_enums(PyObject *m)
 static void
 add_registered_enums(PyObject *m)
 {
-    int num_names, i;
-    const char **names;
+    gint          num_names, i;
+    const gchar **names;
+    GQuark        quark = g_quark_from_static_string ("gimp-compat-enum");
 
-    names = gimp_enums_get_type_names(&num_names);
+    names = gimp_enums_get_type_names (&num_names);
 
-    pyg_enum_add_constants(m, GIMP_TYPE_CHECK_SIZE, "GIMP_");
-    pyg_enum_add_constants(m, GIMP_TYPE_CHECK_TYPE, "GIMP_");
+    pyg_enum_add_constants (m, GIMP_TYPE_CHECK_SIZE, "GIMP_");
+    pyg_enum_add_constants (m, GIMP_TYPE_CHECK_TYPE, "GIMP_");
 
     for (i = 0; i < num_names; i++)
-        pyg_enum_add_constants(m, g_type_from_name(names[i]), "GIMP_");
+        {
+            GType enum_type = g_type_from_name (names[i]);
+
+            pyg_enum_add_constants (m, enum_type, "GIMP_");
+
+            enum_type = (GType) g_type_get_qdata (enum_type, quark);
+
+            if (enum_type)
+                pyg_enum_add_constants (m, enum_type, "GIMP_");
+        }
 }
 
 
diff --git a/plug-ins/script-fu/scheme-wrapper.c b/plug-ins/script-fu/scheme-wrapper.c
index 746efe9..53f4f49 100644
--- a/plug-ins/script-fu/scheme-wrapper.c
+++ b/plug-ins/script-fu/scheme-wrapper.c
@@ -50,6 +50,8 @@
 #undef cons
 
 static void     ts_init_constants                (scheme    *sc);
+static void     ts_init_enum                     (scheme    *sc,
+                                                  GType      enum_type);
 static void     ts_init_procedures               (scheme    *sc,
                                                   gboolean   register_scipts);
 static void     convert_string                   (gchar     *str);
@@ -125,87 +127,6 @@ static const NamedConstant const script_constants[] =
   { NULL, 0 }
 };
 
-/* The following constants are deprecated. They are included to keep
- * backwards compatibility with older scripts used with older versions
- * of GIMP.
- */
-static const NamedConstant const old_constants[] =
-{
-  /*  the following enums got cleaned up with properly named values in 2.10  */
-
-  { "ADD-WHITE-MASK",          GIMP_ADD_MASK_WHITE          },
-  { "ADD-BLACK-MASK",          GIMP_ADD_MASK_BLACK          },
-  { "ADD-ALPHA-MASK",          GIMP_ADD_MASK_ALPHA          },
-  { "ADD-ALPHA-TRANSFER-MASK", GIMP_ADD_MASK_ALPHA_TRANSFER },
-  { "ADD-SELECTION-MASK",      GIMP_ADD_MASK_SELECTION      },
-  { "ADD-COPY-MASK",           GIMP_ADD_MASK_COPY           },
-  { "ADD-CHANNEL-MASK",        GIMP_ADD_MASK_CHANNEL        },
-
-  { "FG-BG-RGB-MODE",          GIMP_BLEND_FG_BG_RGB      },
-  { "FG-BG-HSV-MODE",          GIMP_BLEND_FG_BG_HSV      },
-  { "FG-TRANSPARENT-MODE",     GIMP_BLEND_FG_TRANSPARENT },
-  { "CUSTOM-MODE",             GIMP_BLEND_CUSTOM         },
-
-  { "FG-BUCKET-FILL",          GIMP_BUCKET_FILL_FG      },
-  { "BG-BUCKET-FILL",          GIMP_BUCKET_FILL_BG      },
-  { "PATTERN-BUCKET-FILL",     GIMP_BUCKET_FILL_PATTERN },
-
-  { "BLUR-CONVOLVE",           GIMP_CONVOLVE_BLUR    },
-  { "SHARPEN-CONVOLVE",        GIMP_CONVOLVE_SHARPEN },
-
-  { "IMAGE-CLONE",             GIMP_CLONE_IMAGE   },
-  { "PATTERN-CLONE",           GIMP_CLONE_PATTERN },
-
-  { "FOREGROUND-FILL",         GIMP_FILL_FOREGROUND  },
-  { "BACKGROUND-FILL",         GIMP_FILL_BACKGROUND  },
-  { "WHITE-FILL",              GIMP_FILL_WHITE       },
-  { "TRANSPARENT-FILL",        GIMP_FILL_TRANSPARENT },
-  { "PATTERN-FILL",            GIMP_FILL_PATTERN     },
-
-  { "DODGE",                   GIMP_DODGE_BURN_TYPE_DODGE },
-  { "BURN",                    GIMP_DODGE_BURN_TYPE_BURN  },
-
-  { "SHADOWS",                 GIMP_TRANSFER_SHADOWS    },
-  { "MIDTONES",                GIMP_TRANSFER_MIDTONES   },
-  { "HIGHLIGHTS",              GIMP_TRANSFER_HIGHLIGHTS },
-
-  { "DESATURATE-LUMINOSITY",   GIMP_DESATURATE_LUMA },
-
-  { "ALL-HUES",     GIMP_HUE_RANGE_ALL     },
-  { "RED-HUES",     GIMP_HUE_RANGE_RED     },
-  { "YELLOW-HUES",  GIMP_HUE_RANGE_YELLOW  },
-  { "GREEN-HUES",   GIMP_HUE_RANGE_GREEN   },
-  { "CYAN-HUES",    GIMP_HUE_RANGE_CYAN    },
-  { "BLUE-HUES",    GIMP_HUE_RANGE_BLUE    },
-  { "MAGENTA-HUES", GIMP_HUE_RANGE_MAGENTA },
-
-  { "NORMAL-MODE",             GIMP_LAYER_MODE_NORMAL                },
-  { "DISSOLVE-MODE",           GIMP_LAYER_MODE_DISSOLVE              },
-  { "BEHIND-MODE",             GIMP_LAYER_MODE_BEHIND                },
-  { "MULTIPLY-MODE",           GIMP_LAYER_MODE_MULTIPLY_LEGACY       },
-  { "SCREEN-MODE",             GIMP_LAYER_MODE_SCREEN_LEGACY         },
-  { "OVERLAY-MODE",            GIMP_LAYER_MODE_OVERLAY_LEGACY        },
-  { "DIFFERENCE-MODE",         GIMP_LAYER_MODE_DIFFERENCE_LEGACY     },
-  { "ADDITION-MODE",           GIMP_LAYER_MODE_ADDITION_LEGACY       },
-  { "SUBTRACT-MODE",           GIMP_LAYER_MODE_SUBTRACT_LEGACY       },
-  { "DARKEN-ONLY-MODE",        GIMP_LAYER_MODE_DARKEN_ONLY_LEGACY    },
-  { "LIGHTEN-ONLY-MODE",       GIMP_LAYER_MODE_LIGHTEN_ONLY_LEGACY   },
-  { "HUE-MODE",                GIMP_LAYER_MODE_HSV_HUE_LEGACY        },
-  { "SATURATION-MODE",         GIMP_LAYER_MODE_HSV_SATURATION_LEGACY },
-  { "COLOR-MODE",              GIMP_LAYER_MODE_HSV_COLOR_LEGACY      },
-  { "VALUE-MODE",              GIMP_LAYER_MODE_HSV_VALUE_LEGACY      },
-  { "DIVIDE-MODE",             GIMP_LAYER_MODE_DIVIDE_LEGACY         },
-  { "DODGE-MODE",              GIMP_LAYER_MODE_DODGE_LEGACY          },
-  { "BURN-MODE",               GIMP_LAYER_MODE_BURN_LEGACY           },
-  { "HARDLIGHT-MODE",          GIMP_LAYER_MODE_HARDLIGHT_LEGACY      },
-  { "SOFTLIGHT-MODE",          GIMP_LAYER_MODE_SOFTLIGHT_LEGACY      },
-  { "GRAIN-EXTRACT-MODE",      GIMP_LAYER_MODE_GRAIN_EXTRACT_LEGACY  },
-  { "GRAIN-MERGE-MODE",        GIMP_LAYER_MODE_GRAIN_MERGE_LEGACY    },
-  { "COLOR-ERASE-MODE",        GIMP_LAYER_MODE_COLOR_ERASE           },
-
-  { NULL, 0 }
-};
-
 
 static scheme sc;
 
@@ -360,6 +281,7 @@ ts_init_constants (scheme *sc)
   gint          n_enum_type_names;
   gint          i;
   pointer       symbol;
+  GQuark        quark;
 
   symbol = sc->vptr->mk_symbol (sc, "gimp-directory");
   sc->vptr->scheme_define (sc, sc->global_env, symbol,
@@ -387,33 +309,19 @@ ts_init_constants (scheme *sc)
   sc->vptr->setimmutable (symbol);
 
   enum_type_names = gimp_enums_get_type_names (&n_enum_type_names);
+  quark           = g_quark_from_static_string ("gimp-compat-enum");
 
   for (i = 0; i < n_enum_type_names; i++)
     {
       const gchar *enum_name  = enum_type_names[i];
       GType        enum_type  = g_type_from_name (enum_name);
-      GEnumClass  *enum_class = g_type_class_ref (enum_type);
-      GEnumValue  *value;
 
-      for (value = enum_class->values; value->value_name; value++)
-        {
-          if (g_str_has_prefix (value->value_name, "GIMP_"))
-            {
-              gchar *scheme_name;
-
-              scheme_name = g_strdup (value->value_name + strlen ("GIMP_"));
-              convert_string (scheme_name);
-
-              symbol = sc->vptr->mk_symbol (sc, scheme_name);
-              sc->vptr->scheme_define (sc, sc->global_env, symbol,
-                                       sc->vptr->mk_integer (sc, value->value));
-              sc->vptr->setimmutable (symbol);
+      ts_init_enum (sc, enum_type);
 
-              g_free (scheme_name);
-            }
-        }
+      enum_type = (GType) g_type_get_qdata (enum_type, quark);
 
-      g_type_class_unref (enum_class);
+      if (enum_type)
+        ts_init_enum (sc, enum_type);
     }
 
   /* Constants used in the register block of scripts */
@@ -453,15 +361,35 @@ ts_init_constants (scheme *sc)
   sc->vptr->scheme_define (sc, sc->global_env, symbol,
                            sc->vptr->mk_string (sc, gimp_plug_in_directory ()));
   sc->vptr->setimmutable (symbol);
+}
 
-  for (i = 0; old_constants[i].name != NULL; ++i)
+static void
+ts_init_enum (scheme *sc,
+              GType   enum_type)
+{
+  GEnumClass  *enum_class = g_type_class_ref (enum_type);
+  GEnumValue  *value;
+
+  for (value = enum_class->values; value->value_name; value++)
     {
-      symbol = sc->vptr->mk_symbol (sc, old_constants[i].name);
-      sc->vptr->scheme_define (sc, sc->global_env, symbol,
-                               sc->vptr->mk_integer (sc,
-                                                     old_constants[i].value));
-      sc->vptr->setimmutable (symbol);
+      if (g_str_has_prefix (value->value_name, "GIMP_"))
+        {
+          gchar   *scheme_name;
+          pointer  symbol;
+
+          scheme_name = g_strdup (value->value_name + strlen ("GIMP_"));
+          convert_string (scheme_name);
+
+          symbol = sc->vptr->mk_symbol (sc, scheme_name);
+          sc->vptr->scheme_define (sc, sc->global_env, symbol,
+                                   sc->vptr->mk_integer (sc, value->value));
+          sc->vptr->setimmutable (symbol);
+
+          g_free (scheme_name);
+        }
     }
+
+  g_type_class_unref (enum_class);
 }
 
 static void


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