diff --git a/app/core/gimp.c b/app/core/gimp.c index a9033c61f1..039bf2bc1b 100644 --- a/app/core/gimp.c +++ b/app/core/gimp.c @@ -55,6 +55,7 @@ #include "gimp-units.h" #include "gimp-utils.h" #include "gimpbrush.h" +#include "gimpbrushgenerated.h" #include "gimpbuffer.h" #include "gimpcontext.h" #include "gimpdynamics.h" @@ -75,6 +76,8 @@ #include "gimptoolinfo.h" #include "gimptreeproxy.h" +#include "text/gimpfont.h" + #include "gimp-intl.h" @@ -1299,6 +1302,34 @@ gimp_get_temp_file (Gimp *gimp, return file; } +GimpDataFactory * +gimp_get_data_factory (Gimp *gimp, + GType data_type) +{ + g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); + g_return_val_if_fail (g_type_is_a (data_type, GIMP_TYPE_DATA), NULL); + + if (g_type_is_a (data_type, GIMP_TYPE_BRUSH_GENERATED)) + return gimp->brush_factory; + else if (g_type_is_a (data_type, GIMP_TYPE_BRUSH)) + return gimp->brush_factory; + else if (g_type_is_a (data_type, GIMP_TYPE_PATTERN)) + return gimp->pattern_factory; + else if (g_type_is_a (data_type, GIMP_TYPE_GRADIENT)) + return gimp->gradient_factory; + else if (g_type_is_a (data_type, GIMP_TYPE_PALETTE)) + return gimp->palette_factory; + else if (g_type_is_a (data_type, GIMP_TYPE_FONT)) + return gimp->font_factory; + else if (g_type_is_a (data_type, GIMP_TYPE_DYNAMICS)) + return gimp->dynamics_factory; + else if (g_type_is_a (data_type, GIMP_TYPE_MYBRUSH)) + return gimp->mybrush_factory; + + /* If we reach this, it means we forgot a data factory in our list! */ + g_return_val_if_reached (NULL); +} + static gboolean gimp_exit_idle_cleanup_stray_images (Gimp *gimp) { diff --git a/app/core/gimp.h b/app/core/gimp.h index 210bfd31a0..73662a7562 100644 --- a/app/core/gimp.h +++ b/app/core/gimp.h @@ -260,5 +260,9 @@ void gimp_image_opened (Gimp *gimp, GFile * gimp_get_temp_file (Gimp *gimp, const gchar *extension); +GimpDataFactory * + gimp_get_data_factory (Gimp *gimp, + GType data_type); + #endif /* __GIMP_H__ */ diff --git a/app/core/gimpdatafactory.c b/app/core/gimpdatafactory.c index 5309484eec..0d5bc0ab54 100644 --- a/app/core/gimpdatafactory.c +++ b/app/core/gimpdatafactory.c @@ -77,6 +77,14 @@ struct _GimpDataFactoryPrivate GimpAsyncSet *async_set; }; +typedef struct +{ + const gchar *name; + const gchar *collection; + gboolean is_internal; +} SearchData; + + #define GET_PRIVATE(obj) (((GimpDataFactory *) (obj))->priv) @@ -109,6 +117,9 @@ static void gimp_data_factory_path_notify (GObject *ob static GFile * gimp_data_factory_get_save_dir (GimpDataFactory *factory, GError **error); +static gboolean gimp_data_factory_search_in_container (GimpData *data, + SearchData *search_data); + G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GimpDataFactory, gimp_data_factory, GIMP_TYPE_OBJECT) @@ -650,6 +661,47 @@ gimp_data_factory_data_cancel (GimpDataFactory *factory) GIMP_DATA_FACTORY_GET_CLASS (factory)->data_cancel (factory); } +GimpData * +gimp_data_factory_get_data (GimpDataFactory *factory, + const gchar *name, + const gchar *collection, + gboolean is_internal) +{ + GimpContainer *container; + GimpObject *data; + + g_return_val_if_fail (GIMP_IS_DATA_FACTORY (factory), NULL); + + container = gimp_data_factory_get_container (factory); + + if (collection == NULL) + { + data = gimp_container_get_child_by_name (container, name); + } + else + { + SearchData *search_data = g_new (SearchData, 1); + + search_data->name = name; + search_data->collection = collection; + search_data->is_internal = is_internal; + data = gimp_container_search (container, + (GimpContainerSearchFunc) gimp_data_factory_search_in_container, + search_data); + g_free (search_data); + } + + if (! data) + data = gimp_container_get_child_by_name (gimp_data_factory_get_container_obsolete (factory), + name); + + if (! data && ! strcmp (name, "Standard")) + data = (GimpObject *) gimp_data_factory_data_get_standard (factory, + gimp_get_user_context (factory->priv->gimp)); + + return (GimpData *) data; +} + gboolean gimp_data_factory_has_data_new_func (GimpDataFactory *factory) { @@ -1038,3 +1090,10 @@ gimp_data_factory_get_save_dir (GimpDataFactory *factory, return writable_dir; } + +static gboolean +gimp_data_factory_search_in_container (GimpData *data, + SearchData *search_data) +{ + return gimp_data_identify (data, search_data->name, search_data->collection, search_data->is_internal); +} diff --git a/app/core/gimpdatafactory.h b/app/core/gimpdatafactory.h index be398d94b8..13e1815263 100644 --- a/app/core/gimpdatafactory.h +++ b/app/core/gimpdatafactory.h @@ -88,6 +88,11 @@ GimpAsyncSet * gimp_data_factory_get_async_set (GimpDataFactory *factory); gboolean gimp_data_factory_data_wait (GimpDataFactory *factory); void gimp_data_factory_data_cancel (GimpDataFactory *factory); +GimpData * gimp_data_factory_get_data (GimpDataFactory *factory, + const gchar *name, + const gchar *collection, + gboolean is_internal); + gboolean gimp_data_factory_has_data_new_func (GimpDataFactory *factory); GimpData * gimp_data_factory_data_new (GimpDataFactory *factory, GimpContext *context, diff --git a/app/pdb/gimppdb-utils.c b/app/pdb/gimppdb-utils.c index e57a86ce9a..d8bfe70f9d 100644 --- a/app/pdb/gimppdb-utils.c +++ b/app/pdb/gimppdb-utils.c @@ -54,52 +54,9 @@ #include "gimp-intl.h" -typedef struct -{ - const gchar *name; - const gchar *collection; - gboolean is_internal; -} SearchData; +const gchar * gimp_pdb_get_data_label (GType data_type); -static GimpResource * gimp_pdb_get_data_factory_item (Gimp *gimp, - GType data_type, - const gchar *name, - const gchar *collection, - gboolean is_internal); -const gchar * gimp_pdb_get_data_label (GType data_type); - -static gboolean gimp_pdb_search_in_data_container (GimpData *data, - SearchData *search_data);; - - -GimpDataFactory * -gimp_pdb_get_data_factory (Gimp *gimp, - GType data_type) -{ - g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); - g_return_val_if_fail (g_type_is_a (data_type, GIMP_TYPE_DATA), NULL); - - if (g_type_is_a (data_type, GIMP_TYPE_BRUSH_GENERATED)) - return gimp->brush_factory; - else if (g_type_is_a (data_type, GIMP_TYPE_BRUSH)) - return gimp->brush_factory; - else if (g_type_is_a (data_type, GIMP_TYPE_PATTERN)) - return gimp->pattern_factory; - else if (g_type_is_a (data_type, GIMP_TYPE_GRADIENT)) - return gimp->gradient_factory; - else if (g_type_is_a (data_type, GIMP_TYPE_PALETTE)) - return gimp->palette_factory; - else if (g_type_is_a (data_type, GIMP_TYPE_FONT)) - return gimp->font_factory; - else if (g_type_is_a (data_type, GIMP_TYPE_DYNAMICS)) - return gimp->dynamics_factory; - else if (g_type_is_a (data_type, GIMP_TYPE_MYBRUSH)) - return gimp->mybrush_factory; - - /* If we reach this, it means we forgot a data factory in our list! */ - g_return_val_if_reached (NULL); -} GList * gimp_pdb_get_resources (Gimp *gimp, @@ -129,7 +86,7 @@ gimp_pdb_get_resources (Gimp *gimp, return NULL; } - factory = gimp_pdb_get_data_factory (gimp, data_type); + factory = gimp_get_data_factory (gimp, data_type); g_return_val_if_fail (GIMP_IS_DATA_FACTORY (factory), NULL); container = gimp_data_factory_get_container (factory); @@ -193,8 +150,9 @@ gimp_pdb_get_resource (Gimp *gimp, GimpPDBDataAccess access, GError **error) { - GimpResource *resource; - const gchar *label; + GimpDataFactory *factory; + GimpResource *resource; + const gchar *label; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); @@ -212,7 +170,8 @@ gimp_pdb_get_resource (Gimp *gimp, return NULL; } - resource = gimp_pdb_get_data_factory_item (gimp, data_type, name, NULL, TRUE); + factory = gimp_get_data_factory (gimp, data_type); + resource = GIMP_RESOURCE (gimp_data_factory_get_data (factory, name, NULL, TRUE)); if (! resource) { @@ -258,8 +217,9 @@ gimp_pdb_get_resource_by_id (Gimp *gimp, GimpPDBDataAccess access, GError **error) { - GimpResource *resource; - const gchar *label; + GimpDataFactory *factory; + GimpResource *resource; + const gchar *label; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); @@ -277,7 +237,8 @@ gimp_pdb_get_resource_by_id (Gimp *gimp, return NULL; } - resource = gimp_pdb_get_data_factory_item (gimp, data_type, name, collection, is_internal); + factory = gimp_get_data_factory (gimp, data_type); + resource = GIMP_RESOURCE (gimp_data_factory_get_data (factory, name, collection, is_internal)); if (! resource) { @@ -836,50 +797,6 @@ gimp_pdb_is_canonical_procedure (const gchar *procedure_name, /* Private functions. */ -static GimpResource * -gimp_pdb_get_data_factory_item (Gimp *gimp, - GType data_type, - const gchar *name, - const gchar *collection, - gboolean is_internal) -{ - GimpDataFactory *factory; - GimpContainer *container; - GimpObject *resource; - - factory = gimp_pdb_get_data_factory (gimp, data_type); - g_return_val_if_fail (GIMP_IS_DATA_FACTORY (factory), NULL); - - container = gimp_data_factory_get_container (factory); - - if (collection == NULL) - { - resource = gimp_container_get_child_by_name (container, name); - } - else - { - SearchData *data = g_new (SearchData, 1); - - data->name = name; - data->collection = collection; - data->is_internal = is_internal; - resource = gimp_container_search (container, - (GimpContainerSearchFunc) gimp_pdb_search_in_data_container, - data); - g_free (data); - } - - if (! resource) - resource = gimp_container_get_child_by_name (gimp_data_factory_get_container_obsolete (factory), - name); - - if (! resource && ! strcmp (name, "Standard")) - resource = (GimpObject *) gimp_data_factory_data_get_standard (factory, - gimp_get_user_context (gimp)); - - return (GimpResource *) resource; -} - const gchar * gimp_pdb_get_data_label (GType data_type) { @@ -905,10 +822,3 @@ gimp_pdb_get_data_label (GType data_type) /* If we reach this, it means we forgot a data type in our list! */ g_return_val_if_reached (NULL); } - -static gboolean -gimp_pdb_search_in_data_container (GimpData *data, - SearchData *search_data) -{ - return gimp_data_identify (data, search_data->name, search_data->collection, search_data->is_internal); -} diff --git a/app/pdb/gimppdb-utils.h b/app/pdb/gimppdb-utils.h index 824edb467d..c657ad95f7 100644 --- a/app/pdb/gimppdb-utils.h +++ b/app/pdb/gimppdb-utils.h @@ -19,9 +19,6 @@ #define __GIMP_PDB_UTILS_H__ -GimpDataFactory * gimp_pdb_get_data_factory (Gimp *gimp, - GType data_type); - GList * gimp_pdb_get_resources (Gimp *gimp, GType data_type, const gchar *name, diff --git a/app/pdb/resource-cmds.c b/app/pdb/resource-cmds.c index fe9677aa1c..1d9b62b558 100644 --- a/app/pdb/resource-cmds.c +++ b/app/pdb/resource-cmds.c @@ -29,6 +29,7 @@ #include "pdb-types.h" +#include "core/gimp.h" #include "core/gimpbrush.h" #include "core/gimpdatafactory.h" #include "core/gimpgradient.h" @@ -422,7 +423,7 @@ resource_duplicate_invoker (GimpProcedure *procedure, { GimpDataFactory *factory; - factory = gimp_pdb_get_data_factory (gimp, G_TYPE_FROM_INSTANCE (resource)); + factory = gimp_get_data_factory (gimp, G_TYPE_FROM_INSTANCE (resource)); resource_copy = (GimpResource *) gimp_data_factory_data_duplicate (factory, GIMP_DATA (resource)); @@ -491,7 +492,7 @@ resource_delete_invoker (GimpProcedure *procedure, { GimpDataFactory *factory; - factory = gimp_pdb_get_data_factory (gimp, G_TYPE_FROM_INSTANCE (resource)); + factory = gimp_get_data_factory (gimp, G_TYPE_FROM_INSTANCE (resource)); if (gimp_data_is_deletable (GIMP_DATA (resource))) success = gimp_data_factory_data_delete (factory, GIMP_DATA (resource), diff --git a/pdb/groups/resource.pdb b/pdb/groups/resource.pdb index 0bafb1c2c1..c75e86b717 100644 --- a/pdb/groups/resource.pdb +++ b/pdb/groups/resource.pdb @@ -406,7 +406,7 @@ sub resource_duplicate { { GimpDataFactory *factory; - factory = gimp_pdb_get_data_factory (gimp, G_TYPE_FROM_INSTANCE (resource)); + factory = gimp_get_data_factory (gimp, G_TYPE_FROM_INSTANCE (resource)); resource_copy = (GimpResource *) gimp_data_factory_data_duplicate (factory, GIMP_DATA (resource)); @@ -473,7 +473,7 @@ HELP { GimpDataFactory *factory; - factory = gimp_pdb_get_data_factory (gimp, G_TYPE_FROM_INSTANCE (resource)); + factory = gimp_get_data_factory (gimp, G_TYPE_FROM_INSTANCE (resource)); if (gimp_data_is_deletable (GIMP_DATA (resource))) success = gimp_data_factory_data_delete (factory, GIMP_DATA (resource), @@ -486,7 +486,8 @@ CODE } -@headers = qw("core/gimpbrush.h" +@headers = qw("core/gimp.h" + "core/gimpbrush.h" "core/gimpdatafactory.h" "core/gimpgradient.h" "core/gimppalette.h"