Revert "New GimpMetadata as subclass of GExiv2Metadata"

This reverts commit 3ab08c8bfd.
This commit is contained in:
Hartmut Kuhse 2017-01-03 19:36:22 +01:00
parent 3ab08c8bfd
commit 66bc98d299
71 changed files with 2025 additions and 7667 deletions

View File

@ -853,15 +853,14 @@ gimp_undo_type_get_type (void)
{ GIMP_UNDO_IMAGE_SIZE, "GIMP_UNDO_IMAGE_SIZE", "image-size" }, { GIMP_UNDO_IMAGE_SIZE, "GIMP_UNDO_IMAGE_SIZE", "image-size" },
{ GIMP_UNDO_IMAGE_RESOLUTION, "GIMP_UNDO_IMAGE_RESOLUTION", "image-resolution" }, { GIMP_UNDO_IMAGE_RESOLUTION, "GIMP_UNDO_IMAGE_RESOLUTION", "image-resolution" },
{ GIMP_UNDO_IMAGE_GRID, "GIMP_UNDO_IMAGE_GRID", "image-grid" }, { GIMP_UNDO_IMAGE_GRID, "GIMP_UNDO_IMAGE_GRID", "image-grid" },
{ GIMP_UNDO_IMAGE_METADATA, "GIMP_UNDO_IMAGE_METADATA", "image-metadata" },
{ GIMP_UNDO_IMAGE_COLORMAP, "GIMP_UNDO_IMAGE_COLORMAP", "image-colormap" }, { GIMP_UNDO_IMAGE_COLORMAP, "GIMP_UNDO_IMAGE_COLORMAP", "image-colormap" },
{ GIMP_UNDO_IMAGE_COLOR_MANAGED, "GIMP_UNDO_IMAGE_COLOR_MANAGED", "image-color-managed" }, { GIMP_UNDO_IMAGE_COLOR_MANAGED, "GIMP_UNDO_IMAGE_COLOR_MANAGED", "image-color-managed" },
{ GIMP_UNDO_IMAGE_METADATA, "GIMP_UNDO_IMAGE_METADATA", "image-metadata" },
{ GIMP_UNDO_GUIDE, "GIMP_UNDO_GUIDE", "guide" }, { GIMP_UNDO_GUIDE, "GIMP_UNDO_GUIDE", "guide" },
{ GIMP_UNDO_SAMPLE_POINT, "GIMP_UNDO_SAMPLE_POINT", "sample-point" }, { GIMP_UNDO_SAMPLE_POINT, "GIMP_UNDO_SAMPLE_POINT", "sample-point" },
{ GIMP_UNDO_DRAWABLE, "GIMP_UNDO_DRAWABLE", "drawable" }, { GIMP_UNDO_DRAWABLE, "GIMP_UNDO_DRAWABLE", "drawable" },
{ GIMP_UNDO_DRAWABLE_MOD, "GIMP_UNDO_DRAWABLE_MOD", "drawable-mod" }, { GIMP_UNDO_DRAWABLE_MOD, "GIMP_UNDO_DRAWABLE_MOD", "drawable-mod" },
{ GIMP_UNDO_MASK, "GIMP_UNDO_MASK", "mask" }, { GIMP_UNDO_MASK, "GIMP_UNDO_MASK", "mask" },
{ GIMP_UNDO_ITEM_METADATA, "GIMP_UNDO_ITEM_METADATA", "item-metadata" },
{ GIMP_UNDO_ITEM_REORDER, "GIMP_UNDO_ITEM_REORDER", "item-reorder" }, { GIMP_UNDO_ITEM_REORDER, "GIMP_UNDO_ITEM_REORDER", "item-reorder" },
{ GIMP_UNDO_ITEM_RENAME, "GIMP_UNDO_ITEM_RENAME", "item-rename" }, { GIMP_UNDO_ITEM_RENAME, "GIMP_UNDO_ITEM_RENAME", "item-rename" },
{ GIMP_UNDO_ITEM_DISPLACE, "GIMP_UNDO_ITEM_DISPLACE", "item-displace" }, { GIMP_UNDO_ITEM_DISPLACE, "GIMP_UNDO_ITEM_DISPLACE", "item-displace" },
@ -947,15 +946,14 @@ gimp_undo_type_get_type (void)
{ GIMP_UNDO_IMAGE_SIZE, NC_("undo-type", "Image size"), NULL }, { GIMP_UNDO_IMAGE_SIZE, NC_("undo-type", "Image size"), NULL },
{ GIMP_UNDO_IMAGE_RESOLUTION, NC_("undo-type", "Image resolution change"), NULL }, { GIMP_UNDO_IMAGE_RESOLUTION, NC_("undo-type", "Image resolution change"), NULL },
{ GIMP_UNDO_IMAGE_GRID, NC_("undo-type", "Grid"), NULL }, { GIMP_UNDO_IMAGE_GRID, NC_("undo-type", "Grid"), NULL },
{ GIMP_UNDO_IMAGE_METADATA, NC_("undo-type", "Change metadata"), NULL },
{ GIMP_UNDO_IMAGE_COLORMAP, NC_("undo-type", "Change indexed palette"), NULL }, { GIMP_UNDO_IMAGE_COLORMAP, NC_("undo-type", "Change indexed palette"), NULL },
{ GIMP_UNDO_IMAGE_COLOR_MANAGED, NC_("undo-type", "Change color managed state"), NULL }, { GIMP_UNDO_IMAGE_COLOR_MANAGED, NC_("undo-type", "Change color managed state"), NULL },
{ GIMP_UNDO_IMAGE_METADATA, "GIMP_UNDO_IMAGE_METADATA", NULL },
{ GIMP_UNDO_GUIDE, NC_("undo-type", "Guide"), NULL }, { GIMP_UNDO_GUIDE, NC_("undo-type", "Guide"), NULL },
{ GIMP_UNDO_SAMPLE_POINT, NC_("undo-type", "Sample Point"), NULL }, { GIMP_UNDO_SAMPLE_POINT, NC_("undo-type", "Sample Point"), NULL },
{ GIMP_UNDO_DRAWABLE, NC_("undo-type", "Layer/Channel"), NULL }, { GIMP_UNDO_DRAWABLE, NC_("undo-type", "Layer/Channel"), NULL },
{ GIMP_UNDO_DRAWABLE_MOD, NC_("undo-type", "Layer/Channel modification"), NULL }, { GIMP_UNDO_DRAWABLE_MOD, NC_("undo-type", "Layer/Channel modification"), NULL },
{ GIMP_UNDO_MASK, NC_("undo-type", "Selection mask"), NULL }, { GIMP_UNDO_MASK, NC_("undo-type", "Selection mask"), NULL },
{ GIMP_UNDO_ITEM_METADATA, "GIMP_UNDO_ITEM_METADATA", NULL },
{ GIMP_UNDO_ITEM_REORDER, NC_("undo-type", "Reorder item"), NULL }, { GIMP_UNDO_ITEM_REORDER, NC_("undo-type", "Reorder item"), NULL },
{ GIMP_UNDO_ITEM_RENAME, NC_("undo-type", "Rename item"), NULL }, { GIMP_UNDO_ITEM_RENAME, NC_("undo-type", "Rename item"), NULL },
{ GIMP_UNDO_ITEM_DISPLACE, NC_("undo-type", "Move item"), NULL }, { GIMP_UNDO_ITEM_DISPLACE, NC_("undo-type", "Move item"), NULL },

View File

@ -425,15 +425,14 @@ typedef enum /*< pdb-skip >*/
GIMP_UNDO_IMAGE_SIZE, /*< desc="Image size" >*/ GIMP_UNDO_IMAGE_SIZE, /*< desc="Image size" >*/
GIMP_UNDO_IMAGE_RESOLUTION, /*< desc="Image resolution change" >*/ GIMP_UNDO_IMAGE_RESOLUTION, /*< desc="Image resolution change" >*/
GIMP_UNDO_IMAGE_GRID, /*< desc="Grid" >*/ GIMP_UNDO_IMAGE_GRID, /*< desc="Grid" >*/
GIMP_UNDO_IMAGE_METADATA, /*< desc="Change metadata" >*/
GIMP_UNDO_IMAGE_COLORMAP, /*< desc="Change indexed palette" >*/ GIMP_UNDO_IMAGE_COLORMAP, /*< desc="Change indexed palette" >*/
GIMP_UNDO_IMAGE_COLOR_MANAGED, /*< desc="Change color managed state" >*/ GIMP_UNDO_IMAGE_COLOR_MANAGED, /*< desc="Change color managed state" >*/
GIMP_UNDO_IMAGE_METADATA, /*< desc="Change metadata >*/
GIMP_UNDO_GUIDE, /*< desc="Guide" >*/ GIMP_UNDO_GUIDE, /*< desc="Guide" >*/
GIMP_UNDO_SAMPLE_POINT, /*< desc="Sample Point" >*/ GIMP_UNDO_SAMPLE_POINT, /*< desc="Sample Point" >*/
GIMP_UNDO_DRAWABLE, /*< desc="Layer/Channel" >*/ GIMP_UNDO_DRAWABLE, /*< desc="Layer/Channel" >*/
GIMP_UNDO_DRAWABLE_MOD, /*< desc="Layer/Channel modification" >*/ GIMP_UNDO_DRAWABLE_MOD, /*< desc="Layer/Channel modification" >*/
GIMP_UNDO_MASK, /*< desc="Selection mask" >*/ GIMP_UNDO_MASK, /*< desc="Selection mask" >*/
GIMP_UNDO_ITEM_METADATA, /*< desc="Change metadata >*/
GIMP_UNDO_ITEM_REORDER, /*< desc="Reorder item" >*/ GIMP_UNDO_ITEM_REORDER, /*< desc="Reorder item" >*/
GIMP_UNDO_ITEM_RENAME, /*< desc="Rename item" >*/ GIMP_UNDO_ITEM_RENAME, /*< desc="Rename item" >*/
GIMP_UNDO_ITEM_DISPLACE, /*< desc="Move item" >*/ GIMP_UNDO_ITEM_DISPLACE, /*< desc="Move item" >*/

View File

@ -157,7 +157,6 @@ typedef struct _GimpGroupLayer GimpGroupLayer;
typedef struct _GimpUndo GimpUndo; typedef struct _GimpUndo GimpUndo;
typedef struct _GimpUndoStack GimpUndoStack; typedef struct _GimpUndoStack GimpUndoStack;
typedef struct _GimpUndoAccumulator GimpUndoAccumulator; typedef struct _GimpUndoAccumulator GimpUndoAccumulator;
typedef struct _GimpViewableUndo GimpViewableUndo;
/* Symmetry transformations */ /* Symmetry transformations */

View File

@ -38,8 +38,6 @@
#include "plug-in/gimppluginmanager.h" #include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginmanager-restore.h" #include "plug-in/gimppluginmanager-restore.h"
#include "gui/gimpdbusservice-generated.h"
#include "paint/gimp-paint.h" #include "paint/gimp-paint.h"
#include "text/gimp-fonts.h" #include "text/gimp-fonts.h"

View File

@ -40,9 +40,7 @@
#include "gimpgrouplayer.h" #include "gimpgrouplayer.h"
#include "gimpimage.h" #include "gimpimage.h"
#include "gimpimage-merge.h" #include "gimpimage-merge.h"
#include "gimpimage-metadata.h"
#include "gimpimage-undo.h" #include "gimpimage-undo.h"
#include "gimpitem.h"
#include "gimpitemstack.h" #include "gimpitemstack.h"
#include "gimplayer-floating-selection.h" #include "gimplayer-floating-selection.h"
#include "gimplayer-new.h" #include "gimplayer-new.h"
@ -430,7 +428,6 @@ gimp_image_merge_layers (GimpImage *image,
GimpLayer *layer; GimpLayer *layer;
GimpLayer *bottom_layer; GimpLayer *bottom_layer;
GimpParasiteList *parasites; GimpParasiteList *parasites;
GimpMetadata *metadata;
gint count; gint count;
gint x1, y1, x2, y2; gint x1, y1, x2, y2;
gint off_x, off_y; gint off_x, off_y;
@ -525,8 +522,8 @@ gimp_image_merge_layers (GimpImage *image,
(gimp_drawable_is_indexed (GIMP_DRAWABLE (layer)) && (gimp_drawable_is_indexed (GIMP_DRAWABLE (layer)) &&
! gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))) ! gimp_drawable_has_alpha (GIMP_DRAWABLE (layer))))
{ {
GeglColor *color; GeglColor *color;
GimpRGB bg; GimpRGB bg;
merge_layer = gimp_layer_new (image, (x2 - x1), (y2 - y1), merge_layer = gimp_layer_new (image, (x2 - x1), (y2 - y1),
gimp_image_get_layer_format (image, FALSE), gimp_image_get_layer_format (image, FALSE),
@ -588,22 +585,6 @@ gimp_image_merge_layers (GimpImage *image,
bottom_layer = layer; bottom_layer = layer;
/* Copy the metadata of the bottom layer to the new layer */
metadata = gimp_item_get_metadata (GIMP_ITEM (bottom_layer));
if (!metadata)
metadata = gimp_image_get_metadata (image);
if (metadata)
{
GimpMetadata *new_metadata;
new_metadata = gimp_metadata_duplicate (metadata);
gimp_item_set_metadata (GIMP_ITEM (merge_layer), new_metadata, TRUE);
g_object_unref (new_metadata);
}
/* Copy the tattoo and parasites of the bottom layer to the new layer */ /* Copy the tattoo and parasites of the bottom layer to the new layer */
gimp_item_set_tattoo (GIMP_ITEM (merge_layer), gimp_item_set_tattoo (GIMP_ITEM (merge_layer),
gimp_item_get_tattoo (GIMP_ITEM (bottom_layer))); gimp_item_get_tattoo (GIMP_ITEM (bottom_layer)));

View File

@ -49,7 +49,6 @@
#include "gimpsamplepoint.h" #include "gimpsamplepoint.h"
#include "gimpsamplepointundo.h" #include "gimpsamplepointundo.h"
#include "gimpselection.h" #include "gimpselection.h"
#include "gimpviewable.h"
#include "text/gimptextlayer.h" #include "text/gimptextlayer.h"
#include "text/gimptextundo.h" #include "text/gimptextundo.h"
@ -173,21 +172,6 @@ gimp_image_undo_push_image_metadata (GimpImage *image,
NULL); NULL);
} }
GimpUndo *
gimp_image_undo_push_item_metadata (GimpImage *image,
const gchar *undo_desc,
GimpItem *item)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return gimp_image_undo_push (image, GIMP_TYPE_ITEM_UNDO,
GIMP_UNDO_ITEM_METADATA, undo_desc,
GIMP_DIRTY_IMAGE_META,
"item", item,
NULL);
}
GimpUndo * GimpUndo *
gimp_image_undo_push_image_parasite (GimpImage *image, gimp_image_undo_push_image_parasite (GimpImage *image,
const gchar *undo_desc, const gchar *undo_desc,

View File

@ -118,9 +118,6 @@ GimpUndo * gimp_image_undo_push_item_parasite_remove(GimpImage *image,
const gchar *undo_desc, const gchar *undo_desc,
GimpItem *item, GimpItem *item,
const gchar *name); const gchar *name);
GimpUndo * gimp_image_undo_push_item_metadata (GimpImage *image,
const gchar *undo_desc,
GimpItem *item);
/* layer undos */ /* layer undos */
@ -237,4 +234,5 @@ GimpUndo * gimp_image_undo_push_fs_to_layer (GimpImage *image,
GimpUndo * gimp_image_undo_push_cantundo (GimpImage *image, GimpUndo * gimp_image_undo_push_cantundo (GimpImage *image,
const gchar *undo_desc); const gchar *undo_desc);
#endif /* __GIMP_IMAGE_UNDO_PUSH_H__ */ #endif /* __GIMP_IMAGE_UNDO_PUSH_H__ */

View File

@ -99,7 +99,6 @@ struct _GimpItemPrivate
GimpColorTag color_tag; /* color tag */ GimpColorTag color_tag; /* color tag */
GList *offset_nodes; /* offset nodes to manage */ GList *offset_nodes; /* offset nodes to manage */
GimpMetadata *metadata /* items metadata */
}; };
#define GET_PRIVATE(item) G_TYPE_INSTANCE_GET_PRIVATE (item, \ #define GET_PRIVATE(item) G_TYPE_INSTANCE_GET_PRIVATE (item, \
@ -332,7 +331,6 @@ gimp_item_init (GimpItem *item)
g_object_force_floating (G_OBJECT (item)); g_object_force_floating (G_OBJECT (item));
private->parasites = gimp_parasite_list_new (); private->parasites = gimp_parasite_list_new ();
private->metadata = NULL;
} }
static void static void
@ -2422,41 +2420,3 @@ gimp_item_is_in_set (GimpItem *item,
return FALSE; return FALSE;
} }
void
gimp_item_set_metadata (GimpItem *item,
GimpMetadata *metadata,
gboolean push_undo)
{
GimpItemPrivate *private;
g_return_val_if_fail (GIMP_IS_ITEM (item), NULL);
private = GET_PRIVATE (item);
if (metadata != private->metadata)
{
if (push_undo)
gimp_image_undo_push_item_metadata (gimp_item_get_image (item),
NULL,
item);
if (private->metadata)
g_object_unref (private->metadata);
private->metadata = metadata;
g_object_ref (private->metadata);
}
}
GimpMetadata *
gimp_item_get_metadata (GimpItem *item)
{
GimpItemPrivate *private;
g_return_val_if_fail (GIMP_IS_ITEM (item), NULL);
private = GET_PRIVATE (item);
return private->metadata;
}

View File

@ -364,9 +364,5 @@ gboolean gimp_item_mask_intersect (GimpItem *item,
gboolean gimp_item_is_in_set (GimpItem *item, gboolean gimp_item_is_in_set (GimpItem *item,
GimpItemSet set); GimpItemSet set);
void gimp_item_set_metadata (GimpItem *item,
GimpMetadata *metadata,
gboolean push_undo);
GimpMetadata * gimp_item_get_metadata (GimpItem *item);
#endif /* __GIMP_ITEM_H__ */ #endif /* __GIMP_ITEM_H__ */

View File

@ -22,8 +22,6 @@
#include "core-types.h" #include "core-types.h"
#include "libgimpbase/gimpbase.h"
#include "gimpimage.h" #include "gimpimage.h"
#include "gimpitem.h" #include "gimpitem.h"
#include "gimpitemundo.h" #include "gimpitemundo.h"
@ -36,21 +34,18 @@ enum
}; };
static void gimp_item_undo_constructed (GObject *object); static void gimp_item_undo_constructed (GObject *object);
static void gimp_item_undo_set_property (GObject *object, static void gimp_item_undo_set_property (GObject *object,
guint property_id, guint property_id,
const GValue *value, const GValue *value,
GParamSpec *pspec); GParamSpec *pspec);
static void gimp_item_undo_get_property (GObject *object, static void gimp_item_undo_get_property (GObject *object,
guint property_id, guint property_id,
GValue *value, GValue *value,
GParamSpec *pspec); GParamSpec *pspec);
static void gimp_item_undo_free (GimpUndo *undo, static void gimp_item_undo_free (GimpUndo *undo,
GimpUndoMode undo_mode); GimpUndoMode undo_mode);
static void gimp_item_undo_pop (GimpUndo *undo,
GimpUndoMode undo_mode,
GimpUndoAccumulator *accum);
G_DEFINE_TYPE (GimpItemUndo, gimp_item_undo, GIMP_TYPE_UNDO) G_DEFINE_TYPE (GimpItemUndo, gimp_item_undo, GIMP_TYPE_UNDO)
@ -68,7 +63,6 @@ gimp_item_undo_class_init (GimpItemUndoClass *klass)
object_class->set_property = gimp_item_undo_set_property; object_class->set_property = gimp_item_undo_set_property;
object_class->get_property = gimp_item_undo_get_property; object_class->get_property = gimp_item_undo_get_property;
undo_class->pop = gimp_item_undo_pop;
undo_class->free = gimp_item_undo_free; undo_class->free = gimp_item_undo_free;
g_object_class_install_property (object_class, PROP_ITEM, g_object_class_install_property (object_class, PROP_ITEM,
@ -90,14 +84,7 @@ gimp_item_undo_constructed (GObject *object)
G_OBJECT_CLASS (parent_class)->constructed (object); G_OBJECT_CLASS (parent_class)->constructed (object);
switch (GIMP_UNDO (object)->undo_type) g_assert (GIMP_IS_ITEM (item_undo->item));
{
case GIMP_UNDO_ITEM_METADATA:
item_undo->metadata =
gimp_metadata_duplicate (gimp_item_get_metadata (item_undo->item));
break;
}
} }
static void static void
@ -152,42 +139,5 @@ gimp_item_undo_free (GimpUndo *undo,
item_undo->item = NULL; item_undo->item = NULL;
} }
if (item_undo->metadata)
{
g_object_unref (item_undo->metadata);
item_undo->metadata = NULL;
}
GIMP_UNDO_CLASS (parent_class)->free (undo, undo_mode); GIMP_UNDO_CLASS (parent_class)->free (undo, undo_mode);
} }
static void
gimp_item_undo_pop (GimpUndo *undo,
GimpUndoMode undo_mode,
GimpUndoAccumulator *accum)
{
GimpItemUndo *item_undo = GIMP_ITEM_UNDO (undo);
GimpItem *item = GIMP_ITEM_UNDO (undo)->item;
switch (undo->undo_type)
{
case GIMP_UNDO_ITEM_METADATA:
{
GimpMetadata *metadata;
metadata = gimp_metadata_duplicate (gimp_item_get_metadata (item));
gimp_item_set_metadata (item, item_undo->metadata, FALSE);
if (item_undo->metadata)
g_object_unref (item_undo->metadata);
item_undo->metadata = metadata;
}
break;
default:
// g_assert_not_reached ();
break;
}
}

View File

