[gimp] plug-ins: remove the hardcoded compat enums from script-fu and pygimp
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: remove the hardcoded compat enums from script-fu and pygimp
- Date: Mon, 9 Jan 2017 15:01:22 +0000 (UTC)
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]