[gimp] app: use a blacklist instead of whitelist for gegl op categories
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: use a blacklist instead of whitelist for gegl op categories
- Date: Wed, 17 Mar 2010 23:53:13 +0000 (UTC)
commit 63824d715386fe126c03d38edb42702b3bd42b08
Author: �yvind Kolås <pippin gimp org>
Date: Wed Mar 17 23:39:46 2010 +0000
app: use a blacklist instead of whitelist for gegl op categories
The set of core GEGL ops that GIMP does not want to see falls into a
well defined set of categories. Blacklisting allows freedom in choosing
new and better categorisation for GEGL ops.
app/tools/gimpgegltool.c | 104 ++++++++++++++++++++++++++++------------------
1 files changed, 63 insertions(+), 41 deletions(-)
---
diff --git a/app/tools/gimpgegltool.c b/app/tools/gimpgegltool.c
index 96f63ce..1d8edc5 100644
--- a/app/tools/gimpgegltool.c
+++ b/app/tools/gimpgegltool.c
@@ -231,24 +231,63 @@ gimp_gegl_tool_map (GimpImageMapTool *image_map_tool)
}
static gboolean
-gimp_gegl_tool_operation_blacklisted (const gchar *name)
+gimp_gegl_tool_operation_blacklisted (const gchar *name,
+ const gchar *categories_str)
{
- static const gchar * const blacklist[] =
+ gchar **categories;
+ static const gchar * const category_blacklist[] =
+ {
+ "compositors",
+ "core",
+ "debug",
+ "hidden",
+ "input",
+ "output",
+ "programming",
+ "render",
+ "transform",
+ "video"
+ };
+ static const gchar * const name_blacklist[] =
{
"gegl:convert-format",
"gegl:introspect",
"gegl:path",
"gegl:text",
- "gimp-"
+ "gegl:layer",
+ "gimp-",
+ "gimp:"
};
gint i;
- for (i = 0; i < G_N_ELEMENTS (blacklist); i++)
+ /* Operations with no name are abstract base classes */
+ if (!name)
+ return TRUE;
+
+ for (i = 0; i < G_N_ELEMENTS (name_blacklist); i++)
{
- if (g_str_has_prefix (name, blacklist[i]))
+ if (g_str_has_prefix (name, name_blacklist[i]))
return TRUE;
}
+
+ if (!categories_str)
+ return FALSE;
+
+ categories = g_strsplit (categories_str, ":", 0);
+
+ for (i = 0; i < G_N_ELEMENTS (category_blacklist); i++)
+ {
+ gint j;
+ for (j = 0; categories[j]; j++)
+ if (g_str_equal (categories[j], category_blacklist[i]))
+ {
+ g_strfreev (categories);
+ return TRUE;
+ }
+ }
+
+ g_strfreev (categories);
return FALSE;
}
@@ -270,14 +309,9 @@ gimp_get_subtype_classes (GType type,
klass = GEGL_OPERATION_CLASS (g_type_class_ref (type));
ops = g_type_children (type, &n_ops);
- /* only add classes which have a name, this avoids
- * the abstract base classes
- */
- if (klass->name)
- {
- if (! gimp_gegl_tool_operation_blacklisted (klass->name))
- classes = g_list_prepend (classes, klass);
- }
+ if (! gimp_gegl_tool_operation_blacklisted (klass->name,
+ klass->categories))
+ classes = g_list_prepend (classes, klass);
for (i = 0; i < n_ops; i++)
classes = gimp_get_subtype_classes (ops[i], classes);
@@ -346,37 +380,25 @@ gimp_gegl_tool_dialog (GimpImageMapTool *image_map_tool)
for (iter = opclasses; iter; iter = iter->next)
{
GeglOperationClass *opclass = GEGL_OPERATION_CLASS (iter->data);
+ const gchar *stock_id;
+ const gchar *label;
- if (strstr (opclass->categories, "color") ||
- strstr (opclass->categories, "enhance") ||
- strstr (opclass->categories, "misc") ||
- strstr (opclass->categories, "blur") ||
- strstr (opclass->categories, "edge") ||
- strstr (opclass->categories, "render"))
+ if (g_str_has_prefix (opclass->name, "gegl:"))
+ {
+ label = opclass->name + strlen ("gegl:");
+ stock_id = GIMP_STOCK_GEGL;
+ }
+ else
{
- const gchar *stock_id;
- const gchar *label;
-
- if (g_str_has_prefix (opclass->name, "gimp:"))
- continue;
-
- if (g_str_has_prefix (opclass->name, "gegl:"))
- {
- label = opclass->name + strlen ("gegl:");
- stock_id = GIMP_STOCK_GEGL;
- }
- else
- {
- label = opclass->name;
- stock_id = NULL;
- }
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COLUMN_NAME, opclass->name,
- COLUMN_LABEL, label,
- COLUMN_STOCK_ID, stock_id,
- -1);
+ label = opclass->name;
+ stock_id = NULL;
}
+
+ gtk_list_store_insert_with_values (store, NULL, -1,
+ COLUMN_NAME, opclass->name,
+ COLUMN_LABEL, label,
+ COLUMN_STOCK_ID, stock_id,
+ -1);
}
g_list_free (opclasses);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]