@ -38,8 +38,6 @@ struct _GimpItemUndo
GimpUndo parent_instance; GimpUndo parent_instance;
GimpItem *item; /* the item this undo is for */ GimpItem *item; /* the item this undo is for */
GimpMetadata *metadata;
}; };
struct _GimpItemUndoClass struct _GimpItemUndoClass

View File

@ -743,9 +743,7 @@ static GimpItem *
gimp_layer_duplicate (GimpItem *item, gimp_layer_duplicate (GimpItem *item,
GType new_type) GType new_type)
{ {
GimpItem *new_item; GimpItem *new_item;
GimpMetadata *metadata;
GimpMetadata *new_metadata;
g_return_val_if_fail (g_type_is_a (new_type, GIMP_TYPE_DRAWABLE), NULL); g_return_val_if_fail (g_type_is_a (new_type, GIMP_TYPE_DRAWABLE), NULL);
@ -776,14 +774,6 @@ gimp_layer_duplicate (GimpItem *item,
new_layer->edit_mask = layer->edit_mask; new_layer->edit_mask = layer->edit_mask;
new_layer->show_mask = layer->show_mask; new_layer->show_mask = layer->show_mask;
} }
metadata = gimp_item_get_metadata (item);
if (metadata)
{
new_metadata = gimp_metadata_duplicate (metadata);
gimp_item_set_metadata (new_item, new_metadata, FALSE);
g_object_unref (new_metadata);
}
} }
return new_item; return new_item;

View File

@ -28,7 +28,7 @@
#include "internal-procs.h" #include "internal-procs.h"
/* 804 procedures registered total */ /* 802 procedures registered total */
void void
internal_procs_init (GimpPDB *pdb) internal_procs_init (GimpPDB *pdb)

View File

@ -821,67 +821,6 @@ item_set_tattoo_invoker (GimpProcedure *procedure,
error ? *error : NULL); error ? *error : NULL);
} }
static GimpValueArray *
item_get_metadata_invoker (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
const GimpValueArray *args,
GError **error)
{
gboolean success = TRUE;
GimpValueArray *return_vals;
GimpItem *item;
gchar *metadata_string = NULL;
item = gimp_value_get_item (gimp_value_array_index (args, 0), gimp);
if (success)
{
GimpMetadata *metadata = gimp_item_get_metadata (item);
if (metadata)
metadata_string = gimp_metadata_serialize (metadata);
}
return_vals = gimp_procedure_get_return_values (procedure, success,
error ? *error : NULL);
if (success)
g_value_take_string (gimp_value_array_index (return_vals, 1), metadata_string);
return return_vals;
}
static GimpValueArray *
item_set_metadata_invoker (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
const GimpValueArray *args,
GError **error)
{
gboolean success = TRUE;
GimpItem *item;
const gchar *metadata_string;
item = gimp_value_get_item (gimp_value_array_index (args, 0), gimp);
metadata_string = g_value_get_string (gimp_value_array_index (args, 1));
if (success)
{
GimpMetadata *metadata = gimp_metadata_deserialize (metadata_string);
gimp_item_set_metadata (item, metadata, TRUE);
if (metadata)
g_object_unref (metadata);
}
return gimp_procedure_get_return_values (procedure, success,
error ? *error : NULL);
}
static GimpValueArray * static GimpValueArray *
item_attach_parasite_invoker (GimpProcedure *procedure, item_attach_parasite_invoker (GimpProcedure *procedure,
Gimp *gimp, Gimp *gimp,
@ -1791,66 +1730,6 @@ register_item_procs (GimpPDB *pdb)
gimp_pdb_register_procedure (pdb, procedure); gimp_pdb_register_procedure (pdb, procedure);
g_object_unref (procedure); g_object_unref (procedure);
/*
* gimp-item-get-metadata
*/
procedure = gimp_procedure_new (item_get_metadata_invoker);
gimp_object_set_static_name (GIMP_OBJECT (procedure),
"gimp-item-get-metadata");
gimp_procedure_set_static_strings (procedure,
"gimp-item-get-metadata",
"Returns the item's metadata.",
"Returns metadata from the item.",
"Spencer Kimball & Peter Mattis",
"Spencer Kimball & Peter Mattis",
"1995-1996",
NULL);
gimp_procedure_add_argument (procedure,
gimp_param_spec_item_id ("item",
"item",
"The item",
pdb->gimp, FALSE,
GIMP_PARAM_READWRITE));
gimp_procedure_add_return_value (procedure,
gimp_param_spec_string ("metadata-string",
"metadata string",
"The metadata as a xml string",
FALSE, FALSE, FALSE,
NULL,
GIMP_PARAM_READWRITE));
gimp_pdb_register_procedure (pdb, procedure);
g_object_unref (procedure);
/*
* gimp-item-set-metadata
*/
procedure = gimp_procedure_new (item_set_metadata_invoker);
gimp_object_set_static_name (GIMP_OBJECT (procedure),
"gimp-item-set-metadata");
gimp_procedure_set_static_strings (procedure,
"gimp-item-set-metadata",
"Set the item's metadata.",
"Sets metadata on the item.",
"Spencer Kimball & Peter Mattis",
"Spencer Kimball & Peter Mattis",
"1995-1996",
NULL);
gimp_procedure_add_argument (procedure,
gimp_param_spec_item_id ("item",
"item",
"The item",
pdb->gimp, FALSE,
GIMP_PARAM_READWRITE));
gimp_procedure_add_argument (procedure,
gimp_param_spec_string ("metadata-string",
"metadata string",
"The metadata as a xml string",
FALSE, FALSE, FALSE,
NULL,
GIMP_PARAM_READWRITE));
gimp_pdb_register_procedure (pdb, procedure);
g_object_unref (procedure);
/* /*
* gimp-item-attach-parasite * gimp-item-attach-parasite
*/ */

View File

@ -48,7 +48,6 @@
#include "core/gimpimage-undo.h" #include "core/gimpimage-undo.h"
#include "core/gimpitemstack.h" #include "core/gimpitemstack.h"
#include "core/gimplayer-floating-selection.h" #include "core/gimplayer-floating-selection.h"
#include "core/gimpitem.h"
#include "core/gimplayer-new.h" #include "core/gimplayer-new.h"
#include "core/gimplayermask.h" #include "core/gimplayermask.h"
#include "core/gimpparasitelist.h" #include "core/gimpparasitelist.h"
@ -269,31 +268,6 @@ xcf_load_image (Gimp *gimp,
gimp_parasite_list_remove (private->parasites, gimp_parasite_list_remove (private->parasites,
gimp_parasite_name (parasite)); gimp_parasite_name (parasite));
} }
else
{
/* check for an attributes parasite */
parasite = gimp_image_parasite_find (GIMP_IMAGE (image),
"gimp-image-attributes");
if (parasite)
{
GimpImagePrivate *private = GIMP_IMAGE_GET_PRIVATE (image);
GimpMetadata *metadata;
const gchar *attributes_string;
attributes_string = (gchar *) gimp_parasite_data (parasite);
metadata = gimp_metadata_deserialize (attributes_string);
if (metadata)
{
gimp_image_set_metadata (image, metadata, FALSE);
g_object_unref (metadata);
}
gimp_parasite_list_remove (private->parasites,
gimp_parasite_name (parasite));
}
}
/* migrate the old "exif-data" parasite */ /* migrate the old "exif-data" parasite */
parasite = gimp_image_parasite_find (GIMP_IMAGE (image), parasite = gimp_image_parasite_find (GIMP_IMAGE (image),
@ -310,10 +284,13 @@ xcf_load_image (Gimp *gimp,
} }
else else
{ {
GimpMetadata *metadata = NULL; GimpMetadata *metadata = gimp_image_get_metadata (image);
GError *my_error = NULL; GError *my_error = NULL;
metadata = gimp_metadata_new (); if (metadata)
g_object_ref (metadata);
else
metadata = gimp_metadata_new ();
if (! gimp_metadata_set_from_exif (metadata, if (! gimp_metadata_set_from_exif (metadata,
gimp_parasite_data (parasite), gimp_parasite_data (parasite),
@ -364,10 +341,13 @@ xcf_load_image (Gimp *gimp,
} }
else else
{ {
GimpMetadata *metadata = NULL; GimpMetadata *metadata = gimp_image_get_metadata (image);
GError *my_error = NULL; GError *my_error = NULL;
metadata = gimp_metadata_new (); if (metadata)
g_object_ref (metadata);
else
metadata = gimp_metadata_new ();
if (! gimp_metadata_set_from_xmp (metadata, if (! gimp_metadata_set_from_xmp (metadata,
(const guint8 *) xmp_data + 10, (const guint8 *) xmp_data + 10,
@ -1463,26 +1443,25 @@ xcf_load_layer (XcfInfo *info,
GimpImage *image, GimpImage *image,
GList **item_path) GList **item_path)
{ {
GimpLayer *layer; GimpLayer *layer;
GimpLayerMask *layer_mask; GimpLayerMask *layer_mask;
const GimpParasite *parasite; guint32 hierarchy_offset;
guint32 hierarchy_offset; guint32 layer_mask_offset;
guint32 layer_mask_offset; gboolean apply_mask = TRUE;
gboolean apply_mask = TRUE; gboolean edit_mask = FALSE;
gboolean edit_mask = FALSE; gboolean show_mask = FALSE;
gboolean show_mask = FALSE; gboolean active;
gboolean active; gboolean floating;
gboolean floating; guint32 group_layer_flags = 0;
guint32 group_layer_flags = 0; guint32 text_layer_flags = 0;
guint32 text_layer_flags = 0; gint width;
gint width; gint height;
gint height; gint type;
gint type; GimpImageBaseType base_type;
GimpImageBaseType base_type; gboolean has_alpha;
gboolean has_alpha; const Babl *format;
const Babl *format; gboolean is_fs_drawable;
gboolean is_fs_drawable; gchar *name;
gchar *name;
/* check and see if this is the drawable the floating selection /* check and see if this is the drawable the floating selection
* is attached to. if it is then we'll do the attachment in our caller. * is attached to. if it is then we'll do the attachment in our caller.
@ -1559,29 +1538,6 @@ xcf_load_layer (XcfInfo *info,
GIMP_LOG (XCF, "layer props loaded"); GIMP_LOG (XCF, "layer props loaded");
parasite = gimp_item_parasite_find (GIMP_ITEM (layer),
"gimp-item-metadata");
if (parasite)
{
GimpMetadata *metadata;
const gchar *metadata_string;
metadata_string = (gchar *) gimp_parasite_data (parasite);
metadata = gimp_metadata_deserialize (metadata_string);
if (metadata)
{
gimp_item_set_metadata (GIMP_ITEM (layer), metadata, FALSE);
g_object_unref (metadata);
}
gimp_item_parasite_detach (GIMP_ITEM (layer),
"gimp-item-metadata",
FALSE);
}
GIMP_LOG (XCF, "layer metadata loaded");
xcf_progress_update (info); xcf_progress_update (info);
/* call the evil text layer hack that might change our layer pointer */ /* call the evil text layer hack that might change our layer pointer */
@ -1671,14 +1627,13 @@ static GimpChannel *
xcf_load_channel (XcfInfo *info, xcf_load_channel (XcfInfo *info,
GimpImage *image) GimpImage *image)
{ {
GimpChannel *channel; GimpChannel *channel;
const GimpParasite *parasite; guint32 hierarchy_offset;
guint32 hierarchy_offset; gint width;
gint width; gint height;
gint height; gboolean is_fs_drawable;
gboolean is_fs_drawable; gchar *name;
gchar *name; GimpRGB color = { 0.0, 0.0, 0.0, GIMP_OPACITY_OPAQUE };
GimpRGB color = { 0.0, 0.0, 0.0, GIMP_OPACITY_OPAQUE };
/* check and see if this is the drawable the floating selection /* check and see if this is the drawable the floating selection
* is attached to. if it is then we'll do the attachment in our caller. * is attached to. if it is then we'll do the attachment in our caller.
@ -1703,27 +1658,6 @@ xcf_load_channel (XcfInfo *info,
if (!xcf_load_channel_props (info, image, &channel)) if (!xcf_load_channel_props (info, image, &channel))
goto error; goto error;
parasite = gimp_item_parasite_find (GIMP_ITEM (channel),
"gimp-item-metadata");
if (parasite)
{
GimpMetadata *metadata;
const gchar *metadata_string;
metadata_string = (gchar *) gimp_parasite_data (parasite);
metadata = gimp_metadata_deserialize (metadata_string);
if (metadata)
{
gimp_item_set_metadata (GIMP_ITEM (channel), metadata, FALSE);
g_object_unref (metadata);
}
gimp_item_parasite_detach (GIMP_ITEM (channel),
"gimp-item-metadata",
FALSE);
}
xcf_progress_update (info); xcf_progress_update (info);
/* read the hierarchy and layer mask offsets */ /* read the hierarchy and layer mask offsets */

View File

@ -45,7 +45,6 @@
#include "core/gimpimage-metadata.h" #include "core/gimpimage-metadata.h"
#include "core/gimpimage-private.h" #include "core/gimpimage-private.h"
#include "core/gimpimage-sample-points.h" #include "core/gimpimage-sample-points.h"
#include "core/gimpitem.h"
#include "core/gimplayer.h" #include "core/gimplayer.h"
#include "core/gimplayermask.h" #include "core/gimplayermask.h"
#include "core/gimpparasitelist.h" #include "core/gimpparasitelist.h"
@ -338,11 +337,11 @@ xcf_save_image_props (XcfInfo *info,
GimpImage *image, GimpImage *image,
GError **error) GError **error)
{ {
GimpImagePrivate *private = GIMP_IMAGE_GET_PRIVATE (image); GimpImagePrivate *private = GIMP_IMAGE_GET_PRIVATE (image);
GimpParasite *grid_parasite = NULL; GimpParasite *grid_parasite = NULL;
GimpParasite *meta_parasite = NULL; GimpParasite *meta_parasite = NULL;
GimpParasite *compat_parasite = NULL; GimpParasite *compat_parasite = NULL;
GimpUnit unit = gimp_image_get_unit (image); GimpUnit unit = gimp_image_get_unit (image);
gdouble xres; gdouble xres;
gdouble yres; gdouble yres;
@ -394,27 +393,6 @@ xcf_save_image_props (XcfInfo *info,
gimp_parasite_list_add (private->parasites, grid_parasite); gimp_parasite_list_add (private->parasites, grid_parasite);
} }
#if 0
if (gimp_image_get_attributes (image))
{
GimpParasite *attributes_parasite = NULL;
GimpAttributes *attributes = gimp_image_get_attributes (image);
gchar *attributes_string;
attributes_string = gimp_attributes_serialize (attributes);
if (attributes_string)
{
attributes_parasite = gimp_parasite_new ("gimp-image-attributes",
GIMP_PARASITE_PERSISTENT,
strlen (attributes_string) + 1,
attributes_string);
gimp_parasite_list_add (private->parasites, attributes_parasite);
g_free (attributes_string);
}
}
#endif
if (gimp_image_get_metadata (image)) if (gimp_image_get_metadata (image))
{ {
GimpMetadata *metadata = gimp_image_get_metadata (image); GimpMetadata *metadata = gimp_image_get_metadata (image);
@ -490,25 +468,6 @@ xcf_save_layer_props (XcfInfo *info,
GimpParasiteList *parasites; GimpParasiteList *parasites;
gint offset_x; gint offset_x;
gint offset_y; gint offset_y;
GimpParasite *metadata_parasite = NULL;
if (gimp_item_get_metadata (GIMP_ITEM (layer)))
{
GimpMetadata *metadata = gimp_item_get_metadata (GIMP_ITEM (layer));
gchar *metadata_string;
metadata_string = gimp_metadata_serialize (metadata);
if (metadata_string)
{
metadata_parasite = gimp_parasite_new ("gimp-item-metadata",
GIMP_PARASITE_PERSISTENT,
strlen (metadata_string) + 1,
metadata_string);
gimp_item_parasite_attach (GIMP_ITEM (layer), metadata_parasite, FALSE);
g_free (metadata_string);
}
}
if (gimp_viewable_get_children (GIMP_VIEWABLE (layer))) if (gimp_viewable_get_children (GIMP_VIEWABLE (layer)))
xcf_check_error (xcf_save_prop (info, image, PROP_GROUP_ITEM, error)); xcf_check_error (xcf_save_prop (info, image, PROP_GROUP_ITEM, error));
@ -624,27 +583,6 @@ xcf_save_channel_props (XcfInfo *info,
{ {
GimpParasiteList *parasites; GimpParasiteList *parasites;
guchar col[3]; guchar col[3];
#if 0
GimpParasite *attributes_parasite = NULL;
if (gimp_item_get_attributes (GIMP_ITEM (channel)))
{
GimpAttributes *attributes = gimp_item_get_attributes (GIMP_ITEM (channel));
gchar *attributes_string;
attributes_string = gimp_attributes_serialize (attributes);
if (attributes_string)
{
attributes_parasite = gimp_parasite_new ("gimp-item-attributes",
GIMP_PARASITE_PERSISTENT,
strlen (attributes_string) + 1,
attributes_string);
gimp_item_parasite_attach (GIMP_ITEM (channel), attributes_parasite, FALSE);
g_free (attributes_string);
}
}
#endif
if (channel == gimp_image_get_active_channel (image)) if (channel == gimp_image_get_active_channel (image))
xcf_check_error (xcf_save_prop (info, image, PROP_ACTIVE_CHANNEL, error)); xcf_check_error (xcf_save_prop (info, image, PROP_ACTIVE_CHANNEL, error));

View File

@ -66,7 +66,7 @@ m4_define([pycairo_required_version], [1.0.2])
m4_define([poppler_required_version], [0.44.0]) m4_define([poppler_required_version], [0.44.0])
m4_define([poppler_data_required_version], [0.4.7]) m4_define([poppler_data_required_version], [0.4.7])
m4_define([libgudev_required_version], [167]) m4_define([libgudev_required_version], [167])
m4_define([gexiv2_required_version], [0.10.3]) m4_define([gexiv2_required_version], [0.6.1])
m4_define([libmypaint_required_version], [1.3.0]) m4_define([libmypaint_required_version], [1.3.0])
m4_define([lcms_required_version], [2.7]) m4_define([lcms_required_version], [2.7])
m4_define([libpng_required_version], [1.6.25]) m4_define([libpng_required_version], [1.6.25])

Binary file not shown.

Before

Width:  |  Height:  |  Size: 569 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 850 B

View File

@ -1,275 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="gimp-image-tag 24.svg">
<defs
id="defs4">
<linearGradient
id="linearGradient19282"
osb:paint="solid"
gradientTransform="matrix(1.2178615,0,0,1.043881,378.84797,1794.4958)">
<stop
offset="0"
id="stop19284"
style="stop-color:#505050;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient19282-2"
osb:paint="solid"
gradientTransform="matrix(1.2178615,0,0,1.043881,356.69172,1794.4958)">
<stop
offset="0"
id="stop19284-1"
style="stop-color:#666666;stop-opacity:1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2807"
id="linearGradient2813"
x1="34.197105"
y1="33.725819"
x2="17.160702"
y2="17.396523"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.51166,0,0,0.475019,3.220846,5.837432)" />
<linearGradient
inkscape:collect="always"
id="linearGradient2807">
<stop
style="stop-color:#d3d7cf"
offset="0"
id="stop2809" />
<stop
style="stop-color:#eeeeec"
offset="1"
id="stop2811" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2065"
id="linearGradient2071"
x1="-11.986486"
y1="13.122552"
x2="-11.986486"
y2="29.726542"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.46355126,0,0,0.4786134,21.056353,5.7526316)" />
<linearGradient
inkscape:collect="always"
id="linearGradient2065">
<stop
style="stop-color:#555753"
offset="0"
id="stop2067" />
<stop
style="stop-color:#fcaf3e"
offset="1"
id="stop2069" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4928"
id="radialGradient4915"
cx="-6.0070167"
cy="32.837029"
fx="-6.0070167"
fy="32.837029"
r="9.90625"
gradientTransform="matrix(0.462962,0,0,0.44272,14.86446,6.713194)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4928">
<stop
id="stop4930"
offset="0"
style="stop-color:#fce94f;stop-opacity:1;" />
<stop
id="stop4932"
offset="1"
style="stop-color:#fce94f;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4616"
id="linearGradient4622"
x1="25.355263"
y1="34.006802"
x2="25.355263"
y2="32.409008"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.462962,0,0,0.461866,4.347921,6.0846753)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4616">
<stop
style="stop-color:#2e3436;stop-opacity:1;"
offset="0"
id="stop4618" />
<stop
style="stop-color:#2e3436;stop-opacity:0;"
offset="1"
id="stop4620" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.4076613"
inkscape:cx="160"
inkscape:cy="995.02261"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2340"
inkscape:window-height="1022"
inkscape:window-x="156"
inkscape:window-y="156"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="layer1-5"
inkscape:label="Ebene 1"
transform="matrix(2.3238903,0,0,2.3238903,-624.38128,-1263.9315)">
<g
inkscape:label="Layer 1"
id="layer1-6"
transform="translate(269.14287,-491.99997)">
<g
transform="matrix(0.69565065,0,0,0.80000484,24.148475,1040.5518)"
id="g4028">
<g
transform="translate(-38.71351,-12.237062)"
id="g2403">
<g
id="g3799"
transform="matrix(0.557846,0,0,0.461866,-85.36183,64.50698)"
inkscape:r_cx="true"
inkscape:r_cy="true"
style="opacity:0.58241763" />
<rect
style="opacity:1;fill:url(#linearGradient2813);fill-opacity:1;stroke:#8a8a8a;stroke-width:0.99999869;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2073"
width="22.000015"
height="19.00001"
x="4.500001"
y="7.4999981"
rx="1.8229138"
ry="1.8185979" />
<rect
style="opacity:1;fill:url(#linearGradient2071);fill-opacity:1;stroke:#888a85;stroke-width:1.01321542;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2063"
width="16.236822"
height="11.486709"
x="7.3816152"
y="11.256679"
rx="0.20280379"
ry="0.2071792" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient4915);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
d="m 11.79411,16.401215 c -2.392951,0.151471 -4.296871,2.150075 -4.296871,4.575364 0,0.09366 0.00889,0.181964 0.014468,0.274234 l 9.143509,0 c 0.0056,-0.09227 0.01447,-0.180574 0.01447,-0.274234 0,-2.523879 -2.056354,-4.575364 -4.586223,-4.575364 -0.09882,0 -0.192077,-0.0062 -0.289351,0 z"
id="path4898"
inkscape:r_cx="true"
inkscape:r_cy="true"
inkscape:connector-curvature="0" />
<rect
style="opacity:1;fill:url(#linearGradient4622);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1324"
width="15.740722"
height="0.92373294"
x="7.5886593"
y="21.326269"
rx="0"
ry="0" />
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999893;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2077"
width="20.000008"
height="16.99999"
x="5.5000043"
y="8.4999981"
rx="1.42609"
ry="1.4227122" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 18.031043,21.675958 c 0,0 -0.257213,-1.424098 -0.257213,-2.296525 0.0071,-0.39799 3.604954,-3.498458 3.614237,-3.960285 l -0.836462,0.727219 -0.585726,-1.589717 1.974613,0.204118 0.925925,-0.923733 -1.048689,0.768044 -0.360661,-0.08165 -0.4425,-1.610129 0.22506,1.569306 -1.63441,-0.08165 0.511509,1.29875 -1.416971,-1.400809 1.498813,1.949752 c 3.7e-5,0.43486 -2.954107,3.089518 -2.949079,2.631777 L 16.024282,17.241 l -0.102301,-2.216308 0.925925,-0.263924 0.811179,-1.99555 -1.069313,1.844378 -0.834796,-0.03774 -1.868696,-1.574507 -2.565841,-0.979767 2.192051,1.201894 -1.757172,0.155689 2.314813,0 1.388887,1.385599 0.163681,2.393383 -2.478493,-2.393383 1.042268,1.250322 -1.505231,1.05901 1.653439,-0.923733 2.615524,3.286696 -0.1023,2.242895 1.183137,0 z"
id="path2079"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
id="path4924"
d="m 11.925565,18.563623 c -1.305803,0.08266 -2.344749,1.17327 -2.344749,2.49672 0,0.05111 0.00485,0.0993 0.00789,0.149646 l 4.989498,0 c 0.003,-0.05035 0.0079,-0.09854 0.0079,-0.149646 0,-1.377249 -1.122129,-2.49672 -2.502647,-2.49672 -0.05393,0 -0.104814,-0.0034 -0.157896,0 z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#fef39e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
inkscape:connector-curvature="0" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#fffbd7;fill-opacity:0.55681817;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
d="m 11.963041,19.163267 c -0.995873,0.06304 -1.788226,0.894796 -1.788226,1.904128 0,0.03898 0.0037,0.07573 0.006,0.114127 l 3.805249,0 c 0.0023,-0.0384 0.006,-0.07515 0.006,-0.114127 0,-1.050362 -0.855793,-1.904128 -1.908647,-1.904128 -0.04113,0 -0.07994,-0.0026 -0.12042,0 z"
id="path4926"
inkscape:r_cx="true"
inkscape:r_cy="true"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
<g
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,81.714643,582.33533)"
style="stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g4559">
<path
style="fill:#0000ff;fill-opacity:1;stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 157.03498,113.29807 8.9e-4,-3.47688 1.13932,-1.14753 1.13933,-1.14754 1.16389,1.14589 1.1639,1.14588 0,3.47853 0,3.47853 -2.30411,0 -2.30411,0 8.9e-4,-3.47688 z"
id="path4551"
inkscape:connector-curvature="0" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4557"
cx="159.2991"
cy="109.53211"
r="0.58017093" />
</g>
</g>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#dbddda;stroke-width:0.1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4212"
width="39.872719"
height="36.549992"
x="157.41417"
y="451.77939" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,268 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 16 16"
id="svg4214"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="gimp-image-tag.svg">
<defs
id="defs4216">
<linearGradient
id="linearGradient19282"
osb:paint="solid"
gradientTransform="matrix(1.2178615,0,0,1.043881,378.84797,1794.4958)">
<stop
offset="0"
id="stop19284"
style="stop-color:#505050;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient19282-2"
osb:paint="solid"
gradientTransform="matrix(1.2178615,0,0,1.043881,356.69172,1794.4958)">
<stop
offset="0"
id="stop19284-1"
style="stop-color:#666666;stop-opacity:1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2807"
id="linearGradient2813"
x1="34.197105"
y1="33.725819"
x2="17.160702"
y2="17.396523"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.51166,0,0,0.475019,3.220846,5.837432)" />
<linearGradient
inkscape:collect="always"
id="linearGradient2807">
<stop
style="stop-color:#d3d7cf"
offset="0"
id="stop2809" />
<stop
style="stop-color:#eeeeec"
offset="1"
id="stop2811" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2065"
id="linearGradient2071"
x1="-11.986486"
y1="13.122552"
x2="-11.986486"
y2="29.726542"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.46355126,0,0,0.4786134,21.056353,5.7526316)" />
<linearGradient
inkscape:collect="always"
id="linearGradient2065">
<stop
style="stop-color:#555753"
offset="0"
id="stop2067" />
<stop
style="stop-color:#fcaf3e"
offset="1"
id="stop2069" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4928"
id="radialGradient4915"
cx="-6.0070167"
cy="32.837029"
fx="-6.0070167"
fy="32.837029"
r="9.90625"
gradientTransform="matrix(0.462962,0,0,0.44272,14.86446,6.713194)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4928">
<stop
id="stop4930"
offset="0"
style="stop-color:#fce94f;stop-opacity:1;" />
<stop
id="stop4932"
offset="1"
style="stop-color:#fce94f;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4616"
id="linearGradient4622"
x1="25.355263"
y1="34.006802"
x2="25.355263"
y2="32.409008"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.462962,0,0,0.461866,4.347921,6.0846753)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4616">
<stop
style="stop-color:#2e3436;stop-opacity:1;"
offset="0"
id="stop4618" />
<stop
style="stop-color:#2e3436;stop-opacity:0;"
offset="1"
id="stop4620" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.8436364"
inkscape:cx="41.428571"
inkscape:cy="1011.4286"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="3440"
inkscape:window-height="1377"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata4219">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="layer1-9"
inkscape:label="Ebene 1"
transform="translate(-268.84576,-544.6878)">
<g
inkscape:label="Layer 1"
id="layer1-6"
transform="translate(269.14287,-491.99997)">
<g
transform="matrix(0.69565065,0,0,0.80000484,24.148475,1040.5518)"
id="g4028">
<g
transform="translate(-38.71351,-12.237062)"
id="g2403">
<g
id="g3799"
transform="matrix(0.557846,0,0,0.461866,-85.36183,64.50698)"
inkscape:r_cx="true"
inkscape:r_cy="true"
style="opacity:0.58241763" />
<rect
style="opacity:1;fill:url(#linearGradient2813);fill-opacity:1;stroke:#8a8a8a;stroke-width:0.99999869;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2073"
width="22.000015"
height="19.00001"
x="4.500001"
y="7.4999981"
rx="1.8229138"
ry="1.8185979" />
<rect
style="opacity:1;fill:url(#linearGradient2071);fill-opacity:1;stroke:#888a85;stroke-width:1.01321542;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2063"
width="16.236822"
height="11.486709"
x="7.3816152"
y="11.256679"
rx="0.20280379"
ry="0.2071792" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient4915);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
d="m 11.79411,16.401215 c -2.392951,0.151471 -4.296871,2.150075 -4.296871,4.575364 0,0.09366 0.00889,0.181964 0.014468,0.274234 l 9.143509,0 c 0.0056,-0.09227 0.01447,-0.180574 0.01447,-0.274234 0,-2.523879 -2.056354,-4.575364 -4.586223,-4.575364 -0.09882,0 -0.192077,-0.0062 -0.289351,0 z"
id="path4898"
inkscape:r_cx="true"
inkscape:r_cy="true"
inkscape:connector-curvature="0" />
<rect
style="opacity:1;fill:url(#linearGradient4622);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect1324"
width="15.740722"
height="0.92373294"
x="7.5886593"
y="21.326269"
rx="0"
ry="0" />
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999893;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2077"
width="20.000008"
height="16.99999"
x="5.5000043"
y="8.4999981"
rx="1.42609"
ry="1.4227122" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 18.031043,21.675958 c 0,0 -0.257213,-1.424098 -0.257213,-2.296525 0.0071,-0.39799 3.604954,-3.498458 3.614237,-3.960285 l -0.836462,0.727219 -0.585726,-1.589717 1.974613,0.204118 0.925925,-0.923733 -1.048689,0.768044 -0.360661,-0.08165 -0.4425,-1.610129 0.22506,1.569306 -1.63441,-0.08165 0.511509,1.29875 -1.416971,-1.400809 1.498813,1.949752 c 3.7e-5,0.43486 -2.954107,3.089518 -2.949079,2.631777 L 16.024282,17.241 l -0.102301,-2.216308 0.925925,-0.263924 0.811179,-1.99555 -1.069313,1.844378 -0.834796,-0.03774 -1.868696,-1.574507 -2.565841,-0.979767 2.192051,1.201894 -1.757172,0.155689 2.314813,0 1.388887,1.385599 0.163681,2.393383 -2.478493,-2.393383 1.042268,1.250322 -1.505231,1.05901 1.653439,-0.923733 2.615524,3.286696 -0.1023,2.242895 1.183137,0 z"
id="path2079"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
id="path4924"
d="m 11.925565,18.563623 c -1.305803,0.08266 -2.344749,1.17327 -2.344749,2.49672 0,0.05111 0.00485,0.0993 0.00789,0.149646 l 4.989498,0 c 0.003,-0.05035 0.0079,-0.09854 0.0079,-0.149646 0,-1.377249 -1.122129,-2.49672 -2.502647,-2.49672 -0.05393,0 -0.104814,-0.0034 -0.157896,0 z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#fef39e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
inkscape:connector-curvature="0" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#fffbd7;fill-opacity:0.55681817;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
d="m 11.963041,19.163267 c -0.995873,0.06304 -1.788226,0.894796 -1.788226,1.904128 0,0.03898 0.0037,0.07573 0.006,0.114127 l 3.805249,0 c 0.0023,-0.0384 0.006,-0.07515 0.006,-0.114127 0,-1.050362 -0.855793,-1.904128 -1.908647,-1.904128 -0.04113,0 -0.07994,-0.0026 -0.12042,0 z"
id="path4926"
inkscape:r_cx="true"
inkscape:r_cy="true"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
<g
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,81.714643,582.33533)"
style="stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g4559">
<path
style="fill:#0000ff;fill-opacity:1;stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 157.03498,113.29807 8.9e-4,-3.47688 1.13932,-1.14753 1.13933,-1.14754 1.16389,1.14589 1.1639,1.14588 0,3.47853 0,3.47853 -2.30411,0 -2.30411,0 8.9e-4,-3.47688 z"
id="path4551"
inkscape:connector-curvature="0" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4557"
cx="159.2991"
cy="109.53211"
r="0.58017093" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 569 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,189 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="24"
id="svg4136"
version="1.1"
inkscape:version="0.91 r13725"
viewBox="0 0 24 24"
sodipodi:docname="gimp-image-tag-sym-24.svg"
inkscape:export-filename="D:\x\gimp-image-tag-sym-48.png"
inkscape:export-xdpi="68.080002"
inkscape:export-ydpi="68.080002">
<defs
id="defs4138">
<linearGradient
id="linearGradient8074"
osb:paint="solid">
<stop
style="stop-color:#be00be;stop-opacity:1;"
offset="0"
id="stop8072" />
</linearGradient>
<linearGradient
id="linearGradient7561"
osb:paint="solid">
<stop
style="stop-color:#a5a5a5;stop-opacity:1;"
offset="0"
id="stop7558" />
</linearGradient>
<linearGradient
id="linearGradient7548"
osb:paint="solid">
<stop
style="stop-color:#ebebeb;stop-opacity:1;"
offset="0"
id="stop7546" />
</linearGradient>
<linearGradient
id="linearGradient7542"
osb:paint="solid">
<stop
style="stop-color:#c9c9c9;stop-opacity:1;"
offset="0"
id="stop7538" />
</linearGradient>
<linearGradient
id="linearGradient19282"
osb:paint="solid"
gradientTransform="matrix(0,-735328.32,170712.69,0,2464326300,577972450)">
<stop
style="stop-color:#b4b4b4;stop-opacity:1;"
offset="0"
id="stop19284" />
</linearGradient>
<linearGradient
id="linearGradient19282-4"
osb:paint="solid"
gradientTransform="matrix(0.34682586,0,0,0.30620888,-13.35187,382.03851)">
<stop
style="stop-color:#bebebe;stop-opacity:1;"
offset="0"
id="stop19284-0" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient19282-4"
id="linearGradient10174"
x1="-97"
y1="168.5"
x2="-87"
y2="168.5"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(520.93726,194.66866)" />
<linearGradient
xlink:href="#linearGradient19282-4"
id="linearGradient10176"
x1="142.0002"
y1="386.95001"
x2="156.0002"
y2="386.95001"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(520.93726,194.66866)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.5"
inkscape:cx="-7.7272727"
inkscape:cy="32"
inkscape:current-layer="g4559"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="3440"
inkscape:window-height="1377"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata4141">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-40)">
<g
id="stock"
style="display:inline"
transform="matrix(1.4886364,0,0,1.508596,-93.79,-1.8312358)"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643">
<g
transform="translate(-77.874095,-351.36258)"
style="display:inline"
id="gimp-image">
<rect
transform="translate(241.0002,217)"
y="162"
x="-100"
height="16"
width="16"
id="rect6346"
style="fill:none;stroke:none" />
<path
inkscape:connector-curvature="0"
id="rect5882"
d="m 142.0002,379.9 0,14.1 14,0 0,-14.1 z m 1,1.1 12,0 0,9 -12,0 z"
style="fill:url(#linearGradient10176);fill-opacity:1;stroke:none" />
<path
inkscape:connector-curvature="0"
id="rect10683"
transform="translate(241.0002,217)"
d="m -97,165 0,7 1,0 c 0,-0.75515 0.671573,-1.375 1.5,-1.375 0.828427,0 1.5,0.61985 1.5,1.375 l 1,0 0,-1.5 c 1.4e-4,-0.98573 -0.7274,-1.47402 -2,-2.0625 0,0 0.02947,3.7e-4 0.25,0 0.40803,0.0835 1.38212,0.3501 1.75,0.59375 -0.09819,-0.35554 -0.14101,-0.89353 -0.4375,-1.34375 C -92.73401,167.23732 -94,166.34375 -94,166.34375 l 0.0625,-0.0312 c 0.05568,-0.0402 0.9453,0.7655 1.25,0.6875 -0.13515,-0.32497 -0.25949,-0.63468 -0.40625,-0.8125 l 0.1875,-0.0312 c 0.35629,0.59147 0.46684,0.72309 0.84375,1.15625 0.12472,0.0571 -0.03108,-0.0423 1.0625,-0.59375 L -91,167 c 0,0 -1.0625,0.30993 -0.75,0.90625 0.22248,0.30573 0.39823,1.01025 0.75,1.09375 0,0 0.85009,-1.22532 1.5,-1.625 0,0 -0.21923,-0.50879 -0.21875,-0.78125 3.7e-4,-0.20918 0.15625,-0.59375 0.15625,-0.59375 0.02319,0.39561 -0.0029,0.83091 0.28125,1.21875 L -88.34375,166 -88,166 c 0,0 -2.25088,2.3886 -2,2.78125 0.39455,-0.048 2,-0.34375 2,-0.34375 l 0,0.0625 c -1.04689,0.34884 -1.67111,0.68872 -2,1.5 l 0,2 3,0 0,-7 z"
style="opacity:0.3;fill:url(#linearGradient10174);fill-opacity:1;stroke:none" />
</g>
</g>
<g
transform="matrix(2.1155203,-2.1155203,2.1155203,2.1155203,-559.23734,114.18176)"
style="fill:#808080;stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g4559">
<path
style="fill:#999999;fill-opacity:1;stroke:#f7ffff;stroke-width:0.03767881;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 148.95421,117.66287 0.005,-1.31006 0.43094,-0.434 0.43093,-0.43402 0.4369,0.43009 0.43691,0.43009 -0.005,1.31068 -0.005,1.31067 -0.86817,0.003 -0.86817,0.003 0.005,-1.31005 z"
id="path4551"
inkscape:connector-curvature="0"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#f7ffff;stroke-width:0.03767936;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4557"
cx="150.25793"
cy="116.81281"
r="0.21860467"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643"
transform="matrix(0.99999277,-0.00380225,-0.00380225,0.99999277,0,0)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2"
transform="translate(0,-40)" />
</svg>

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 739 B

View File

@ -1,189 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="24"
id="svg4136"
version="1.1"
inkscape:version="0.91 r13725"
viewBox="0 0 24 24"
sodipodi:docname="gimp-image-tag-sym-24.svg"
inkscape:export-filename="D:\x\gimp-image-tag-sym-48.png"
inkscape:export-xdpi="68.080002"
inkscape:export-ydpi="68.080002">
<defs
id="defs4138">
<linearGradient
id="linearGradient8074"
osb:paint="solid">
<stop
style="stop-color:#be00be;stop-opacity:1;"
offset="0"
id="stop8072" />
</linearGradient>
<linearGradient
id="linearGradient7561"
osb:paint="solid">
<stop
style="stop-color:#a5a5a5;stop-opacity:1;"
offset="0"
id="stop7558" />
</linearGradient>
<linearGradient
id="linearGradient7548"
osb:paint="solid">
<stop
style="stop-color:#ebebeb;stop-opacity:1;"
offset="0"
id="stop7546" />
</linearGradient>
<linearGradient
id="linearGradient7542"
osb:paint="solid">
<stop
style="stop-color:#c9c9c9;stop-opacity:1;"
offset="0"
id="stop7538" />
</linearGradient>
<linearGradient
id="linearGradient19282"
osb:paint="solid"
gradientTransform="matrix(0,-735328.32,170712.69,0,2464326300,577972450)">
<stop
style="stop-color:#b4b4b4;stop-opacity:1;"
offset="0"
id="stop19284" />
</linearGradient>
<linearGradient
id="linearGradient19282-4"
osb:paint="solid"
gradientTransform="matrix(0.34682586,0,0,0.30620888,-13.35187,382.03851)">
<stop
style="stop-color:#bebebe;stop-opacity:1;"
offset="0"
id="stop19284-0" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient19282-4"
id="linearGradient10174"
x1="-97"
y1="168.5"
x2="-87"
y2="168.5"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(520.93726,194.66866)" />
<linearGradient
xlink:href="#linearGradient19282-4"
id="linearGradient10176"
x1="142.0002"
y1="386.95001"
x2="156.0002"
y2="386.95001"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(520.93726,194.66866)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.5"
inkscape:cx="-7.7272727"
inkscape:cy="32"
inkscape:current-layer="g4559"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="3440"
inkscape:window-height="1377"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata4141">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-40)">
<g
id="stock"
style="display:inline"
transform="matrix(1.4886364,0,0,1.508596,-93.79,-1.8312358)"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643">
<g
transform="translate(-77.874095,-351.36258)"
style="display:inline"
id="gimp-image">
<rect
transform="translate(241.0002,217)"
y="162"
x="-100"
height="16"
width="16"
id="rect6346"
style="fill:none;stroke:none" />
<path
inkscape:connector-curvature="0"
id="rect5882"
d="m 142.0002,379.9 0,14.1 14,0 0,-14.1 z m 1,1.1 12,0 0,9 -12,0 z"
style="fill:url(#linearGradient10176);fill-opacity:1;stroke:none" />
<path
inkscape:connector-curvature="0"
id="rect10683"
transform="translate(241.0002,217)"
d="m -97,165 0,7 1,0 c 0,-0.75515 0.671573,-1.375 1.5,-1.375 0.828427,0 1.5,0.61985 1.5,1.375 l 1,0 0,-1.5 c 1.4e-4,-0.98573 -0.7274,-1.47402 -2,-2.0625 0,0 0.02947,3.7e-4 0.25,0 0.40803,0.0835 1.38212,0.3501 1.75,0.59375 -0.09819,-0.35554 -0.14101,-0.89353 -0.4375,-1.34375 C -92.73401,167.23732 -94,166.34375 -94,166.34375 l 0.0625,-0.0312 c 0.05568,-0.0402 0.9453,0.7655 1.25,0.6875 -0.13515,-0.32497 -0.25949,-0.63468 -0.40625,-0.8125 l 0.1875,-0.0312 c 0.35629,0.59147 0.46684,0.72309 0.84375,1.15625 0.12472,0.0571 -0.03108,-0.0423 1.0625,-0.59375 L -91,167 c 0,0 -1.0625,0.30993 -0.75,0.90625 0.22248,0.30573 0.39823,1.01025 0.75,1.09375 0,0 0.85009,-1.22532 1.5,-1.625 0,0 -0.21923,-0.50879 -0.21875,-0.78125 3.7e-4,-0.20918 0.15625,-0.59375 0.15625,-0.59375 0.02319,0.39561 -0.0029,0.83091 0.28125,1.21875 L -88.34375,166 -88,166 c 0,0 -2.25088,2.3886 -2,2.78125 0.39455,-0.048 2,-0.34375 2,-0.34375 l 0,0.0625 c -1.04689,0.34884 -1.67111,0.68872 -2,1.5 l 0,2 3,0 0,-7 z"
style="opacity:0.3;fill:url(#linearGradient10174);fill-opacity:1;stroke:none" />
</g>
</g>
<g
transform="matrix(2.1155203,-2.1155203,2.1155203,2.1155203,-559.23734,114.18176)"
style="fill:#808080;stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g4559">
<path
style="fill:#999999;fill-opacity:1;stroke:#f7ffff;stroke-width:0.03767881;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 148.95421,117.66287 0.005,-1.31006 0.43094,-0.434 0.43093,-0.43402 0.4369,0.43009 0.43691,0.43009 -0.005,1.31068 -0.005,1.31067 -0.86817,0.003 -0.86817,0.003 0.005,-1.31005 z"
id="path4551"
inkscape:connector-curvature="0"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#f7ffff;stroke-width:0.03767936;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4557"
cx="150.25793"
cy="116.81281"
r="0.21860467"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643"
transform="matrix(0.99999277,-0.00380225,-0.00380225,0.99999277,0,0)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2"
transform="translate(0,-40)" />
</svg>

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,189 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg4136"
version="1.1"
inkscape:version="0.91 r13725"
viewBox="0 0 16 16"
sodipodi:docname="gimp-image-tag-sym-16.svg"
inkscape:export-filename="D:\x\gimp-image-tag-sym-48.png"
inkscape:export-xdpi="68.080002"
inkscape:export-ydpi="68.080002">
<defs
id="defs4138">
<linearGradient
id="linearGradient8074"
osb:paint="solid">
<stop
style="stop-color:#be00be;stop-opacity:1;"
offset="0"
id="stop8072" />
</linearGradient>
<linearGradient
id="linearGradient7561"
osb:paint="solid">
<stop
style="stop-color:#a5a5a5;stop-opacity:1;"
offset="0"
id="stop7558" />
</linearGradient>
<linearGradient
id="linearGradient7548"
osb:paint="solid">
<stop
style="stop-color:#ebebeb;stop-opacity:1;"
offset="0"
id="stop7546" />
</linearGradient>
<linearGradient
id="linearGradient7542"
osb:paint="solid">
<stop
style="stop-color:#c9c9c9;stop-opacity:1;"
offset="0"
id="stop7538" />
</linearGradient>
<linearGradient
id="linearGradient19282"
osb:paint="solid"
gradientTransform="matrix(0,-735328.32,170712.69,0,2464326300,577972450)">
<stop
style="stop-color:#b4b4b4;stop-opacity:1;"
offset="0"
id="stop19284" />
</linearGradient>
<linearGradient
id="linearGradient19282-4"
osb:paint="solid"
gradientTransform="matrix(0.34682586,0,0,0.30620888,-13.35187,382.03851)">
<stop
style="stop-color:#bebebe;stop-opacity:1;"
offset="0"
id="stop19284-0" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient19282-4"
id="linearGradient10174"
x1="-97"
y1="168.5"
x2="-87"
y2="168.5"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(520.93726,194.66866)" />
<linearGradient
xlink:href="#linearGradient19282-4"
id="linearGradient10176"
x1="142.0002"
y1="386.95001"
x2="156.0002"
y2="386.95001"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(520.93726,194.66866)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.5"
inkscape:cx="-7.7272727"
inkscape:cy="32"
inkscape:current-layer="g4559"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="3440"
inkscape:window-height="1377"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata4141">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-48)">
<g
id="stock"
style="display:inline"
transform="matrix(0.97282511,0,0,0.98586873,-61.228842,20.979234)"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643">
<g
transform="translate(-77.874095,-351.36258)"
style="display:inline"
id="gimp-image">
<rect
transform="translate(241.0002,217)"
y="162"
x="-100"
height="16"
width="16"
id="rect6346"
style="fill:none;stroke:none" />
<path
inkscape:connector-curvature="0"
id="rect5882"
d="m 142.0002,379.9 0,14.1 14,0 0,-14.1 z m 1,1.1 12,0 0,9 -12,0 z"
style="fill:url(#linearGradient10176);fill-opacity:1;stroke:none" />
<path
inkscape:connector-curvature="0"
id="rect10683"
transform="translate(241.0002,217)"
d="m -97,165 0,7 1,0 c 0,-0.75515 0.671573,-1.375 1.5,-1.375 0.828427,0 1.5,0.61985 1.5,1.375 l 1,0 0,-1.5 c 1.4e-4,-0.98573 -0.7274,-1.47402 -2,-2.0625 0,0 0.02947,3.7e-4 0.25,0 0.40803,0.0835 1.38212,0.3501 1.75,0.59375 -0.09819,-0.35554 -0.14101,-0.89353 -0.4375,-1.34375 C -92.73401,167.23732 -94,166.34375 -94,166.34375 l 0.0625,-0.0312 c 0.05568,-0.0402 0.9453,0.7655 1.25,0.6875 -0.13515,-0.32497 -0.25949,-0.63468 -0.40625,-0.8125 l 0.1875,-0.0312 c 0.35629,0.59147 0.46684,0.72309 0.84375,1.15625 0.12472,0.0571 -0.03108,-0.0423 1.0625,-0.59375 L -91,167 c 0,0 -1.0625,0.30993 -0.75,0.90625 0.22248,0.30573 0.39823,1.01025 0.75,1.09375 0,0 0.85009,-1.22532 1.5,-1.625 0,0 -0.21923,-0.50879 -0.21875,-0.78125 3.7e-4,-0.20918 0.15625,-0.59375 0.15625,-0.59375 0.02319,0.39561 -0.0029,0.83091 0.28125,1.21875 L -88.34375,166 -88,166 c 0,0 -2.25088,2.3886 -2,2.78125 0.39455,-0.048 2,-0.34375 2,-0.34375 l 0,0.0625 c -1.04689,0.34884 -1.67111,0.68872 -2,1.5 l 0,2 3,0 0,-7 z"
style="opacity:0.3;fill:url(#linearGradient10174);fill-opacity:1;stroke:none" />
</g>
</g>
<g
transform="matrix(2.1155203,-2.1155203,2.1155203,2.1155203,-559.23734,114.18176)"
style="fill:#808080;stroke:#f7ffff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g4559">
<path
style="fill:#999999;fill-opacity:1;stroke:#f7ffff;stroke-width:0.02462314;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 147.26469,118.59655 0.003,-0.85612 0.28162,-0.28362 0.28161,-0.28364 0.28552,0.28107 0.28552,0.28106 -0.003,0.85653 -0.003,0.85653 -0.56735,0.002 -0.56735,0.002 0.003,-0.85612 z"
id="path4551"
inkscape:connector-curvature="0"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#f7ffff;stroke-width:0.02462349;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4557"
cx="148.27634"
cy="118.23177"
r="0.14285833"
inkscape:export-xdpi="90.773643"
inkscape:export-ydpi="90.773643"
transform="matrix(0.99999277,-0.00380225,-0.00380225,0.99999277,0,0)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2"
transform="translate(0,-48)" />
</svg>

Before

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -142,7 +142,6 @@ scalable_images = \
scalable/gimp-histogram.svg \ scalable/gimp-histogram.svg \
scalable/gimp-images.svg \ scalable/gimp-images.svg \
scalable/gimp-image.svg \ scalable/gimp-image.svg \
scalable/gimp-image-metadata.svg \
scalable/gimp-image-open.svg \ scalable/gimp-image-open.svg \
scalable/gimp-image-reload.svg \ scalable/gimp-image-reload.svg \
scalable/gimp-info.svg \ scalable/gimp-info.svg \
@ -354,7 +353,6 @@ vector24_images = \
24/gimp-grid.svg \ 24/gimp-grid.svg \
24/gimp-histogram.svg \ 24/gimp-histogram.svg \
24/gimp-image.svg \ 24/gimp-image.svg \
24/gimp-image-metadata.svg \
24/gimp-images.svg \ 24/gimp-images.svg \
24/gimp-info.svg \ 24/gimp-info.svg \
24/gimp-landscape.svg \ 24/gimp-landscape.svg \
@ -607,7 +605,6 @@ icons16_images = \
16/gimp-histogram-logarithmic.png \ 16/gimp-histogram-logarithmic.png \
16/gimp-histogram.png \ 16/gimp-histogram.png \
16/gimp-image.png \ 16/gimp-image.png \
16/gimp-image-metadata.png \
16/gimp-images.png \ 16/gimp-images.png \
16/gimp-image-open.png \ 16/gimp-image-open.png \
16/gimp-image-reload.png \ 16/gimp-image-reload.png \
@ -864,7 +861,6 @@ icons24_images = \
24/gimp-hchain.png \ 24/gimp-hchain.png \
24/gimp-hfill.png \ 24/gimp-hfill.png \
24/gimp-image.png \ 24/gimp-image.png \
24/gimp-image-metadata.png \
24/gimp-images.png \ 24/gimp-images.png \
24/gimp-info.png \ 24/gimp-info.png \
24/gimp-layer-mask.png \ 24/gimp-layer-mask.png \
@ -974,7 +970,6 @@ icons48_images = \
48/gimp-channel.png \ 48/gimp-channel.png \
48/gimp-floating-selection.png \ 48/gimp-floating-selection.png \
48/gimp-image.png \ 48/gimp-image.png \
48/gimp-image-metadata.png \
48/gimp-layer-mask.png \ 48/gimp-layer-mask.png \
48/gimp-layer.png \ 48/gimp-layer.png \
48/gimp-prefs-color-management.png \ 48/gimp-prefs-color-management.png \

View File

@ -222,8 +222,6 @@ libgimp_sources = \
gimpimage.h \ gimpimage.h \
gimpimagecolorprofile.c \ gimpimagecolorprofile.c \
gimpimagecolorprofile.h \ gimpimagecolorprofile.h \
gimpitem.c \
gimpitem.h \
gimplayer.c \ gimplayer.c \
gimplayer.h \ gimplayer.h \
gimppalette.c \ gimppalette.c \
@ -347,7 +345,6 @@ gimpinclude_HEADERS = \
gimpgradientselect.h \ gimpgradientselect.h \
gimpimage.h \ gimpimage.h \
gimpimagecolorprofile.h \ gimpimagecolorprofile.h \
gimpitem.h \
gimplayer.h \ gimplayer.h \
gimppalette.h \ gimppalette.h \
gimppalettes.h \ gimppalettes.h \

View File

@ -557,7 +557,6 @@ EXPORTS
gimp_item_get_linked gimp_item_get_linked
gimp_item_get_lock_content gimp_item_get_lock_content
gimp_item_get_lock_position gimp_item_get_lock_position
gimp_item_get_metadata
gimp_item_get_name gimp_item_get_name
gimp_item_get_parasite gimp_item_get_parasite
gimp_item_get_parasite_list gimp_item_get_parasite_list
@ -577,7 +576,6 @@ EXPORTS
gimp_item_set_linked gimp_item_set_linked
gimp_item_set_lock_content gimp_item_set_lock_content
gimp_item_set_lock_position gimp_item_set_lock_position
gimp_item_set_metadata
gimp_item_set_name gimp_item_set_name
gimp_item_set_tattoo gimp_item_set_tattoo
gimp_item_set_visible gimp_item_set_visible

View File

@ -46,7 +46,6 @@
#include <libgimp/gimpgradientselect.h> #include <libgimp/gimpgradientselect.h>
#include <libgimp/gimpimage.h> #include <libgimp/gimpimage.h>
#include <libgimp/gimpimagecolorprofile.h> #include <libgimp/gimpimagecolorprofile.h>
#include <libgimp/gimpitem.h>
#include <libgimp/gimplayer.h> #include <libgimp/gimplayer.h>
#include <libgimp/gimppalette.h> #include <libgimp/gimppalette.h>
#include <libgimp/gimppalettes.h> #include <libgimp/gimppalettes.h>

View File

@ -28,7 +28,6 @@
#include "gimp.h" #include "gimp.h"
#include "gimpui.h" #include "gimpui.h"
#include "gimpimagemetadata.h" #include "gimpimagemetadata.h"
#include "libgimpbase/gimpbase.h"
#include "libgimp-intl.h" #include "libgimp-intl.h"
@ -45,6 +44,7 @@ static gboolean gimp_image_metadata_rotate_dialog (gint32 image_I
GExiv2Orientation orientation, GExiv2Orientation orientation,
const gchar *parasite_name); const gchar *parasite_name);
/* public functions */ /* public functions */
/** /**
@ -67,7 +67,7 @@ gimp_image_metadata_load_prepare (gint32 image_ID,
GFile *file, GFile *file,
GError **error) GError **error)
{ {
GimpMetadata *metadata; GimpMetadata *metadata;
g_return_val_if_fail (image_ID > 0, NULL); g_return_val_if_fail (image_ID > 0, NULL);
g_return_val_if_fail (mime_type != NULL, NULL); g_return_val_if_fail (mime_type != NULL, NULL);
@ -81,24 +81,18 @@ gimp_image_metadata_load_prepare (gint32 image_ID,
#if 0 #if 0
{ {
gchar *xml = gimp_metadata_serialize (metadata); gchar *xml = gimp_metadata_serialize (metadata);
GimpMetadata *new = gimp_metadata_deserialize (xml);
gchar *xml2 = gimp_metadata_serialize (new);
// FILE *f = fopen ("/tmp/gimp-test-xml1", "w"); FILE *f = fopen ("/tmp/gimp-test-xml1", "w");
FILE *f = fopen ("e:\\gimp-test-xml1", "w");
fprintf (f, "%s", xml); fprintf (f, "%s", xml);
fclose (f); fclose (f);
GimpMetadata *new = gimp_metadata_deserialize (xml); f = fopen ("/tmp/gimp-test-xml2", "w");
gimp_metadata_print (new);
gchar *xml2 = gimp_metadata_serialize (new);
// f = fopen ("/tmp/gimp-test-xml2", "w");
f = fopen ("e:\\gimp-test-xml2", "w");
fprintf (f, "%s", xml2); fprintf (f, "%s", xml2);
fclose (f); fclose (f);
// system ("diff -u /tmp/gimp-test-xml1 /tmp/gimp-test-xml2"); system ("diff -u /tmp/gimp-test-xml1 /tmp/gimp-test-xml2");
g_free (xml); g_free (xml);
g_free (xml2); g_free (xml2);
@ -106,7 +100,7 @@ gimp_image_metadata_load_prepare (gint32 image_ID,
} }
#endif #endif
gexiv2_metadata_erase_exif_thumbnail (GEXIV2_METADATA (metadata)); gexiv2_metadata_erase_exif_thumbnail (metadata);
} }
return metadata; return metadata;
@ -128,7 +122,6 @@ gimp_image_metadata_load_prepare (gint32 image_ID,
*/ */
void void
gimp_image_metadata_load_finish (gint32 image_ID, gimp_image_metadata_load_finish (gint32 image_ID,
gint32 layer_ID,
const gchar *mime_type, const gchar *mime_type,
GimpMetadata *metadata, GimpMetadata *metadata,
GimpMetadataLoadFlags flags, GimpMetadataLoadFlags flags,
@ -136,28 +129,17 @@ gimp_image_metadata_load_finish (gint32 image_ID,
{ {
g_return_if_fail (image_ID > 0); g_return_if_fail (image_ID > 0);
g_return_if_fail (mime_type != NULL); g_return_if_fail (mime_type != NULL);
g_return_if_fail (IS_GIMP_METADATA(metadata)); g_return_if_fail (GEXIV2_IS_METADATA (metadata));
if (flags & GIMP_METADATA_LOAD_ORIENTATION)
{
gimp_image_metadata_rotate_query (image_ID, mime_type,
metadata, interactive);
}
if (flags & GIMP_METADATA_LOAD_COMMENT) if (flags & GIMP_METADATA_LOAD_COMMENT)
{ {
GimpAttribute *attribute = NULL; gchar *comment;
gchar *comment = NULL;
attribute = gimp_metadata_get_attribute (metadata, "Exif.Photo.UserComment"); comment = gexiv2_metadata_get_tag_interpreted_string (metadata,
if (attribute) "Exif.Photo.UserComment");
comment = gimp_attribute_get_string (attribute); if (! comment)
else comment = gexiv2_metadata_get_tag_interpreted_string (metadata,
{ "Exif.Image.ImageDescription");
attribute = gimp_metadata_get_attribute (metadata, "Exif.Image.ImageDescription");
if (attribute)
comment = gimp_attribute_get_string (attribute);
}
if (comment) if (comment)
{ {
@ -173,6 +155,7 @@ gimp_image_metadata_load_finish (gint32 image_ID,
gimp_parasite_free (parasite); gimp_parasite_free (parasite);
} }
} }
if (flags & GIMP_METADATA_LOAD_RESOLUTION) if (flags & GIMP_METADATA_LOAD_RESOLUTION)
{ {
gdouble xres; gdouble xres;
@ -186,10 +169,19 @@ gimp_image_metadata_load_finish (gint32 image_ID,
} }
} }
if (flags & GIMP_METADATA_LOAD_ORIENTATION)
{
gimp_image_metadata_rotate_query (image_ID, mime_type,
metadata, interactive);
}
if (flags & GIMP_METADATA_LOAD_COLORSPACE) if (flags & GIMP_METADATA_LOAD_COLORSPACE)
{ {
GimpColorProfile *profile = gimp_image_get_color_profile (image_ID); GimpColorProfile *profile = gimp_image_get_color_profile (image_ID);
/* only look for colorspace information from metadata if the
* image didn't contain an embedded color profile
*/
if (! profile) if (! profile)
{ {
GimpMetadataColorspace colorspace; GimpMetadataColorspace colorspace;
@ -217,11 +209,7 @@ gimp_image_metadata_load_finish (gint32 image_ID,
g_object_unref (profile); g_object_unref (profile);
} }
gimp_image_set_metadata (image_ID, metadata); gimp_image_set_metadata (image_ID, metadata);
if (layer_ID > 0)
{
gimp_item_set_metadata (layer_ID, metadata);
}
} }
/** /**
@ -231,7 +219,7 @@ gimp_image_metadata_load_finish (gint32 image_ID,
* @suggested_flags: Suggested default values for the @flags passed to * @suggested_flags: Suggested default values for the @flags passed to
* gimp_image_metadata_save_finish() * gimp_image_metadata_save_finish()
* *
* Gets the image attributes for saving using * Gets the image metadata for saving it using
* gimp_image_metadata_save_finish(). * gimp_image_metadata_save_finish().
* *
* The @suggested_flags are determined from what kind of metadata * The @suggested_flags are determined from what kind of metadata
@ -239,7 +227,7 @@ gimp_image_metadata_load_finish (gint32 image_ID,
* value for GIMP_METADATA_SAVE_THUMBNAIL is determined by whether * value for GIMP_METADATA_SAVE_THUMBNAIL is determined by whether
* there was a thumbnail in the previously imported image. * there was a thumbnail in the previously imported image.
* *
* Returns: The image's attributes, prepared for saving. * Returns: The image's metadata, prepared for saving.
* *
* Since: 2.10 * Since: 2.10
*/ */
@ -248,7 +236,7 @@ gimp_image_metadata_save_prepare (gint32 image_ID,
const gchar *mime_type, const gchar *mime_type,
GimpMetadataSaveFlags *suggested_flags) GimpMetadataSaveFlags *suggested_flags)
{ {
GimpMetadata *metadata = NULL; GimpMetadata *metadata;
g_return_val_if_fail (image_ID > 0, NULL); g_return_val_if_fail (image_ID > 0, NULL);
g_return_val_if_fail (mime_type != NULL, NULL); g_return_val_if_fail (mime_type != NULL, NULL);
@ -256,36 +244,133 @@ gimp_image_metadata_save_prepare (gint32 image_ID,
*suggested_flags = GIMP_METADATA_SAVE_ALL; *suggested_flags = GIMP_METADATA_SAVE_ALL;
/* this is a GimpMetadata XML-Packet
* it is deserialized to a GimpMetadata object.
* Deserialization fills the GExiv2Metadata object of the GimpMetadata*/
metadata = gimp_image_get_metadata (image_ID); metadata = gimp_image_get_metadata (image_ID);
if (metadata) if (metadata)
{ {
GDateTime *datetime;
const GimpParasite *comment_parasite;
const gchar *comment = NULL;
gint image_width;
gint image_height;
gdouble xres;
gdouble yres;
gchar buffer[32];
image_width = gimp_image_width (image_ID);
image_height = gimp_image_height (image_ID);
datetime = g_date_time_new_now_local ();
comment_parasite = gimp_image_get_parasite (image_ID, "gimp-comment");
if (comment_parasite)
comment = gimp_parasite_data (comment_parasite);
/* Exif */ /* Exif */
if (! gimp_metadata_has_tag_type (metadata, TAG_EXIF)) if (! gexiv2_metadata_has_exif (metadata))
*suggested_flags &= ~GIMP_METADATA_SAVE_EXIF; *suggested_flags &= ~GIMP_METADATA_SAVE_EXIF;
if (comment)
{
gexiv2_metadata_set_tag_string (metadata,
"Exif.Photo.UserComment",
comment);
gexiv2_metadata_set_tag_string (metadata,
"Exif.Image.ImageDescription",
comment);
}
g_snprintf (buffer, sizeof (buffer),
"%d:%02d:%02d %02d:%02d:%02d",
g_date_time_get_year (datetime),
g_date_time_get_month (datetime),
g_date_time_get_day_of_month (datetime),
g_date_time_get_hour (datetime),
g_date_time_get_minute (datetime),
g_date_time_get_second (datetime));
gexiv2_metadata_set_tag_string (metadata,
"Exif.Image.DateTime",
buffer);
gexiv2_metadata_set_tag_string (metadata,
"Exif.Image.Software",
PACKAGE_STRING);
gimp_metadata_set_pixel_size (metadata,
image_width, image_height);
gimp_image_get_resolution (image_ID, &xres, &yres);
gimp_metadata_set_resolution (metadata, xres, yres,
gimp_image_get_unit (image_ID));
/* XMP */ /* XMP */
if (! gimp_metadata_has_tag_type (metadata, TAG_XMP)) if (! gexiv2_metadata_has_xmp (metadata))
*suggested_flags &= ~GIMP_METADATA_SAVE_XMP; *suggested_flags &= ~GIMP_METADATA_SAVE_XMP;
gexiv2_metadata_set_tag_string (metadata,
"Xmp.dc.Format",
mime_type);
if (! g_strcmp0 (mime_type, "image/tiff"))
{
/* TIFF specific XMP data */
g_snprintf (buffer, sizeof (buffer), "%d", image_width);
gexiv2_metadata_set_tag_string (metadata,
"Xmp.tiff.ImageWidth",
buffer);
g_snprintf (buffer, sizeof (buffer), "%d", image_height);
gexiv2_metadata_set_tag_string (metadata,
"Xmp.tiff.ImageLength",
buffer);
g_snprintf (buffer, sizeof (buffer),
"%d:%02d:%02d %02d:%02d:%02d",
g_date_time_get_year (datetime),
g_date_time_get_month (datetime),
g_date_time_get_day_of_month (datetime),
g_date_time_get_hour (datetime),
g_date_time_get_minute (datetime),
g_date_time_get_second (datetime));
gexiv2_metadata_set_tag_string (metadata,
"Xmp.tiff.DateTime",
buffer);
}
/* IPTC */ /* IPTC */
if (! gimp_metadata_has_tag_type (metadata, TAG_IPTC)) if (! gexiv2_metadata_has_iptc (metadata))
*suggested_flags &= ~GIMP_METADATA_SAVE_IPTC; *suggested_flags &= ~GIMP_METADATA_SAVE_IPTC;
g_snprintf (buffer, sizeof (buffer),
"%d-%d-%d",
g_date_time_get_year (datetime),
g_date_time_get_month (datetime),
g_date_time_get_day_of_month (datetime));
gexiv2_metadata_set_tag_string (metadata,
"Iptc.Application2.DateCreated",
buffer);
g_snprintf (buffer, sizeof (buffer),
"%02d:%02d:%02d-%02d:%02d",
g_date_time_get_hour (datetime),
g_date_time_get_minute (datetime),
g_date_time_get_second (datetime),
g_date_time_get_hour (datetime),
g_date_time_get_minute (datetime));
gexiv2_metadata_set_tag_string (metadata,
"Iptc.Application2.TimeCreated",
buffer);
g_date_time_unref (datetime);
/* Thumbnail */ /* Thumbnail */
if (FALSE /* FIXME if (original image had a thumbnail) */) if (FALSE /* FIXME if (original image had a thumbnail) */)
*suggested_flags &= ~GIMP_METADATA_SAVE_THUMBNAIL; *suggested_flags &= ~GIMP_METADATA_SAVE_THUMBNAIL;
} }
return metadata; return metadata;
@ -316,26 +401,17 @@ gimp_image_metadata_save_finish (gint32 image_ID,
GFile *file, GFile *file,
GError **error) GError **error)
{ {
GExiv2Metadata *gimpmetadata; GExiv2Metadata *new_metadata;
GExiv2Metadata *filemetadata;
GimpMetadata *gexivdata;
gboolean success = FALSE;
gchar buffer[32];
GDateTime *datetime;
const GimpParasite *comment_parasite;
const gchar *comment = NULL;
gint image_width;
gint image_height;
gdouble xres;
gdouble yres;
gchar *value;
gboolean support_exif; gboolean support_exif;
gboolean support_xmp; gboolean support_xmp;
gboolean support_iptc; gboolean support_iptc;
gchar *value;
gboolean success = FALSE;
gint i;
g_return_val_if_fail (image_ID > 0, FALSE); g_return_val_if_fail (image_ID > 0, FALSE);
g_return_val_if_fail (mime_type != NULL, FALSE); g_return_val_if_fail (mime_type != NULL, FALSE);
g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), FALSE);
g_return_val_if_fail (G_IS_FILE (file), FALSE); g_return_val_if_fail (G_IS_FILE (file), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@ -345,199 +421,74 @@ gimp_image_metadata_save_finish (gint32 image_ID,
GIMP_METADATA_SAVE_THUMBNAIL))) GIMP_METADATA_SAVE_THUMBNAIL)))
return TRUE; return TRUE;
image_width = gimp_image_width (image_ID);
image_height = gimp_image_height (image_ID);
datetime = g_date_time_new_now_local ();
comment_parasite = gimp_image_get_parasite (image_ID, "gimp-comment");
if (comment_parasite)
comment = gimp_parasite_data (comment_parasite);
/* read metadata from saved file */ /* read metadata from saved file */
gexivdata = gimp_metadata_load_from_file (file, error); new_metadata = gimp_metadata_load_from_file (file, error);
if (! gexivdata) if (! new_metadata)
return FALSE; return FALSE;
filemetadata = GEXIV2_METADATA (gexivdata); support_exif = gexiv2_metadata_get_supports_exif (new_metadata);
gimpmetadata = GEXIV2_METADATA (metadata); support_xmp = gexiv2_metadata_get_supports_xmp (new_metadata);
support_iptc = gexiv2_metadata_get_supports_iptc (new_metadata);
support_exif = gexiv2_metadata_get_supports_exif (filemetadata); if ((flags & GIMP_METADATA_SAVE_EXIF) && support_exif)
support_xmp = gexiv2_metadata_get_supports_xmp (filemetadata);
support_iptc = gexiv2_metadata_get_supports_iptc (filemetadata);
/* Exif */
if (flags & GIMP_METADATA_SAVE_EXIF && support_exif)
{ {
gint i; gchar **exif_data = gexiv2_metadata_get_exif_tags (metadata);
gchar **exif_data = gexiv2_metadata_get_exif_tags (gimpmetadata);
for (i = 0; exif_data[i] != NULL; i++) for (i = 0; exif_data[i] != NULL; i++)
{ {
if (! gexiv2_metadata_has_tag (filemetadata, exif_data[i]) && if (! gexiv2_metadata_has_tag (new_metadata, exif_data[i]) &&
gimp_metadata_is_tag_supported (exif_data[i], mime_type)) gimp_metadata_is_tag_supported (exif_data[i], mime_type))
{ {
value = gexiv2_metadata_get_tag_string (gimpmetadata, exif_data[i]); value = gexiv2_metadata_get_tag_string (metadata, exif_data[i]);
gexiv2_metadata_set_tag_string (filemetadata, exif_data[i], gexiv2_metadata_set_tag_string (new_metadata, exif_data[i],
value); value);
g_free (value); g_free (value);
} }
} }
g_strfreev (exif_data); g_strfreev (exif_data);
if (comment)
{
gimp_metadata_new_attribute (gexivdata,
"Exif.Photo.UserComment",
(gchar *) comment,
TYPE_UNICODE);
gimp_metadata_new_attribute (gexivdata,
"Exif.Image.ImageDescription",
(gchar *) comment,
TYPE_ASCII);
}
g_snprintf (buffer, sizeof (buffer),
"%d:%02d:%02d %02d:%02d:%02d",
g_date_time_get_year (datetime),
g_date_time_get_month (datetime),
g_date_time_get_day_of_month (datetime),
g_date_time_get_hour (datetime),
g_date_time_get_minute (datetime),
g_date_time_get_second (datetime));
gimp_metadata_new_attribute (gexivdata,
"Exif.Image.DateTime",
buffer,
TYPE_ASCII);
gimp_metadata_new_attribute (gexivdata,
"Exif.Image.Software",
PACKAGE_STRING,
TYPE_ASCII);
gimp_metadata_set_pixel_size (gexivdata,
image_width, image_height);
gimp_image_get_resolution (image_ID, &xres, &yres);
gimp_metadata_set_resolution (gexivdata, xres, yres,
gimp_image_get_unit (image_ID));
} }
/* XMP */ if ((flags & GIMP_METADATA_SAVE_XMP) && support_xmp)
if (flags & GIMP_METADATA_SAVE_XMP && support_xmp)
{ {
gint i; gchar **xmp_data = gexiv2_metadata_get_xmp_tags (metadata);
gchar **xmp_data = gexiv2_metadata_get_xmp_tags (gimpmetadata);
for (i = 0; xmp_data[i] != NULL; i++) for (i = 0; xmp_data[i] != NULL; i++)
{ {
GimpAttribute *attribute; if (! gexiv2_metadata_has_tag (new_metadata, xmp_data[i]) &&
if (! gexiv2_metadata_has_tag (filemetadata, xmp_data[i]) &&
gimp_metadata_is_tag_supported (xmp_data[i], mime_type)) gimp_metadata_is_tag_supported (xmp_data[i], mime_type))
{ {
/* we need the attribute-value here, because some xmp-tags cannot be read out and stored like exif tags: value = gexiv2_metadata_get_tag_string (metadata, xmp_data[i]);
* xmp-tags allow structures like lists. These structures need this special handling. */ gexiv2_metadata_set_tag_string (new_metadata, xmp_data[i],
attribute = gimp_metadata_get_attribute (metadata, xmp_data[i]); value);
gimp_metadata_add_attribute (gexivdata, attribute); g_free (value);
} }
} }
g_strfreev (xmp_data); g_strfreev (xmp_data);
gimp_metadata_new_attribute (gexivdata,
"Xmp.dc.Format",
(gchar *) mime_type,
TYPE_ASCII);
if (! g_strcmp0 (mime_type, "image/tiff"))
{
/* TIFF specific XMP data */
g_snprintf (buffer, sizeof (buffer), "%d", image_width);
gimp_metadata_new_attribute (gexivdata,
"Xmp.tiff.ImageWidth",
buffer,
TYPE_ASCII);
g_snprintf (buffer, sizeof (buffer), "%d", image_height);
gimp_metadata_new_attribute (gexivdata,
"Xmp.tiff.ImageLength",
buffer,
TYPE_ASCII);
g_snprintf (buffer, sizeof (buffer),
"%d:%02d:%02d %02d:%02d:%02d",
g_date_time_get_year (datetime),
g_date_time_get_month (datetime),
g_date_time_get_day_of_month (datetime),
g_date_time_get_hour (datetime),
g_date_time_get_minute (datetime),
g_date_time_get_second (datetime));
gimp_metadata_new_attribute (gexivdata,
"Xmp.tiff.DateTime",
buffer,
TYPE_ASCII);
}
} }
/* IPTC */ if ((flags & GIMP_METADATA_SAVE_IPTC) && support_iptc)
if (flags & GIMP_METADATA_SAVE_IPTC && support_iptc)
{ {
gint i; gchar **iptc_data = gexiv2_metadata_get_iptc_tags (metadata);
gchar **iptc_data = gexiv2_metadata_get_iptc_tags (gimpmetadata);
for (i = 0; iptc_data[i] != NULL; i++) for (i = 0; iptc_data[i] != NULL; i++)
{ {
GimpAttribute *attribute; if (! gexiv2_metadata_has_tag (new_metadata, iptc_data[i]) &&
if (! gexiv2_metadata_has_tag (filemetadata, iptc_data[i]) &&
gimp_metadata_is_tag_supported (iptc_data[i], mime_type)) gimp_metadata_is_tag_supported (iptc_data[i], mime_type))
{ {
/* we need the attribute-value here, because iptc-tags of TYPE_MULTIPLE cannot be read out and stored like exif tags: value = gexiv2_metadata_get_tag_string (metadata, iptc_data[i]);
* These tags need this special handling. */ gexiv2_metadata_set_tag_string (new_metadata, iptc_data[i],
attribute = gimp_metadata_get_attribute (metadata, iptc_data[i]); value);
gimp_metadata_add_attribute (gexivdata, attribute); g_free (value);
} }
} }
g_strfreev (iptc_data); g_strfreev (iptc_data);
g_snprintf (buffer, sizeof (buffer),
"%d-%d-%d",
g_date_time_get_year (datetime),
g_date_time_get_month (datetime),
g_date_time_get_day_of_month (datetime));
gimp_metadata_new_attribute (gexivdata,
"Iptc.Application2.DateCreated",
buffer,
TYPE_ASCII);
g_snprintf (buffer, sizeof (buffer),
"%02d:%02d:%02d",
g_date_time_get_hour (datetime),
g_date_time_get_minute (datetime),
g_date_time_get_second (datetime));
gimp_metadata_new_attribute (gexivdata,
"Iptc.Application2.TimeCreated",
buffer,
TYPE_ASCII);
g_date_time_unref (datetime);
} }
/* Thumbnail */ if (flags & GIMP_METADATA_SAVE_THUMBNAIL)
if ((flags & GIMP_METADATA_SAVE_THUMBNAIL) && g_strcmp0 (mime_type, "image/tiff"))
{ {
GdkPixbuf *thumb_pixbuf; GdkPixbuf *thumb_pixbuf;
gchar *thumb_buffer; gchar *thumb_buffer;
@ -573,27 +524,27 @@ gimp_image_metadata_save_finish (gint32 image_ID,
{ {
gchar buffer[32]; gchar buffer[32];
gexiv2_metadata_set_exif_thumbnail_from_buffer (filemetadata, gexiv2_metadata_set_exif_thumbnail_from_buffer (new_metadata,
(guchar *) thumb_buffer, (guchar *) thumb_buffer,
count); count);
g_snprintf (buffer, sizeof (buffer), "%d", thumbw); g_snprintf (buffer, sizeof (buffer), "%d", thumbw);
gexiv2_metadata_set_tag_string (filemetadata, gexiv2_metadata_set_tag_string (new_metadata,
"Exif.Thumbnail.ImageWidth", "Exif.Thumbnail.ImageWidth",
buffer); buffer);
g_snprintf (buffer, sizeof (buffer), "%d", thumbh); g_snprintf (buffer, sizeof (buffer), "%d", thumbh);
gexiv2_metadata_set_tag_string (filemetadata, gexiv2_metadata_set_tag_string (new_metadata,
"Exif.Thumbnail.ImageLength", "Exif.Thumbnail.ImageLength",
buffer); buffer);
gexiv2_metadata_set_tag_string (filemetadata, gexiv2_metadata_set_tag_string (new_metadata,
"Exif.Thumbnail.BitsPerSample", "Exif.Thumbnail.BitsPerSample",
"8 8 8"); "8 8 8");
gexiv2_metadata_set_tag_string (filemetadata, gexiv2_metadata_set_tag_string (new_metadata,
"Exif.Thumbnail.SamplesPerPixel", "Exif.Thumbnail.SamplesPerPixel",
"3"); "3");
gexiv2_metadata_set_tag_string (filemetadata, gexiv2_metadata_set_tag_string (new_metadata,
"Exif.Thumbnail.PhotometricInterpretation", "Exif.Thumbnail.PhotometricInterpretation",
"6"); "6");
@ -603,9 +554,9 @@ gimp_image_metadata_save_finish (gint32 image_ID,
g_object_unref (thumb_pixbuf); g_object_unref (thumb_pixbuf);
} }
success = gimp_metadata_save_to_file (gexivdata, file, error); success = gimp_metadata_save_to_file (new_metadata, file, error);
g_object_unref (filemetadata); g_object_unref (new_metadata);
return success; return success;
} }
@ -614,25 +565,21 @@ gint32
gimp_image_metadata_load_thumbnail (GFile *file, gimp_image_metadata_load_thumbnail (GFile *file,
GError **error) GError **error)
{ {
GimpMetadata *metadata; GimpMetadata *metadata;
GExiv2Metadata *gexiv2metadata; GInputStream *input_stream;
GInputStream *input_stream; GdkPixbuf *pixbuf;
GdkPixbuf *pixbuf; guint8 *thumbnail_buffer;
guint8 *thumbnail_buffer; gint thumbnail_size;
gint thumbnail_size; gint32 image_ID = -1;
gint32 image_ID = -1;
g_return_val_if_fail (G_IS_FILE (file), -1); g_return_val_if_fail (G_IS_FILE (file), -1);
g_return_val_if_fail (error == NULL || *error == NULL, -1); g_return_val_if_fail (error == NULL || *error == NULL, -1);
metadata = gimp_metadata_load_from_file (file, error); metadata = gimp_metadata_load_from_file (file, error);
gexiv2metadata = GEXIV2_METADATA (metadata);
if (! metadata) if (! metadata)
return -1; return -1;
if (! gexiv2_metadata_get_exif_thumbnail (gexiv2metadata, if (! gexiv2_metadata_get_exif_thumbnail (metadata,
&thumbnail_buffer, &thumbnail_buffer,
&thumbnail_size)) &thumbnail_size))
{ {
@ -664,7 +611,7 @@ gimp_image_metadata_load_thumbnail (GFile *file,
gimp_image_insert_layer (image_ID, layer_ID, -1, 0); gimp_image_insert_layer (image_ID, layer_ID, -1, 0);
gimp_image_metadata_rotate (image_ID, gimp_image_metadata_rotate (image_ID,
gexiv2_metadata_get_orientation (gexiv2metadata)); gexiv2_metadata_get_orientation (metadata));
} }
g_object_unref (metadata); g_object_unref (metadata);
@ -779,15 +726,12 @@ gimp_image_metadata_rotate_query (gint32 image_ID,
GimpMetadata *metadata, GimpMetadata *metadata,
gboolean interactive) gboolean interactive)
{ {
GExiv2Metadata *gexiv2metadata;
GimpParasite *parasite; GimpParasite *parasite;
gchar *parasite_name; gchar *parasite_name;
GExiv2Orientation orientation; GExiv2Orientation orientation;
gboolean query = interactive; gboolean query = interactive;
gexiv2metadata = GEXIV2_METADATA (metadata); orientation = gexiv2_metadata_get_orientation (metadata);
orientation = gexiv2_metadata_get_orientation (gexiv2metadata);
if (orientation <= GEXIV2_ORIENTATION_NORMAL || if (orientation <= GEXIV2_ORIENTATION_NORMAL ||
orientation > GEXIV2_ORIENTATION_MAX) orientation > GEXIV2_ORIENTATION_MAX)
@ -827,9 +771,9 @@ gimp_image_metadata_rotate_query (gint32 image_ID,
gimp_image_metadata_rotate (image_ID, orientation); gimp_image_metadata_rotate (image_ID, orientation);
gexiv2_metadata_set_tag_string (gexiv2metadata, gexiv2_metadata_set_tag_string (metadata,
"Exif.Image.Orientation", "1"); "Exif.Image.Orientation", "1");
gexiv2_metadata_set_tag_string (gexiv2metadata, gexiv2_metadata_set_tag_string (metadata,
"Xmp.tiff.Orientation", "1"); "Xmp.tiff.Orientation", "1");
} }

View File

@ -35,7 +35,6 @@ GimpMetadata * gimp_image_metadata_load_prepare (gint32 image_ID
GFile *file, GFile *file,
GError **error); GError **error);
void gimp_image_metadata_load_finish (gint32 image_ID, void gimp_image_metadata_load_finish (gint32 image_ID,
gint32 layer_ID,
const gchar *mime_type, const gchar *mime_type,
GimpMetadata *metadata, GimpMetadata *metadata,
GimpMetadataLoadFlags flags, GimpMetadataLoadFlags flags,

View File

@ -1,86 +0,0 @@
/* LIBGIMP - The GIMP Library
* Copyright (C) 1995-2000 Peter Mattis and Spencer Kimball
*
* gimpitem.c
*
* This library is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include "gimp.h"
#include "gimpitem.h"
/**
* gimp_item_get_metadata:
* @item_ID: The item.
*
* Returns the item's metadata.
*
* Returns metadata from the item.
*
* Returns: The metadata, or %NULL if there is none.
*
* Since: GIMP 2.10
**/
GimpMetadata *
gimp_item_get_metadata (gint32 item_ID)
{
GimpMetadata *metadata = NULL;
gchar *metadata_string;
metadata_string = _gimp_item_get_metadata (item_ID);
if (metadata_string)
{
metadata = gimp_metadata_deserialize (metadata_string);
g_free (metadata_string);
}
return metadata;
}
/**
* gimp_item_set_metadata:
* @item_ID: The item.
* @metadata: The GimpMetadata object.
*
* Set the item's metadata.
*
* Sets metadata on the item, or deletes it if
* @metadata is %NULL.
*
* Returns: TRUE on success.
*
* Since: GIMP 2.10
**/
gboolean
gimp_item_set_metadata (gint32 item_ID,
GimpMetadata *metadata)
{
gchar *metadata_string = NULL;
gboolean success;
if (metadata)
metadata_string = gimp_metadata_serialize (metadata);
success = _gimp_item_set_metadata (item_ID, metadata_string);
if (metadata_string)
g_free (metadata_string);
return success;
}

View File

@ -1,40 +0,0 @@
/* LIBGIMP - The GIMP Library
* Copyright (C) 1995-2000 Peter Mattis and Spencer Kimball
*
* gimpitem.h
*
* This library is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#if !defined (__GIMP_H_INSIDE__) && !defined (GIMP_COMPILATION)
#error "Only <libgimp/gimp.h> can be included directly."
#endif
#ifndef __GIMP_ITEM_H__
#define __GIMP_ITEM_H__
G_BEGIN_DECLS
/* For information look into the C source or the html documentation */
gboolean gimp_item_set_metadata (gint32 item_ID,
GimpMetadata *metadata);
GimpMetadata * gimp_item_get_metadata (gint32 item_ID);
G_END_DECLS
#endif /* __GIMP_ITEM_H__ */

View File

@ -934,68 +934,6 @@ gimp_item_set_tattoo (gint32 item_ID,
return success; return success;
} }
/**
* _gimp_item_get_metadata:
* @item_ID: The item.
*
* Returns the item's metadata.
*
* Returns metadata from the item.
*
* Returns: The metadata as a xml string.
**/
gchar *
_gimp_item_get_metadata (gint32 item_ID)
{
GimpParam *return_vals;
gint nreturn_vals;
gchar *metadata_string = NULL;
return_vals = gimp_run_procedure ("gimp-item-get-metadata",
&nreturn_vals,
GIMP_PDB_ITEM, item_ID,
GIMP_PDB_END);
if (return_vals[0].data.d_status == GIMP_PDB_SUCCESS)
metadata_string = g_strdup (return_vals[1].data.d_string);
gimp_destroy_params (return_vals, nreturn_vals);
return metadata_string;
}
/**
* _gimp_item_set_metadata:
* @item_ID: The item.
* @metadata_string: The metadata as a xml string.
*
* Set the item's metadata.
*
* Sets metadata on the item.
*
* Returns: TRUE on success.
**/
gboolean
_gimp_item_set_metadata (gint32 item_ID,
const gchar *metadata_string)
{
GimpParam *return_vals;
gint nreturn_vals;
gboolean success = TRUE;
return_vals = gimp_run_procedure ("gimp-item-set-metadata",
&nreturn_vals,
GIMP_PDB_ITEM, item_ID,
GIMP_PDB_STRING, metadata_string,
GIMP_PDB_END);
success = return_vals[0].data.d_status == GIMP_PDB_SUCCESS;
gimp_destroy_params (return_vals, nreturn_vals);
return success;
}
/** /**
* gimp_item_attach_parasite: * gimp_item_attach_parasite:
* @item_ID: The item. * @item_ID: The item.

View File

@ -32,52 +32,49 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */ /* For information look into the C source or the html documentation */
gboolean gimp_item_is_valid (gint32 item_ID); gboolean gimp_item_is_valid (gint32 item_ID);
gint32 gimp_item_get_image (gint32 item_ID); gint32 gimp_item_get_image (gint32 item_ID);
gboolean gimp_item_delete (gint32 item_ID); gboolean gimp_item_delete (gint32 item_ID);
gboolean gimp_item_is_drawable (gint32 item_ID); gboolean gimp_item_is_drawable (gint32 item_ID);
gboolean gimp_item_is_layer (gint32 item_ID); gboolean gimp_item_is_layer (gint32 item_ID);
gboolean gimp_item_is_text_layer (gint32 item_ID); gboolean gimp_item_is_text_layer (gint32 item_ID);
gboolean gimp_item_is_channel (gint32 item_ID); gboolean gimp_item_is_channel (gint32 item_ID);
gboolean gimp_item_is_layer_mask (gint32 item_ID); gboolean gimp_item_is_layer_mask (gint32 item_ID);
gboolean gimp_item_is_selection (gint32 item_ID); gboolean gimp_item_is_selection (gint32 item_ID);
gboolean gimp_item_is_vectors (gint32 item_ID); gboolean gimp_item_is_vectors (gint32 item_ID);
gboolean gimp_item_is_group (gint32 item_ID); gboolean gimp_item_is_group (gint32 item_ID);
gint32 gimp_item_get_parent (gint32 item_ID); gint32 gimp_item_get_parent (gint32 item_ID);
gint* gimp_item_get_children (gint32 item_ID, gint* gimp_item_get_children (gint32 item_ID,
gint *num_children); gint *num_children);
gchar* gimp_item_get_name (gint32 item_ID); gchar* gimp_item_get_name (gint32 item_ID);
gboolean gimp_item_set_name (gint32 item_ID, gboolean gimp_item_set_name (gint32 item_ID,
const gchar *name); const gchar *name);
gboolean gimp_item_get_visible (gint32 item_ID); gboolean gimp_item_get_visible (gint32 item_ID);
gboolean gimp_item_set_visible (gint32 item_ID, gboolean gimp_item_set_visible (gint32 item_ID,
gboolean visible); gboolean visible);
gboolean gimp_item_get_linked (gint32 item_ID); gboolean gimp_item_get_linked (gint32 item_ID);
gboolean gimp_item_set_linked (gint32 item_ID, gboolean gimp_item_set_linked (gint32 item_ID,
gboolean linked); gboolean linked);
gboolean gimp_item_get_lock_content (gint32 item_ID); gboolean gimp_item_get_lock_content (gint32 item_ID);
gboolean gimp_item_set_lock_content (gint32 item_ID, gboolean gimp_item_set_lock_content (gint32 item_ID,
gboolean lock_content); gboolean lock_content);
gboolean gimp_item_get_lock_position (gint32 item_ID); gboolean gimp_item_get_lock_position (gint32 item_ID);
gboolean gimp_item_set_lock_position (gint32 item_ID, gboolean gimp_item_set_lock_position (gint32 item_ID,
gboolean lock_position); gboolean lock_position);
GimpColorTag gimp_item_get_color_tag (gint32 item_ID); GimpColorTag gimp_item_get_color_tag (gint32 item_ID);
gboolean gimp_item_set_color_tag (gint32 item_ID, gboolean gimp_item_set_color_tag (gint32 item_ID,
GimpColorTag color_tag); GimpColorTag color_tag);
gint gimp_item_get_tattoo (gint32 item_ID); gint gimp_item_get_tattoo (gint32 item_ID);
gboolean gimp_item_set_tattoo (gint32 item_ID, gboolean gimp_item_set_tattoo (gint32 item_ID,
gint tattoo); gint tattoo);
G_GNUC_INTERNAL gchar* _gimp_item_get_metadata (gint32 item_ID); gboolean gimp_item_attach_parasite (gint32 item_ID,
G_GNUC_INTERNAL gboolean _gimp_item_set_metadata (gint32 item_ID, const GimpParasite *parasite);
const gchar *metadata_string); gboolean gimp_item_detach_parasite (gint32 item_ID,
gboolean gimp_item_attach_parasite (gint32 item_ID, const gchar *name);
const GimpParasite *parasite); GimpParasite* gimp_item_get_parasite (gint32 item_ID,
gboolean gimp_item_detach_parasite (gint32 item_ID, const gchar *name);
const gchar *name); gchar** gimp_item_get_parasite_list (gint32 item_ID,
GimpParasite* gimp_item_get_parasite (gint32 item_ID, gint *num_parasites);
const gchar *name);
gchar** gimp_item_get_parasite_list (gint32 item_ID,
gint *num_parasites);
G_END_DECLS G_END_DECLS

View File

@ -90,8 +90,6 @@ libgimpbase_sources = \
gimpparam.h \ gimpparam.h \
gimpversion.h \ gimpversion.h \
\ \
gimpattribute.c \
gimpattribute.h \
gimpbase-private.c \ gimpbase-private.c \
gimpbase-private.h \ gimpbase-private.h \
gimpchecks.c \ gimpchecks.c \
@ -112,8 +110,6 @@ libgimpbase_sources = \
gimpparasiteio.h \ gimpparasiteio.h \
gimpprotocol.c \ gimpprotocol.c \
gimpprotocol.h \ gimpprotocol.h \
gimprational.c \
gimprational.h \
gimprectangle.c \ gimprectangle.c \
gimprectangle.h \ gimprectangle.h \
gimpreloc.c \ gimpreloc.c \
@ -147,7 +143,6 @@ libgimpbaseinclude_HEADERS = \
gimpparam.h \ gimpparam.h \
gimpversion.h \ gimpversion.h \
\ \
gimpattribute.h \
gimpchecks.h \ gimpchecks.h \
gimpdatafiles.h \ gimpdatafiles.h \
gimpenv.h \ gimpenv.h \
@ -155,7 +150,6 @@ libgimpbaseinclude_HEADERS = \
gimpmetadata.h \ gimpmetadata.h \
gimpparasite.h \ gimpparasite.h \
gimpparasiteio.h \ gimpparasiteio.h \
gimprational.h \
gimprectangle.h \ gimprectangle.h \
gimpsignal.h \ gimpsignal.h \
gimpunit.h \ gimpunit.h \

File diff suppressed because it is too large Load Diff

View File

@ -1,97 +0,0 @@
/* gimpattribute.h generated by valac 0.24.0, the Vala compiler, do not modify */
#ifndef __GIMPATTRIBUTE_H__
#define __GIMPATTRIBUTE_H__
#include <glib.h>
G_BEGIN_DECLS
#define GIMP_TYPE_ATTRIBUTE (gimp_attribute_get_type ())
#define GIMP_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_ATTRIBUTE, GimpAttribute))
#define GIMP_ATTRIBUTE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_ATTRIBUTE, GimpAttributeClass))
#define GIMP_IS_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_ATTRIBUTE))
#define GIMP_IS_ATTRIBUTE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_ATTRIBUTE))
#define GIMP_ATTRIBUTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_ATTRIBUTE, GimpAttributeClass))
#define GIMP_ATTRIBUTE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GIMP_TYPE_ATTRIBUTE, GimpAttributePrivate))
#define GIMP_TYPE_ATTRIBUTE_TAG_TYPE (gimp_attribute_tag_type_get_type ())
GType gimp_attribute_tag_type_get_type (void) G_GNUC_CONST;
typedef enum {
TYPE_INVALID,
TYPE_LONG,
TYPE_SLONG,
TYPE_FLOAT,
TYPE_DOUBLE,
TYPE_SHORT,
TYPE_SSHORT,
TYPE_DATE,
TYPE_TIME,
TYPE_ASCII,
TYPE_UNICODE,
TYPE_BYTE,
TYPE_MULTIPLE,
TYPE_RATIONAL,
TYPE_SRATIONAL,
TYPE_UNKNOWN,
NUM_VALUE_TYPES
} GimpAttributeValueType;
typedef enum {
STRUCTURE_TYPE_BAG,
STRUCTURE_TYPE_SEQ,
STRUCTURE_TYPE_ALT,
STRUCTURE_TYPE_LANG,
STRUCTURE_TYPE_NONE,
STRUCTURE_TYPE_STRUCT,
NUM_STRUCTURE_TYPES
} GimpAttributeStructureType;
typedef enum {
TAG_INVALID,
TAG_EXIF,
TAG_XMP,
TAG_IPTC,
TAG_GIMP,
TAG_MISC,
NUM_TAG_TYPES
} GimpAttributeTagType;
GType gimp_attribute_get_type (void) G_GNUC_CONST;
GimpAttribute* gimp_attribute_new_string (const gchar *name,
gchar *value,
GimpAttributeValueType type);
const gchar* gimp_attribute_get_interpreted_string (GimpAttribute *attribute);
void gimp_attribute_set_interpreted_string (GimpAttribute *attribute,
const gchar *value);
GimpAttribute* gimp_attribute_copy (GimpAttribute *attribute);
gboolean gimp_attribute_is_valid (GimpAttribute *attribute);
const gchar* gimp_attribute_get_attribute_type (GimpAttribute *attribute);
const gchar* gimp_attribute_get_attribute_ifd (GimpAttribute *attribute);
const gchar* gimp_attribute_get_attribute_tag (GimpAttribute *attribute);
const gboolean gimp_attribute_is_new_namespace (GimpAttribute *attribute);
const gchar* gimp_attribute_get_name (GimpAttribute *attribute);
const gchar* gimp_attribute_get_sortable_name (GimpAttribute *attribute);
GValue gimp_attribute_get_value (GimpAttribute *attribute);
gchar* gimp_attribute_get_string (GimpAttribute *attribute);
GimpAttributeTagType gimp_attribute_get_tag_type (GimpAttribute *attribute);
GimpAttributeValueType gimp_attribute_get_value_type_from_string (const gchar *string);
GimpAttributeValueType gimp_attribute_get_value_type (GimpAttribute *attribute);
void gimp_attribute_set_value_type (GimpAttribute *attribute,
GimpAttributeValueType value_type);
gboolean gimp_attribute_has_structure (GimpAttribute *attribute);
GSList* gimp_attribute_get_attribute_structure (GimpAttribute *attribute);
void gimp_attribute_set_structure_type (GimpAttribute *attribute,
GimpAttributeStructureType value);
GimpAttributeStructureType gimp_attribute_get_structure_type (GimpAttribute *attribute);
gdouble gimp_attribute_get_gps_degree (GimpAttribute *attribute);
gchar* gimp_attribute_get_xml (GimpAttribute *attribute);
void gimp_attribute_print (GimpAttribute *attribute);
G_END_DECLS
#endif

View File

@ -1,29 +1,6 @@
EXPORTS EXPORTS
gimp_add_mask_type_get_type gimp_add_mask_type_get_type
gimp_any_to_utf8 gimp_any_to_utf8
gimp_attribute_copy
gimp_attribute_get_attribute_type
gimp_attribute_get_attribute_ifd
gimp_attribute_get_attribute_structure
gimp_attribute_get_attribute_tag
gimp_attribute_get_interpreted_string
gimp_attribute_get_name
gimp_attribute_get_sortable_name
gimp_attribute_get_string
gimp_attribute_get_structure_type
gimp_attribute_get_tag_type
gimp_attribute_get_value
gimp_attribute_get_value_type
gimp_attribute_get_value_type_from_string
gimp_attribute_get_gps_degree
gimp_attribute_get_xml
gimp_attribute_has_structure
gimp_attribute_is_valid
gimp_attribute_new_string
gimp_attribute_print
gimp_attribute_set_interpreted_string
gimp_attribute_set_structure_type
gimp_attribute_set_value_type
gimp_base_init gimp_base_init
gimp_blend_mode_get_type gimp_blend_mode_get_type
gimp_brush_generated_shape_get_type gimp_brush_generated_shape_get_type
@ -93,36 +70,21 @@ EXPORTS
gimp_memsize_to_string gimp_memsize_to_string
gimp_merge_type_get_type gimp_merge_type_get_type
gimp_message_handler_type_get_type gimp_message_handler_type_get_type
gimp_metadata_add_attribute
gimp_metadata_deserialize gimp_metadata_deserialize
gimp_metadata_duplicate gimp_metadata_duplicate
gimp_metadata_get_attribute
gimp_metadata_get_colorspace gimp_metadata_get_colorspace
gimp_metadata_get_resolution gimp_metadata_get_resolution
gimp_metadata_get_table
gimp_metadata_get_type
gimp_metadata_has_attribute
gimp_metadata_has_tag_type
gimp_metadata_is_tag_supported gimp_metadata_is_tag_supported
gimp_metadata_iter_init
gimp_metadata_iter_next
gimp_metadata_load_from_file gimp_metadata_load_from_file
gimp_metadata_new gimp_metadata_new
gimp_metadata_new_attribute gimp_metadata_save_to_file
gimp_metadata_new_gexiv2metadata
gimp_metadata_print
gimp_metadata_remove_attribute
gimp_metadata_has_attribute
gimp_metadata_serialize gimp_metadata_serialize
gimp_metadata_set_bits_per_sample gimp_metadata_set_bits_per_sample
gimp_metadata_set_colorspace gimp_metadata_set_colorspace
gimp_metadata_save_to_file
gimp_metadata_set_from_exif gimp_metadata_set_from_exif
gimp_metadata_set_from_xmp gimp_metadata_set_from_xmp
gimp_metadata_set_pixel_size gimp_metadata_set_pixel_size
gimp_metadata_set_resolution gimp_metadata_set_resolution
gimp_metadata_size
gimp_metadata_to_xmp_packet
gimp_micro_version gimp_micro_version
gimp_minor_version gimp_minor_version
gimp_offset_type_get_type gimp_offset_type_get_type
@ -248,5 +210,3 @@ EXPORTS
gp_tile_ack_write gp_tile_ack_write
gp_tile_data_write gp_tile_data_write
gp_tile_req_write gp_tile_req_write
rational_free
srational_free

View File

@ -23,7 +23,6 @@
#include <libgimpbase/gimpbasetypes.h> #include <libgimpbase/gimpbasetypes.h>
#include <libgimpbase/gimpattribute.h>
#include <libgimpbase/gimpchecks.h> #include <libgimpbase/gimpchecks.h>
#include <libgimpbase/gimpcpuaccel.h> #include <libgimpbase/gimpcpuaccel.h>
#include <libgimpbase/gimpdatafiles.h> #include <libgimpbase/gimpdatafiles.h>

View File

@ -45,8 +45,6 @@ G_BEGIN_DECLS
#endif #endif
typedef struct _GimpAttribute GimpAttribute;
typedef struct _GimpMetadata GimpMetadata;
typedef struct _GimpParasite GimpParasite; typedef struct _GimpParasite GimpParasite;
typedef struct _GimpDatafileData GimpDatafileData; typedef struct _GimpDatafileData GimpDatafileData;
typedef struct _GimpEnumDesc GimpEnumDesc; typedef struct _GimpEnumDesc GimpEnumDesc;
@ -57,6 +55,7 @@ typedef struct _GimpValueArray GimpValueArray;
typedef void (* GimpDatafileLoaderFunc) (const GimpDatafileData *file_data, typedef void (* GimpDatafileLoaderFunc) (const GimpDatafileData *file_data,
gpointer user_data); gpointer user_data);
typedef struct _GExiv2Metadata GimpMetadata;
/** /**

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,29 @@
/* LIBGIMPBASE - The GIMP Basic Library
* Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
*
* gimpmetadata.h
* Copyright (C) 2013 Hartmut Kuhse <hartmutkuhse@src.gnome.org>
*
* This library is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#ifndef __GIMPMETADATA_H__ #ifndef __GIMP_METADATA_H__
#define __GIMPMETADATA_H__ #define __GIMP_METADATA_H__
G_BEGIN_DECLS G_BEGIN_DECLS
#include <gexiv2/gexiv2.h>
#define TYPE_GIMP_METADATA (gimp_metadata_get_type ())
#define GIMP_METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GIMP_METADATA, GimpMetadata))
#define GIMP_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GIMP_METADATA, GimpMetadataClass))
#define IS_GIMP_METADATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GIMP_METADATA))
#define IS_GIMP_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GIMP_METADATA))
#define GIMP_METADATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GIMP_METADATA, GimpMetadataClass))
#define GIMP_METADATA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TYPE_GIMP_METADATA, GimpMetadataPrivate))
typedef enum typedef enum
{ {
GIMP_METADATA_LOAD_COMMENT = 1 << 0, GIMP_METADATA_LOAD_COMMENT = 1 << 0,
@ -42,73 +52,51 @@ typedef enum
GIMP_METADATA_COLORSPACE_ADOBERGB GIMP_METADATA_COLORSPACE_ADOBERGB
} GimpMetadataColorspace; } GimpMetadataColorspace;
GType gimp_metadata_get_type (void) G_GNUC_CONST;
GimpMetadata * gimp_metadata_new (void);
gint gimp_metadata_size (GimpMetadata *metadata);
GimpMetadata * gimp_metadata_duplicate (GimpMetadata *metadata);
GHashTable * gimp_metadata_get_table (GimpMetadata *metadata);
void gimp_metadata_add_attribute (GimpMetadata *metadata,
GimpAttribute *attribute);
GimpAttribute * gimp_metadata_get_attribute (GimpMetadata *metadata,
const gchar *name);
gboolean gimp_metadata_remove_attribute (GimpMetadata *metadata,
const gchar *name);
gboolean gimp_metadata_has_attribute (GimpMetadata *metadata,
const gchar *name);
gboolean gimp_metadata_new_attribute (GimpMetadata *metadata,
const gchar *name,
gchar *value,
GimpAttributeValueType type);
gchar * gimp_metadata_serialize (GimpMetadata *metadata);
GimpMetadata * gimp_metadata_deserialize (const gchar *xml);
void gimp_metadata_print (GimpMetadata *metadata);
const gchar * gimp_metadata_to_xmp_packet (GimpMetadata *metadata,
const gchar *mime_type);
gboolean gimp_metadata_has_tag_type (GimpMetadata *metadata,
GimpAttributeTagType tag_type);
GList * gimp_metadata_iter_init (GimpMetadata *metadata,
GList **iter);
gboolean gimp_metadata_iter_next (GimpMetadata *metadata,
GimpAttribute **attribute,
GList **prev);
gboolean gimp_metadata_save_to_file (GimpMetadata *metadata,
GFile *file,
GError **error);
GimpMetadata * gimp_metadata_load_from_file (GFile *file,
GError **error);
gboolean gimp_metadata_set_from_exif (GimpMetadata *metadata,
const guchar *exif_data,
gint exif_data_length,
GError **error);
gboolean gimp_metadata_set_from_xmp (GimpMetadata *metadata,
const guchar *xmp_data,
gint xmp_data_length,
GError **error);
gboolean gimp_metadata_is_tag_supported (const gchar *tag,
const gchar *mime_type);
GimpMetadataColorspace gimp_metadata_get_colorspace (GimpMetadata *metadata);
gboolean gimp_metadata_get_resolution (GimpMetadata *metadata,
gdouble *xres,
gdouble *yres,
GimpUnit *unit);
void gimp_metadata_set_resolution (GimpMetadata *metadata,
gdouble xres,
gdouble yres,
GimpUnit unit);
void gimp_metadata_set_bits_per_sample (GimpMetadata *metadata,
gint bits_per_sample);
void gimp_metadata_set_pixel_size (GimpMetadata *metadata,
gint width,
gint height);
void gimp_metadata_set_colorspace (GimpMetadata *metadata,
GimpMetadataColorspace colorspace);
//GimpMetadata * gimp_metadata_from_gexiv2metadata (GimpMetadata *metadata,
// GimpMetadata *gexivdata);
//void gimp_metadata_to_gexiv2metadata (GimpMetadata *metadata,
// GimpMetadata *gexivdata,
// const gchar *mime_type);
GimpMetadata * gimp_metadata_new (void);
GimpMetadata * gimp_metadata_duplicate (GimpMetadata *metadata);
GimpMetadata * gimp_metadata_deserialize (const gchar *metadata_xml);
gchar * gimp_metadata_serialize (GimpMetadata *metadata);
GimpMetadata * gimp_metadata_load_from_file (GFile *file,
GError **error);
gboolean gimp_metadata_save_to_file (GimpMetadata *metadata,
GFile *file,
GError **error);
gboolean gimp_metadata_set_from_exif (GimpMetadata *metadata,
const guchar *exif_data,
gint exif_data_length,
GError **error);
gboolean gimp_metadata_set_from_xmp (GimpMetadata *metadata,
const guchar *xmp_data,
gint xmp_data_length,
GError **error);
void gimp_metadata_set_pixel_size (GimpMetadata *metadata,
gint width,
gint height);
void gimp_metadata_set_bits_per_sample (GimpMetadata *metadata,
gint bits_per_sample);
gboolean gimp_metadata_get_resolution (GimpMetadata *metadata,
gdouble *xres,
gdouble *yres,
GimpUnit *unit);
void gimp_metadata_set_resolution (GimpMetadata *metadata,
gdouble xres,
gdouble yres,
GimpUnit unit);
GimpMetadataColorspace
gimp_metadata_get_colorspace (GimpMetadata *metadata);
void gimp_metadata_set_colorspace (GimpMetadata *metadata,
GimpMetadataColorspace colorspace);
gboolean gimp_metadata_is_tag_supported (const gchar *tag,
const gchar *mime_type);
G_END_DECLS G_END_DECLS
#endif #endif /* __GIMP_METADATA_H__ */

View File

@ -1,301 +0,0 @@
/*
* gimprational.c
*
* Created on: 19.09.2014
* Author: kuhse
*/
#include <stdlib.h>
#include "gimprational.h"
static gpointer rational_copy (gpointer data);
static gpointer srational_copy (gpointer data);
G_DEFINE_BOXED_TYPE (Rational, rational,
rational_copy,
rational_free)
G_DEFINE_BOXED_TYPE (SRational, srational,
srational_copy,
srational_free)
/**
* string_to_rational:
*
* @string: a #gchar array
* @rational: a pointer to a #Rational struct
*
* converts a string, representing one/more rational values into
* a #Rational struct.
*
* Since: 2.10
*/
void
string_to_rational (gchar *string, Rational **rational)
{
gchar **nom;
gchar **rats;
gint count;
gint i;
Rational *rval;
GArray *rational_array;
rats = g_strsplit (string, " ", -1);
count = 0;
while (rats[count])
count++;
rational_array = g_array_new (TRUE, TRUE, sizeof (RationalValue));
for (i = 0; i < count; i++)
{
RationalValue or;
nom = g_strsplit (rats[i], "/", 2);
if (nom[0] && nom[1])
{
or.nom = (guint) atoi (nom [0]);
or.denom = (guint) atoi (nom [1]);
}
else
count--;
rational_array = g_array_append_val (rational_array, or);
g_strfreev (nom);
}
g_strfreev (rats);
rval = g_slice_new (Rational);
rval->rational_array = rational_array;
rval->length = count;
*rational = rval;
}
/**
* rational_to_string:
*
* @rational : a pointer to a @Rational struct
* @nom : a pointer to a #gint array
* @denom : a pointer to a #gint array
* @length : a pointer to a #gint
*
* converts a @rational to nom/denum gchar arrays
*
* Since: 2.10
*/
void
rational_to_int (Rational *rational, gint **nom, gint **denom, gint *length)
{
gint i;
gint *_nom;
gint *_denom;
g_return_if_fail (rational != NULL);
_nom = g_new (gint, rational->length);
_denom = g_new (gint, rational->length);
for (i = 0; i < rational->length; i++)
{
RationalValue one;
one = g_array_index(rational->rational_array, RationalValue, i);
_nom[i] = one.nom;
_denom[i] = one.denom;
}
*nom = _nom;
*denom = _denom;
*length = rational->length;
}
/**
* rational_copy:
*
* @data: a #gpointer to a #Rational structure
*
* copy part of the #Rational type
*
* Since: 2.10
*/
static gpointer
rational_copy (gpointer data)
{
struct _Rational *rational = (struct _Rational *) data;
struct _Rational *copy = g_slice_new (Rational);
gint i;
GArray *rlacp;
if (!data)
return NULL;
rlacp = g_array_new (TRUE, TRUE, sizeof (RationalValue));
for (i = 0; i < rational->length; i++)
{
RationalValue or;
RationalValue cor;
or = g_array_index (rational->rational_array, RationalValue, i);
cor.nom = or.nom;
cor.denom = or.denom;
rlacp = g_array_append_val (rlacp, cor);
}
copy->rational_array = rlacp;
copy->length = rational->length;
return (gpointer) copy;
}
/**
* rational_free:
*
* @data: a #gpointer to a #Rational structure
*
* free part of the #Rational type
*
* Since: 2.10
*/
void
rational_free (gpointer data)
{
struct _Rational *rational = (struct _Rational *) data;
if (rational)
{
if (rational->rational_array)
g_array_free (rational->rational_array, TRUE);
rational->length = 0;
}
}
/**
* string_to_srational:
*
* @string: a #gchar array
* @srational: a pointer to a #Rational struct
*
* converts a string, representing one/more srational values into
* a #SRational struct.
*
* Since: 2.10
*/
void
string_to_srational (gchar *string, SRational **srational)
{
gchar **nom;
gchar **srats;
gint count;
gint i;
SRational *srval;
GArray *srational_array;
srats = g_strsplit (string, " ", -1);
count = 0;
while (srats[count])
count++;
srational_array = g_array_new (TRUE, TRUE, sizeof (SRationalValue));
for (i = 0; i < count; i++)
{
SRationalValue or;
nom = g_strsplit (srats[i], "/", 2);
if (nom[0] && nom[1])
{
or.nom = (gint) atoi (nom [0]);
or.denom = (guint) atoi (nom [1]);
}
else
count--;
srational_array = g_array_append_val (srational_array, or);
g_strfreev (nom);
}
g_strfreev (srats);
srval = g_slice_new (SRational);
srval->srational_array = srational_array;
srval->length = count;
*srational = srval;
}
/**
* srational_copy:
*
* @data: a #gpointer to a #SRational structure
*
* copy part of the #SRational type
*
* Since: 2.10
*/
static gpointer
srational_copy (gpointer data)
{
struct _SRational *srational = (struct _SRational *) data;
struct _SRational *copy = g_slice_new (SRational);
gint i;
GArray *rlacp;
if (!data)
return NULL;
rlacp = g_array_new (TRUE, TRUE, sizeof (SRationalValue));
for (i = 0; i < srational->length; i++)
{
SRationalValue or;
SRationalValue cor;
or = g_array_index (srational->srational_array, SRationalValue, i);
cor.nom = or.nom;
cor.denom = or.denom;
rlacp = g_array_append_val (rlacp, cor);
}
copy->srational_array = rlacp;
copy->length = srational->length;
return (gpointer) copy;
}
/**
* srational_free:
*
* @data: a #gpointer to a #SRational structure
*
* free part of the #SRational type
*
* Since: 2.10
*/
void
srational_free (gpointer data)
{
struct _SRational *srational = (struct _SRational *) data;
if (srational)
{
if (srational->srational_array)
g_array_free (srational->srational_array, TRUE);
srational->length = 0;
}
}

View File

@ -1,68 +0,0 @@
/*
* gimprational.h
*
* Created on: 19.09.2014
* Author: kuhse
*/
#ifndef __GIMPRATIONAL_H__
#define __GIMPRATIONAL_H__
#include <glib-object.h>
G_BEGIN_DECLS
#define GIMP_TYPE_RATIONAL (rational_get_type ())
#define GIMP_TYPE_SRATIONAL (srational_get_type ())
typedef struct _RationalValue RationalValue;
struct _RationalValue
{
guint nom;
guint denom;
};
typedef struct _SRationalValue SRationalValue;
struct _SRationalValue
{
gint nom;
guint denom;
};
typedef struct _Rational Rational;
struct _Rational
{
GArray *rational_array;
gint length;
};
typedef struct _SRational SRational;
struct _SRational
{
GArray *srational_array;
gint length;
};
GType rational_get_type (void) G_GNUC_CONST;
GType srational_get_type (void) G_GNUC_CONST;
void rational_free (gpointer data);
void srational_free (gpointer data);
void string_to_rational (gchar *string,
Rational **rational);
void rational_to_int (Rational *rational,
gint **nom,
gint **denom,
gint *length);
void string_to_srational (gchar *string,
SRational **srational);
G_END_DECLS
#endif /* __GIMPRATIONAL_H__ */

View File

@ -166,7 +166,6 @@ static const GtkStockItem gimp_stock_items[] =
{ GIMP_STOCK_TOOL_PRESET, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_TOOL_PRESET, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_IMAGE, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_IMAGE, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_IMAGE_METADATA, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_LAYER, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_LAYER, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_TEXT_LAYER, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_TEXT_LAYER, NULL, 0, 0, LIBGIMP_DOMAIN },
{ GIMP_STOCK_FLOATING_SELECTION, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_FLOATING_SELECTION, NULL, 0, 0, LIBGIMP_DOMAIN },

View File

@ -182,7 +182,6 @@ G_BEGIN_DECLS
#define GIMP_STOCK_FLIP_VERTICAL "gimp-flip-vertical" #define GIMP_STOCK_FLIP_VERTICAL "gimp-flip-vertical"
#define GIMP_STOCK_IMAGE "gimp-image" #define GIMP_STOCK_IMAGE "gimp-image"
#define GIMP_STOCK_IMAGE_METADATA "gimp-image-metadata"
#define GIMP_STOCK_LAYER "gimp-layer" #define GIMP_STOCK_LAYER "gimp-layer"
#define GIMP_STOCK_TEXT_LAYER "gimp-text-layer" #define GIMP_STOCK_TEXT_LAYER "gimp-text-layer"
#define GIMP_STOCK_FLOATING_SELECTION "gimp-floating-selection" #define GIMP_STOCK_FLOATING_SELECTION "gimp-floating-selection"

View File

@ -52,7 +52,6 @@ libexec_PROGRAMS = \
align-layers \ align-layers \
animation-optimize \ animation-optimize \
animation-play \ animation-play \
attributes \
blinds \ blinds \
blur \ blur \
border-average \ border-average \
@ -117,10 +116,10 @@ libexec_PROGRAMS = \
grid \ grid \
guillotine \ guillotine \
hot \ hot \
iptc \
jigsaw \ jigsaw \
$(MAIL) \ $(MAIL) \
max-rgb \ max-rgb \
metadata \
newsprint \ newsprint \
nl-filter \ nl-filter \
oilify \ oilify \
@ -219,24 +218,6 @@ animation_play_LDADD = \
$(INTLLIBS) \ $(INTLLIBS) \
$(animation_play_RC) $(animation_play_RC)
attributes_SOURCES = \
attributes.c
attributes_LDADD = \
$(libgimpui) \
$(libgimpwidgets) \
$(libgimpmodule) \
$(libgimp) \
$(libgimpmath) \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
$(GTK_LIBS) \
$(GEGL_LIBS) \
$(RT_LIBS) \
$(INTLLIBS) \
$(attributes_RC)
blinds_SOURCES = \ blinds_SOURCES = \
blinds.c blinds.c
@ -1373,26 +1354,6 @@ hot_LDADD = \
$(INTLLIBS) \ $(INTLLIBS) \
$(hot_RC) $(hot_RC)
iptc_CFLAGS = $(GEXIV2_CFLAGS)
iptc_SOURCES = \
iptc.c
iptc_LDADD = \
$(libgimpui) \
$(libgimpwidgets) \
$(libgimpmodule) \
$(libgimp) \
$(libgimpmath) \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
$(GTK_LIBS) \
$(GEXIV2_LIBS) \
$(RT_LIBS) \
$(INTLLIBS) \
$(iptc_RC)
jigsaw_SOURCES = \ jigsaw_SOURCES = \
jigsaw.c jigsaw.c
@ -1444,6 +1405,26 @@ max_rgb_LDADD = \
$(INTLLIBS) \ $(INTLLIBS) \
$(max_rgb_RC) $(max_rgb_RC)
metadata_CFLAGS = $(GEXIV2_CFLAGS)
metadata_SOURCES = \
metadata.c
metadata_LDADD = \
$(libgimpui) \
$(libgimpwidgets) \
$(libgimpmodule) \
$(libgimp) \
$(libgimpmath) \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
$(GTK_LIBS) \
$(GEXIV2_LIBS) \
$(RT_LIBS) \
$(INTLLIBS) \
$(metadata_RC)
newsprint_SOURCES = \ newsprint_SOURCES = \
newsprint.c newsprint.c

View File

@ -57,7 +57,6 @@ static void run (const gchar *name,
gint *nreturn_vals, gint *nreturn_vals,
GimpParam **return_vals); GimpParam **return_vals);
static gint32 load_image (const gchar *filename, static gint32 load_image (const gchar *filename,
gint32 *layer_ID,
GError **error); GError **error);
static gboolean load_icc_profile (jas_image_t *jas_image, static gboolean load_icc_profile (jas_image_t *jas_image,
gint image_ID, gint image_ID,
@ -127,7 +126,6 @@ run (const gchar *name,
GimpPDBStatusType status = GIMP_PDB_SUCCESS; GimpPDBStatusType status = GIMP_PDB_SUCCESS;
gint image_ID; gint image_ID;
GError *error = NULL; GError *error = NULL;
gint32 layer_ID;
run_mode = param[0].data.d_int32; run_mode = param[0].data.d_int32;
@ -156,7 +154,7 @@ run (const gchar *name,
break; break;
} }
image_ID = load_image (param[1].data.d_string, &layer_ID, &error); image_ID = load_image (param[1].data.d_string, &error);
if (image_ID != -1) if (image_ID != -1)
{ {
@ -170,7 +168,7 @@ run (const gchar *name,
{ {
GimpMetadataLoadFlags flags = GIMP_METADATA_LOAD_ALL; GimpMetadataLoadFlags flags = GIMP_METADATA_LOAD_ALL;
gimp_image_metadata_load_finish (image_ID, layer_ID, "image/jp2", gimp_image_metadata_load_finish (image_ID, "image/jp2",
metadata, flags, metadata, flags,
interactive); interactive);
@ -205,13 +203,13 @@ run (const gchar *name,
static gint32 static gint32
load_image (const gchar *filename, load_image (const gchar *filename,
gint32 *layer_ID,
GError **error) GError **error)
{ {
gint fd; gint fd;
jas_stream_t *stream; jas_stream_t *stream;
gint32 image_ID = -1; gint32 image_ID = -1;
jas_image_t *image; jas_image_t *image;
gint32 layer_ID;
GimpImageType image_type; GimpImageType image_type;
GimpImageBaseType base_type; GimpImageBaseType base_type;
gint width; gint width;

View File

@ -140,7 +140,6 @@ static void run (const gchar *name,
GimpParam **return_vals); GimpParam **return_vals);
static gint32 load_image (const gchar *filename, static gint32 load_image (const gchar *filename,
gint32 *layer_ID,
gboolean interactive, gboolean interactive,
gboolean *resolution_loaded, gboolean *resolution_loaded,
GError **error); GError **error);
@ -148,7 +147,6 @@ static gboolean save_image (const gchar *filename,
gint32 image_ID, gint32 image_ID,
gint32 drawable_ID, gint32 drawable_ID,
gint32 orig_image_ID, gint32 orig_image_ID,
gint *bits_depth,
GError **error); GError **error);
static int respin_cmap (png_structp pp, static int respin_cmap (png_structp pp,
@ -418,7 +416,6 @@ run (const gchar *name,
GimpRunMode run_mode; GimpRunMode run_mode;
GimpPDBStatusType status = GIMP_PDB_SUCCESS; GimpPDBStatusType status = GIMP_PDB_SUCCESS;
gint32 image_ID; gint32 image_ID;
gint32 layer_ID;
gint32 drawable_ID; gint32 drawable_ID;
GError *error = NULL; GError *error = NULL;
@ -451,7 +448,6 @@ run (const gchar *name,
} }
image_ID = load_image (param[1].data.d_string, image_ID = load_image (param[1].data.d_string,
&layer_ID,
interactive, interactive,
&resolution_loaded, &resolution_loaded,
&error); &error);
@ -471,7 +467,7 @@ run (const gchar *name,
if (resolution_loaded) if (resolution_loaded)
flags &= ~GIMP_METADATA_LOAD_RESOLUTION; flags &= ~GIMP_METADATA_LOAD_RESOLUTION;
gimp_image_metadata_load_finish (image_ID, layer_ID, "image/png", gimp_image_metadata_load_finish (image_ID, "image/png",
metadata, flags, metadata, flags,
interactive); interactive);
@ -496,7 +492,6 @@ run (const gchar *name,
GimpMetadata *metadata; GimpMetadata *metadata;
GimpMetadataSaveFlags metadata_flags; GimpMetadataSaveFlags metadata_flags;
gint32 orig_image_ID; gint32 orig_image_ID;
gint bits_depth;
GimpExportReturn export = GIMP_EXPORT_CANCEL; GimpExportReturn export = GIMP_EXPORT_CANCEL;
gboolean alpha; gboolean alpha;
@ -530,8 +525,8 @@ run (const gchar *name,
} }
metadata = gimp_image_metadata_save_prepare (orig_image_ID, metadata = gimp_image_metadata_save_prepare (orig_image_ID,
"image/png", "image/png",
&metadata_flags); &metadata_flags);
pngvals.save_exif = (metadata_flags & GIMP_METADATA_SAVE_EXIF) != 0; pngvals.save_exif = (metadata_flags & GIMP_METADATA_SAVE_EXIF) != 0;
pngvals.save_xmp = (metadata_flags & GIMP_METADATA_SAVE_XMP) != 0; pngvals.save_xmp = (metadata_flags & GIMP_METADATA_SAVE_XMP) != 0;
@ -613,7 +608,7 @@ run (const gchar *name,
if (status == GIMP_PDB_SUCCESS) if (status == GIMP_PDB_SUCCESS)
{ {
if (save_image (param[3].data.d_string, if (save_image (param[3].data.d_string,
image_ID, drawable_ID, orig_image_ID, &bits_depth, &error)) image_ID, drawable_ID, orig_image_ID, &error))
{ {
if (metadata) if (metadata)
{ {
@ -642,12 +637,10 @@ run (const gchar *name,
metadata_flags &= ~GIMP_METADATA_SAVE_THUMBNAIL; metadata_flags &= ~GIMP_METADATA_SAVE_THUMBNAIL;
file = g_file_new_for_path (param[3].data.d_string); file = g_file_new_for_path (param[3].data.d_string);
gimp_image_metadata_save_finish (orig_image_ID, gimp_image_metadata_save_finish (orig_image_ID,
"image/png", "image/png",
metadata, metadata_flags, metadata, metadata_flags,
file, NULL); file, NULL);
g_object_unref (metadata);
g_object_unref (file); g_object_unref (file);
} }
@ -662,6 +655,8 @@ run (const gchar *name,
if (export == GIMP_EXPORT_EXPORT) if (export == GIMP_EXPORT_EXPORT)
gimp_image_delete (image_ID); gimp_image_delete (image_ID);
if (metadata)
g_object_unref (metadata);
} }
else if (strcmp (name, GET_DEFAULTS_PROC) == 0) else if (strcmp (name, GET_DEFAULTS_PROC) == 0)
{ {
@ -822,7 +817,6 @@ load_color_profile (png_structp pp,
*/ */
static gint32 static gint32
load_image (const gchar *filename, load_image (const gchar *filename,
gint32 *layer_ID,
gboolean interactive, gboolean interactive,
gboolean *resolution_loaded, gboolean *resolution_loaded,
GError **error) GError **error)
@ -1356,8 +1350,6 @@ load_image (const gchar *filename,
g_object_unref (buffer); g_object_unref (buffer);
} }
*layer_ID = layer;
return image; return image;
} }
@ -1435,7 +1427,6 @@ save_image (const gchar *filename,
gint32 image_ID, gint32 image_ID,
gint32 drawable_ID, gint32 drawable_ID,
gint32 orig_image_ID, gint32 orig_image_ID,
gint *bits_depth,
GError **error) GError **error)
{ {
gint i, k; /* Looping vars */ gint i, k; /* Looping vars */
@ -1509,8 +1500,6 @@ save_image (const gchar *filename,
break; break;
} }
*bits_depth = bit_depth;
pp = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); pp = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!pp) if (!pp)
{ {

View File

@ -1,7 +1,6 @@
align_layers_RC = align-layers.rc.o align_layers_RC = align-layers.rc.o
animation_optimize_RC = animation-optimize.rc.o animation_optimize_RC = animation-optimize.rc.o
animation_play_RC = animation-play.rc.o animation_play_RC = animation-play.rc.o
attributes_RC = attributes.rc.o
blinds_RC = blinds.rc.o blinds_RC = blinds.rc.o
blur_RC = blur.rc.o blur_RC = blur.rc.o
border_average_RC = border-average.rc.o border_average_RC = border-average.rc.o
@ -66,10 +65,10 @@ gradient_map_RC = gradient-map.rc.o
grid_RC = grid.rc.o grid_RC = grid.rc.o
guillotine_RC = guillotine.rc.o guillotine_RC = guillotine.rc.o
hot_RC = hot.rc.o hot_RC = hot.rc.o
iptc_RC = iptc.rc.o
jigsaw_RC = jigsaw.rc.o jigsaw_RC = jigsaw.rc.o
mail_RC = mail.rc.o mail_RC = mail.rc.o
max_rgb_RC = max-rgb.rc.o max_rgb_RC = max-rgb.rc.o
metadata_RC = metadata.rc.o
newsprint_RC = newsprint.rc.o newsprint_RC = newsprint.rc.o
nl_filter_RC = nl-filter.rc.o nl_filter_RC = nl-filter.rc.o
oilify_RC = oilify.rc.o oilify_RC = oilify.rc.o

View File

@ -2,7 +2,6 @@
'align-layers' => { ui => 1 }, 'align-layers' => { ui => 1 },
'animation-optimize' => {}, 'animation-optimize' => {},
'animation-play' => { ui => 1, gegl => 1 }, 'animation-play' => { ui => 1, gegl => 1 },
'attributes' => { ui => 1, gegl => 1 },
'blinds' => { ui => 1 }, 'blinds' => { ui => 1 },
'blur' => {}, 'blur' => {},
'border-average' => { ui => 1, gegl => 1 }, 'border-average' => { ui => 1, gegl => 1 },
@ -67,10 +66,10 @@
'grid' => { ui => 1 }, 'grid' => { ui => 1 },
'guillotine' => {}, 'guillotine' => {},
'hot' => { ui => 1 }, 'hot' => { ui => 1 },
'iptc' => { ui => 1, libs => 'GEXIV2_LIBS', cflags => 'GEXIV2_CFLAGS' },
'jigsaw' => { ui => 1 }, 'jigsaw' => { ui => 1 },
'mail' => { ui => 1, optional => 1 }, 'mail' => { ui => 1, optional => 1 },
'max-rgb' => { ui => 1 }, 'max-rgb' => { ui => 1 },
'metadata' => { ui => 1, libs => 'GEXIV2_LIBS', cflags => 'GEXIV2_CFLAGS' },
'newsprint' => { ui => 1 }, 'newsprint' => { ui => 1 },
'nl-filter' => { ui => 1 }, 'nl-filter' => { ui => 1 },
'oilify' => { ui => 1 }, 'oilify' => { ui => 1 },

View File

@ -58,13 +58,12 @@ gint32 preview_layer_ID;
gint32 gint32
load_image (const gchar *filename, load_image (const gchar *filename,
GimpRunMode runmode, GimpRunMode runmode,
gint32 *layer_ID,
gboolean preview, gboolean preview,
gboolean *resolution_loaded, gboolean *resolution_loaded,
GError **error) GError **error)
{ {
gint32 volatile image_ID; gint32 volatile image_ID;
gint32 _layer_ID; gint32 layer_ID;
struct jpeg_decompress_struct cinfo; struct jpeg_decompress_struct cinfo;
struct my_error_mgr jerr; struct my_error_mgr jerr;
jpeg_saved_marker_ptr marker; jpeg_saved_marker_ptr marker;
@ -233,11 +232,11 @@ load_image (const gchar *filename,
cinfo.output_width, cinfo.output_width,
cinfo.output_height, cinfo.output_height,
layer_type, 100, GIMP_NORMAL_MODE); layer_type, 100, GIMP_NORMAL_MODE);
_layer_ID = preview_layer_ID; layer_ID = preview_layer_ID;
} }
else else
{ {
_layer_ID = gimp_layer_new (image_ID, _("Background"), layer_ID = gimp_layer_new (image_ID, _("Background"),
cinfo.output_width, cinfo.output_width,
cinfo.output_height, cinfo.output_height,
layer_type, 100, GIMP_NORMAL_MODE); layer_type, 100, GIMP_NORMAL_MODE);
@ -344,7 +343,7 @@ load_image (const gchar *filename,
* loop counter, so that we don't have to keep track ourselves. * loop counter, so that we don't have to keep track ourselves.
*/ */
buffer = gimp_drawable_get_buffer (_layer_ID); buffer = gimp_drawable_get_buffer (layer_ID);
format = babl_format (image_type == GIMP_RGB ? "R'G'B' u8" : "Y' u8"); format = babl_format (image_type == GIMP_RGB ? "R'G'B' u8" : "Y' u8");
while (cinfo.output_scanline < cinfo.output_height) while (cinfo.output_scanline < cinfo.output_height)
@ -413,9 +412,7 @@ load_image (const gchar *filename,
gimp_progress_update (1.0); gimp_progress_update (1.0);
} }
gimp_image_insert_layer (image_ID, _layer_ID, -1, 0); gimp_image_insert_layer (image_ID, layer_ID, -1, 0);
*layer_ID = _layer_ID;
return image_ID; return image_ID;
} }

View File

@ -20,7 +20,6 @@
gint32 load_image (const gchar *filename, gint32 load_image (const gchar *filename,
GimpRunMode runmode, GimpRunMode runmode,
gint32 *layer_ID,
gboolean preview, gboolean preview,
gboolean *resolution_loaded, gboolean *resolution_loaded,
GError **error); GError **error);

View File

@ -188,7 +188,6 @@ background_jpeg_save (PreviewPersistent *pp)
GFile *file = g_file_new_for_path (pp->file_name); GFile *file = g_file_new_for_path (pp->file_name);
GFileInfo *info; GFileInfo *info;
gchar *text; gchar *text;
gint32 layer_ID;
GError *error = NULL; GError *error = NULL;
info = g_file_query_info (file, info = g_file_query_info (file,
@ -219,7 +218,7 @@ background_jpeg_save (PreviewPersistent *pp)
g_object_unref (file); g_object_unref (file);
/* and load the preview */ /* and load the preview */
load_image (pp->file_name, GIMP_RUN_NONINTERACTIVE, &layer_ID, TRUE, NULL, NULL); load_image (pp->file_name, GIMP_RUN_NONINTERACTIVE, TRUE, NULL, NULL);
} }
/* we cleanup here (load_image doesn't run in the background) */ /* we cleanup here (load_image doesn't run in the background) */

View File

@ -173,7 +173,6 @@ run (const gchar *name,
GimpRunMode run_mode; GimpRunMode run_mode;
GimpPDBStatusType status = GIMP_PDB_SUCCESS; GimpPDBStatusType status = GIMP_PDB_SUCCESS;
gint32 image_ID; gint32 image_ID;
gint32 layer_ID;
gint32 drawable_ID; gint32 drawable_ID;
GimpParasite *parasite; GimpParasite *parasite;
GError *error = NULL; GError *error = NULL;
@ -211,7 +210,7 @@ run (const gchar *name,
break; break;
} }
image_ID = load_image (param[1].data.d_string, run_mode, &layer_ID, FALSE, image_ID = load_image (param[1].data.d_string, run_mode, FALSE,
&resolution_loaded, &error); &resolution_loaded, &error);
if (image_ID != -1) if (image_ID != -1)
@ -224,12 +223,12 @@ run (const gchar *name,
if (metadata) if (metadata)
{ {
GimpMetadataLoadFlags flags = GIMP_METADATA_LOAD_ALL; GimpMetadataLoadFlags flags = GIMP_METADATA_LOAD_ALL;
if (resolution_loaded) if (resolution_loaded)
flags &= ~GIMP_METADATA_LOAD_RESOLUTION; flags &= ~GIMP_METADATA_LOAD_RESOLUTION;
gimp_image_metadata_load_finish (image_ID, layer_ID, "image/jpeg", gimp_image_metadata_load_finish (image_ID, "image/jpeg",
metadata, flags, metadata, flags,
load_interactive); load_interactive);
@ -575,6 +574,7 @@ run (const gchar *name,
g_object_unref (file); g_object_unref (file);
} }
} }
if (metadata) if (metadata)
g_object_unref (metadata); g_object_unref (metadata);
} }

View File

@ -211,7 +211,7 @@ run (const gchar *name,
if (resolution_loaded) if (resolution_loaded)
flags &= ~GIMP_METADATA_LOAD_RESOLUTION; flags &= ~GIMP_METADATA_LOAD_RESOLUTION;
gimp_image_metadata_load_finish (image_ID, -1, "image/x-psd", gimp_image_metadata_load_finish (image_ID, "image/x-psd",
metadata, flags, metadata, flags,
interactive); interactive);
@ -315,8 +315,6 @@ run (const gchar *name,
metadata, metadata_flags, metadata, metadata_flags,
file, NULL); file, NULL);
g_object_unref (file); g_object_unref (file);
g_object_unref (metadata);
} }
values[0].data.d_status = GIMP_PDB_SUCCESS; values[0].data.d_status = GIMP_PDB_SUCCESS;
@ -336,6 +334,8 @@ run (const gchar *name,
if (export == GIMP_EXPORT_EXPORT) if (export == GIMP_EXPORT_EXPORT)
gimp_image_delete (image_ID); gimp_image_delete (image_ID);
if (metadata)
g_object_unref (metadata);
} }
/* Unknown procedure */ /* Unknown procedure */

View File

@ -219,7 +219,6 @@ load_dialog (TIFF *tif,
gint32 gint32
load_image (GFile *file, load_image (GFile *file,
gint32 *layer_ID,
TIFF *tif, TIFF *tif,
TiffSelectedPages *pages, TiffSelectedPages *pages,
gboolean *resolution_loaded, gboolean *resolution_loaded,
@ -930,8 +929,6 @@ load_image (GFile *file,
g_free (name); g_free (name);
} }
*layer_ID = layer;
if (! base_format && image_type == GIMP_INDEXED) if (! base_format && image_type == GIMP_INDEXED)
{ {
/* can't create the palette format here, need to get it from /* can't create the palette format here, need to get it from

View File

@ -37,7 +37,6 @@ gboolean load_dialog (TIFF *tif,
TiffSelectedPages *pages); TiffSelectedPages *pages);
gint32 load_image (GFile *file, gint32 load_image (GFile *file,
gint32 *layer_ID,
TIFF *tif, TIFF *tif,
TiffSelectedPages *pages, TiffSelectedPages *pages,
gboolean *resolution_loaded, gboolean *resolution_loaded,

View File

@ -264,14 +264,13 @@ run (const gchar *name,
if (run_it) if (run_it)
{ {
gint32 image; gint32 image;
gint32 layer_ID; gboolean resolution_loaded = FALSE;
gboolean resolution_loaded = FALSE;
gimp_set_data (LOAD_PROC, gimp_set_data (LOAD_PROC,
&pages.target, sizeof (pages.target)); &pages.target, sizeof (pages.target));
image = load_image (file, &layer_ID, tif, &pages, image = load_image (file, tif, &pages,
&resolution_loaded, &resolution_loaded,
&error); &error);
@ -292,7 +291,7 @@ run (const gchar *name,
if (resolution_loaded) if (resolution_loaded)
flags &= ~GIMP_METADATA_LOAD_RESOLUTION; flags &= ~GIMP_METADATA_LOAD_RESOLUTION;
gimp_image_metadata_load_finish (image, layer_ID, "image/tiff", gimp_image_metadata_load_finish (image, "image/tiff",
metadata, flags, metadata, flags,
run_mode == GIMP_RUN_INTERACTIVE); run_mode == GIMP_RUN_INTERACTIVE);
@ -472,9 +471,9 @@ run (const gchar *name,
* exiv2 saves them with wrong type and the original values * exiv2 saves them with wrong type and the original values
* could be invalid, see also bug 761823 * could be invalid, see also bug 761823
*/ */
gimp_metadata_remove_attribute (metadata, "Exif.Image.0x0118"); gexiv2_metadata_clear_tag (metadata, "Exif.Image.0x0118");
gimp_metadata_remove_attribute (metadata, "Exif.Image.0x0119"); gexiv2_metadata_clear_tag (metadata, "Exif.Image.0x0119");
gimp_metadata_remove_attribute (metadata, "Exif.Image.PageNumber"); gexiv2_metadata_clear_tag (metadata, "Exif.Image.PageNumber");
gimp_metadata_set_bits_per_sample (metadata, saved_bpp); gimp_metadata_set_bits_per_sample (metadata, saved_bpp);
@ -500,7 +499,6 @@ run (const gchar *name,
"image/tiff", "image/tiff",
metadata, metadata_flags, metadata, metadata_flags,
file, NULL); file, NULL);
g_object_unref (metadata);
} }
/* Store mvals data */ /* Store mvals data */
@ -517,6 +515,8 @@ run (const gchar *name,
if (export == GIMP_EXPORT_EXPORT) if (export == GIMP_EXPORT_EXPORT)
gimp_image_delete (image); gimp_image_delete (image);
if (metadata)
g_object_unref (metadata);
} }
else else
{ {

View File

@ -5,8 +5,6 @@ uidata_DATA = \
plug-in-file-png.ui \ plug-in-file-png.ui \
plug-in-file-raw.ui \ plug-in-file-raw.ui \
plug-in-file-tiff.ui \ plug-in-file-tiff.ui \
plug-in-attributes.ui \ plug-in-metadata.ui
plug-in-iptc.ui
EXTRA_DIST = $(uidata_DATA) EXTRA_DIST = $(uidata_DATA)

View File

@ -0,0 +1,908 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkListStore" id="exif-liststore">
<columns>
<!-- column-name c_exif_tag -->
<column type="gchararray"/>
<!-- column-name c_exif_value -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="xmp-liststore">
<columns>
<!-- column-name c_xmp_tag -->
<column type="gchararray"/>
<!-- column-name c_xmp_value -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkVBox" id="metadata-vbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkNotebook" id="metadata-notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="scrollable">True</property>
<child>
<object class="GtkScrolledWindow" id="exif-scroll">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">6</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="exif-treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">exif-liststore</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="exif-treeview-selection"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="exif_tag_column">
<property name="resizable">True</property>
<property name="spacing">3</property>
<property name="title" translatable="yes">Exif Tag</property>
<child>
<object class="GtkCellRendererText" id="exif_tag_cell_renderer"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="exif_value_column">
<property name="resizable">True</property>
<property name="spacing">3</property>
<property name="title" translatable="yes">Value</property>
<child>
<object class="GtkCellRendererText" id="exif_value_cell_renderer"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="exif">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">4</property>
<property name="ypad">4</property>
<property name="label" translatable="yes">Exif</property>
</object>
<packing>
<property name="tab_expand">True</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="xmp-scroll">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">6</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="xm-ptreeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">xmp-liststore</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="xmp-treeview-selection"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="xmp_tag_column">
<property name="resizable">True</property>
<property name="spacing">3</property>
<property name="title" translatable="yes">XMP Tag</property>
<child>
<object class="GtkCellRendererText" id="xmp_tag_cell_renderer"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="xmp_value_column">
<property name="resizable">True</property>
<property name="spacing">3</property>
<property name="title" translatable="yes">Value</property>
<child>
<object class="GtkCellRendererText" id="xmp_value_cell_renderer"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="xmp">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">4</property>
<property name="ypad">4</property>
<property name="label" translatable="yes">XMP</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="spacing">6</property>
<child>
<object class="GtkNotebook" id="iptc-notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkVBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkTable" id="desctable">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="n_rows">8</property>
<property name="n_columns">2</property>
<property name="column_spacing">3</property>
<property name="row_spacing">3</property>
<child>
<object class="GtkLabel" id="l_title">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Title</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_author">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Author</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_authortitle">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Authortitle</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_copyright">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Copyright</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_caption">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Caption</property>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_captionwriter">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Captionwriter</property>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_headline">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Headline</property>
</object>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_specialinstruct">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Special
Instructions</property>
</object>
<packing>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.ObjectName">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.Byline">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.BylineTitle">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.Copyright">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.Writer">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="caption_scroll">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="Iptc.Application2.Caption">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="headline_scroll">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="Iptc.Application2.Headline">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="instruct_scroll">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="Iptc.Application2.SpecialInstructions">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="iptcdesc">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">2</property>
<property name="ypad">2</property>
<property name="label" translatable="yes">Description</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkTable" id="table3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="n_rows">4</property>
<property name="n_columns">2</property>
<property name="column_spacing">3</property>
<property name="row_spacing">3</property>
<child>
<object class="GtkLabel" id="l_keywords1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Keywords</property>
</object>
<packing>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_category1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Category</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_suppcat1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Supplemental
Category</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_urgency1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Urgency</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow10">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="Iptc.Application2.Keywords">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow12">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="Iptc.Application2.SuppCategory">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.Urgency">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.Category">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="iptckeys">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">2</property>
<property name="ypad">2</property>
<property name="label" translatable="yes">Keywords/Categories</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="box4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkTable" id="table4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="n_rows">9</property>
<property name="n_columns">2</property>
<property name="column_spacing">3</property>
<property name="row_spacing">3</property>
<child>
<object class="GtkHSeparator" id="hseparator4">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_credit">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Credit</property>
</object>
<packing>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_source">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Source</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.Credit">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.Source">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_transmission">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Transmission
reference</property>
</object>
<packing>
<property name="top_attach">8</property>
<property name="bottom_attach">9</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.TransmissionReference">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">8</property>
<property name="bottom_attach">9</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_city">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">City</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.City">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_sublocation">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Sublocation</property>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.SubLocation">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_province">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">3</property>
<property name="ypad">3</property>
<property name="label" translatable="yes">Province/State</property>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.ProvinceState">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l_country">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Country</property>
</object>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="x_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="Iptc.Application2.CountryName">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator2">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="iptccredits">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">2</property>
<property name="ypad">2</property>
<property name="label" translatable="yes">Credits/Origin</property>
</object>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="iptc-write-button">
<property name="label" translatable="yes">Write IPTC Data</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="iptc">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xpad">4</property>
<property name="ypad">4</property>
<property name="label" translatable="yes">IPTC</property>
</object>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</interface>

View File

@ -6,7 +6,6 @@
plug-ins/common/align-layers.c plug-ins/common/align-layers.c
plug-ins/common/animation-optimize.c plug-ins/common/animation-optimize.c
plug-ins/common/animation-play.c plug-ins/common/animation-play.c
plug-ins/common/attributes.c
plug-ins/common/blinds.c plug-ins/common/blinds.c
plug-ins/common/blur.c plug-ins/common/blur.c
plug-ins/common/border-average.c plug-ins/common/border-average.c
@ -74,6 +73,7 @@ plug-ins/common/hot.c
plug-ins/common/jigsaw.c plug-ins/common/jigsaw.c
plug-ins/common/mail.c plug-ins/common/mail.c
plug-ins/common/max-rgb.c plug-ins/common/max-rgb.c
plug-ins/common/metadata.c
plug-ins/common/newsprint.c plug-ins/common/newsprint.c
plug-ins/common/nl-filter.c plug-ins/common/nl-filter.c
plug-ins/common/oilify.c plug-ins/common/oilify.c
@ -159,8 +159,7 @@ plug-ins/gimpressionist/utils.c
[type: gettext/glade]plug-ins/ui/plug-in-file-png.ui [type: gettext/glade]plug-ins/ui/plug-in-file-png.ui
[type: gettext/glade]plug-ins/ui/plug-in-file-raw.ui [type: gettext/glade]plug-ins/ui/plug-in-file-raw.ui
[type: gettext/glade]plug-ins/ui/plug-in-file-tiff.ui [type: gettext/glade]plug-ins/ui/plug-in-file-tiff.ui
[type: gettext/glade]plug-ins/ui/plug-in-metainfo.ui [type: gettext/glade]plug-ins/ui/plug-in-metadata.ui
[type: gettext/glade]plug-ins/ui/plug-in-attributes.ui
plug-ins/gradient-flare/gradient-flare.c plug-ins/gradient-flare/gradient-flare.c
plug-ins/help-browser/dialog.c plug-ins/help-browser/dialog.c
plug-ins/help-browser/help-browser.c plug-ins/help-browser/help-browser.c
@ -218,11 +217,6 @@ plug-ins/lighting/lighting-ui.c
plug-ins/map-object/map-object-apply.c plug-ins/map-object/map-object-apply.c
plug-ins/map-object/map-object-main.c plug-ins/map-object/map-object-main.c
plug-ins/map-object/map-object-ui.c plug-ins/map-object/map-object-ui.c
plug-ins/metainfo/interface.c
plug-ins/metainfo/page-administration.c
plug-ins/metainfo/page-rights.c
plug-ins/metainfo/page-description.c
plug-ins/metainfo/page-artwork.c
plug-ins/pagecurl/pagecurl.c plug-ins/pagecurl/pagecurl.c
plug-ins/print/print-draw-page.c plug-ins/print/print-draw-page.c
plug-ins/print/print-page-layout.c plug-ins/print/print-page-layout.c

View File

@ -783,61 +783,6 @@ CODE
); );
} }
sub item_get_metadata {
$blurb = "Returns the item's metadata.";
$help = 'Returns metadata from the item.';
&std_pdb_misc('2016', '2.10');
@inargs = (
{ name => 'item', type => 'item',
desc => 'The item' }
);
@outargs = (
{ name => 'metadata_string', type => 'string', wrap => 1,
desc => 'The metadata as a xml string'}
);
%invoke = (
code => <<'CODE'
{
GimpMetadata *metadata = gimp_item_get_metadata (item);
if (metadata)
metadata_string = gimp_metadata_serialize (metadata);
}
CODE
);
}
sub item_set_metadata {
$blurb = "Set the item's metadata.";
$help = 'Sets metadata on the item.';
&std_pdb_misc('2016', '2.10');
@inargs = (
{ name => 'item', type => 'item',
desc => 'The item' },
{ name => 'metadata_string', type => 'string', wrap => 1,
desc => 'The metadata as a xml string' }
);
%invoke = (
code => <<'CODE'
{
GimpMetadata *metadata = gimp_metadata_deserialize (metadata_string);
gimp_item_set_metadata (item, metadata, TRUE);
if (metadata)
g_object_unref (metadata);
}
CODE
);
}
sub item_attach_parasite { sub item_attach_parasite {
$blurb = 'Add a parasite to an item.'; $blurb = 'Add a parasite to an item.';
@ -951,12 +896,10 @@ CODE
} }
@headers = qw("core/gimplayermask.h" @headers = qw("core/gimplayermask.h"
"libgimpbase/gimpbase.h"
"core/gimplist.h" "core/gimplist.h"
"core/gimpselection.h" "core/gimpselection.h"
"core/gimpitem.h"
"text/gimptextlayer.h" "text/gimptextlayer.h"
"vectors/gimpvectors.h" "vectors/gimpvectors.h"
"gimppdb-utils.h" "gimppdb-utils.h"
"gimppdbcontext.h" "gimppdbcontext.h"
"gimp-intl.h"); "gimp-intl.h");
@ -967,13 +910,13 @@ CODE
item_is_drawable item_is_drawable
item_is_layer item_is_layer
item_is_text_layer item_is_text_layer
item_is_channel item_is_channel
item_is_layer_mask item_is_layer_mask
item_is_selection item_is_selection
item_is_vectors item_is_vectors
item_is_group item_is_group
item_get_parent item_get_parent
item_get_children item_get_children
item_get_name item_set_name item_get_name item_set_name
item_get_visible item_set_visible item_get_visible item_set_visible
item_get_linked item_set_linked item_get_linked item_set_linked
@ -981,10 +924,9 @@ CODE
item_get_lock_position item_set_lock_position item_get_lock_position item_set_lock_position
item_get_color_tag item_set_color_tag item_get_color_tag item_set_color_tag
item_get_tattoo item_set_tattoo item_get_tattoo item_set_tattoo
item_get_metadata item_set_metadata item_attach_parasite item_detach_parasite
item_attach_parasite item_detach_parasite item_get_parasite
item_get_parasite item_get_parasite_list);
item_get_parasite_list);
%exports = (app => [@procs], lib => [@procs]); %exports = (app => [@procs], lib => [@procs]);