[gimp/gimp-attributes-wip: 129/130] periodically merge with master to stay up to date
- From: Hartmut Kuhse <hartmutkuhse src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-attributes-wip: 129/130] periodically merge with master to stay up to date
- Date: Sun, 28 Jun 2015 15:28:09 +0000 (UTC)
commit 79a2cfe13bbbfb54a36014197fdc8299d99504c7
Merge: 8f2ffb2 65960f1
Author: Hartmut Kuhse <hk_priv gmx de>
Date: Sun Jun 28 07:52:21 2015 +0200
periodically merge with master to stay up to date
Conflicts:
app/pdb/internal-procs.c
libgimp/Makefile.am
libgimp/gimp.h
libgimp/gimpimage_pdb.h
libgimpbase/gimpmetadata.c
AUTHORS | 5 +
app/actions/context-commands.c | 6 +-
app/actions/debug-commands.c | 54 +-
app/actions/drawable-commands.c | 26 +-
app/actions/edit-commands.c | 7 +-
app/actions/filters-actions.c | 8 +-
app/actions/image-actions.c | 38 +-
app/actions/image-commands.c | 31 +
app/actions/image-commands.h | 83 +-
app/actions/layers-commands.c | 20 +-
app/config/gimpcoreconfig.c | 18 +-
app/config/gimpguiconfig.c | 14 +
app/config/gimpguiconfig.h | 1 +
app/config/gimprc-blurbs.h | 3 +
app/core/Makefile.am | 3 +
app/core/core-enums.c | 16 +-
app/core/core-enums.h | 12 +-
app/core/gimp-edit.c | 20 +-
app/core/gimp-utils.c | 27 +-
app/core/gimp-utils.h | 5 +-
app/core/gimpbuffer.c | 50 +
app/core/gimpbuffer.h | 9 +
app/core/gimpdrawable-transform.c | 14 +-
app/core/gimpdrawable.c | 14 +-
app/core/gimpgrouplayer.c | 3 +
app/core/gimpimage-convert-type.c | 4 +-
app/core/gimpimage-item-list.c | 68 +-
app/core/gimpimage-item-list.h | 4 +-
app/core/gimpimage-merge.c | 1 +
app/core/gimpimage-new.c | 47 +-
app/core/gimpimage-profile.c | 449 +-
app/core/gimpimage-profile.h | 44 +-
app/core/gimpimage.c | 35 +-
app/core/gimpitem-linked.c | 96 +-
app/core/gimpitem.c | 7 +-
app/core/gimpitemtree.c | 52 +-
app/core/gimplayer-new.c | 227 +
app/core/gimplayer-new.h | 52 +
app/core/gimplayer.c | 122 -
app/core/gimplayer.h | 21 -
app/core/gimpselection.c | 11 +-
app/core/gimpstrokeoptions.c | 3 +
app/dialogs/preferences-dialog.c | 6 +-
app/display/gimpdisplayshell-dnd.c | 1 +
app/display/gimpdisplayshell-filter.c | 13 +
app/display/gimpdisplayshell-filter.h | 11 +-
app/display/gimpdisplayshell-handlers.c | 19 +-
app/display/gimpdisplayshell-profile.c | 47 +-
app/display/gimpdisplayshell-profile.h | 16 +-
app/display/gimpdisplayshell-render.c | 197 +-
app/display/gimpdisplayshell-title.c | 4 +-
app/display/gimpdisplayshell.c | 5 +-
app/display/gimpdisplayshell.h | 1 +
app/file/file-open.c | 2 +-
app/gegl/gimp-gegl-nodes.c | 4 +
app/operations/Makefile.am | 8 +
app/operations/gimp-operations.c | 8 +
app/operations/gimplayermodefunctions.c | 21 +-
app/operations/gimplayermodefunctions.h | 3 +-
app/operations/gimpoperationlchchromamode.c | 204 +
app/operations/gimpoperationlchchromamode.h | 72 +
app/operations/gimpoperationlchcolormode.c | 193 +
app/operations/gimpoperationlchcolormode.h | 72 +
app/operations/gimpoperationlchhuemode.c | 204 +
app/operations/gimpoperationlchhuemode.h | 72 +
app/operations/gimpoperationlchlightnessmode.c | 187 +
app/operations/gimpoperationlchlightnessmode.h | 72 +
app/paint/gimppaintcore-loops.c | 2 +-
app/paint/gimppaintoptions.c | 56 +-
app/pdb/Makefile.am | 2 +
app/pdb/image-cmds.c | 476 -
app/pdb/image-color-profile-cmds.c | 375 +
app/pdb/image-transform-cmds.c | 522 +
app/pdb/internal-procs.c | 4 +-
app/pdb/internal-procs.h | 108 +-
app/pdb/layer-cmds.c | 57 +-
app/pdb/plug-in-compat-cmds.c | 309 +-
app/plug-in/plug-in-menu-path.c | 11 +-
app/plug-in/plug-in-params.c | 9 +-
app/sanity.c | 1 +
app/tests/gimp-app-test-utils.c | 1 +
app/text/gimp-fonts.c | 6 +
app/tools/gimpcurvestool.c | 142 +-
app/tools/gimpeditselectiontool.c | 29 +-
app/tools/gimpfliptool.c | 15 +-
app/tools/gimpgegltool.c | 1 +
app/tools/gimpseamlessclonetool.c | 28 +-
app/tools/gimptexttool-editor.c | 185 +-
app/tools/gimptransformtool.c | 42 +-
app/widgets/gimpcontainertreeview.c | 18 +
app/widgets/gimphelp-ids.h | 3 +
app/widgets/gimpimageprofileview.c | 2 +-
app/widgets/gimplayertreeview.c | 1 +
app/widgets/gimptagentry.c | 20 +-
app/widgets/gimpwidgets-constructors.c | 12 +-
app/xcf/xcf-load.c | 1 +
authors.xml | 33 +-
build/windows/jhbuild/glib.moduleset | 13 +-
build/windows/jhbuild/gtk+.moduleset | 13 +-
build/windows/jhbuild/misclibs.moduleset | 18 +-
.../jhbuild/patches/gtk-horiz-scrolling.patch | 65 -
.../windows/jhbuild/patches/iconv-fix-inline.patch | 12 +
configure.ac | 2 +-
devel-docs/libgimp/libgimp-docs.sgml | 37 +-
devel-docs/libgimp/libgimp-sections.txt | 122 +-
devel-docs/libgimp/tmpl/gimpenums.sgml | 98 -
devel-docs/libgimpbase/libgimpbase-docs.sgml | 32 +-
devel-docs/libgimpbase/libgimpbase-sections.txt | 12 +-
devel-docs/libgimpcolor/libgimpcolor-docs.sgml | 35 +-
devel-docs/libgimpcolor/libgimpcolor-sections.txt | 46 +-
devel-docs/libgimpconfig/libgimpconfig-docs.sgml | 27 +-
.../libgimpconfig/libgimpconfig-sections.txt | 11 +-
devel-docs/libgimpmath/libgimpmath-docs.sgml | 29 +-
devel-docs/libgimpmodule/libgimpmodule-docs.sgml | 30 +-
devel-docs/libgimpthumb/libgimpthumb-docs.sgml | 25 +-
devel-docs/libgimpwidgets/Makefile.am | 2 +-
.../{gimp-browser.png => gimp-widget-browser.png} | Bin 6308 -> 6308 bytes
.../{gimp-button.png => gimp-widget-button.png} | Bin 1973 -> 1973 bytes
...ain-button.png => gimp-widget-chain-button.png} | Bin 4189 -> 4189 bytes
...p-color-area.png => gimp-widget-color-area.png} | Bin 2411 -> 2411 bytes
...lor-button.png => gimp-widget-color-button.png} | Bin 2728 -> 2728 bytes
...x-entry.png => gimp-widget-color-hex-entry.png} | Bin 3330 -> 3330 bytes
...png => gimp-widget-color-profile-combo-box.png} | Bin 3857 -> 3857 bytes
...color-scale.png => gimp-widget-color-scale.png} | Bin 2395 -> 2395 bytes
...lection.png => gimp-widget-color-selection.png} | Bin 36825 -> 36825 bytes
.../{gimp-dialog.png => gimp-widget-dialog.png} | Bin 9839 -> 9839 bytes
...ombo-box.png => gimp-widget-enum-combo-box.png} | Bin 3241 -> 3241 bytes
...p-enum-label.png => gimp-widget-enum-label.png} | Bin 2536 -> 2536 bytes
...p-file-entry.png => gimp-widget-file-entry.png} | Bin 4970 -> 4970 bytes
.../{gimp-frame.png => gimp-widget-frame.png} | Bin 3752 -> 3752 bytes
...{gimp-hint-box.png => gimp-widget-hint-box.png} | Bin 8112 -> 8112 bytes
...combo-box.png => gimp-widget-int-combo-box.png} | Bin 3518 -> 3518 bytes
...ize-entry.png => gimp-widget-memsize-entry.png} | Bin 5276 -> 5276 bytes
...entry.png => gimp-widget-number-pair-entry.png} | Bin 2916 -> 2916 bytes
...offset-area.png => gimp-widget-offset-area.png} | Bin 2742 -> 2742 bytes
...-selector.png => gimp-widget-page-selector.png} | Bin 17466 -> 17466 bytes
...path-editor.png => gimp-widget-path-editor.png} | Bin 15238 -> 15238 bytes
...pick-button.png => gimp-widget-pick-button.png} | Bin 2692 -> 2692 bytes
...eview-area.png => gimp-widget-preview-area.png} | Bin 9316 -> 9316 bytes
...bo-box.png => gimp-widget-string-combo-box.png} | Bin 3708 -> 3708 bytes
...imp-unit-menu.png => gimp-widget-unit-menu.png} | Bin 3028 -> 3028 bytes
devel-docs/libgimpwidgets/libgimpwidgets-docs.sgml | 41 +-
.../libgimpwidgets/libgimpwidgets-sections.txt | 88 +-
devel-docs/libgimpwidgets/libgimpwidgets.types | 2 +
devel-docs/libgimpwidgets/tmpl/.gitignore | 3 +
devel-docs/libgimpwidgets/tmpl/gimpstock.sgml | 557 +-
devel-docs/libgimpwidgets/visual-index.xml | 44 +-
devel-docs/tools/widgets.c | 52 +-
docs/gimprc.5.in | 8 +-
etc/gimprc | 8 +-
icons/16/gimp-selection-grow.png | Bin 275 -> 226 bytes
icons/16/gimp-selection-shrink.png | Bin 284 -> 212 bytes
libgimp/Makefile.am | 9 +-
libgimp/gimp.c | 10 +-
libgimp/gimp.def | 4 +
libgimp/gimp.h | 1 +
libgimp/gimp_pdb.c | 10 +-
libgimp/gimp_pdb_headers.h | 2 +
libgimp/gimpaspectpreview.c | 4 +-
libgimp/gimpbrush_pdb.c | 44 +-
libgimp/gimpbrushselectbutton.c | 18 +-
libgimp/gimpbuffer_pdb.c | 14 +-
libgimp/gimpchannel_pdb.c | 2 +-
libgimp/gimpcolor_pdb.c | 2 +-
libgimp/gimpcontext_pdb.c | 162 +-
libgimp/gimpdisplay_pdb.c | 4 +-
libgimp/gimpdrawable.c | 10 +-
libgimp/gimpdrawable_pdb.c | 10 +-
libgimp/gimpdrawablecolor_pdb.c | 28 +-
libgimp/gimpdrawablepreview.c | 8 +-
libgimp/gimpdrawabletransform_pdb.c | 32 +-
libgimp/gimpdynamics_pdb.c | 4 +-
libgimp/gimpedit_pdb.c | 18 +-
libgimp/gimpenums.c.tail | 8 +-
libgimp/gimpenums.h | 6 +-
libgimp/gimpexport.c | 4 +-
libgimp/gimpfileops_pdb.c | 10 +-
libgimp/gimpfontselectbutton.c | 12 +-
libgimp/gimpgimprc.c | 2 +-
libgimp/gimpgimprc_pdb.c | 4 +-
libgimp/gimpgradient_pdb.c | 62 +-
libgimp/gimpgradientmenu.c | 2 +-
libgimp/gimpgradientselectbutton.c | 12 +-
libgimp/gimpimage.c | 18 +-
libgimp/gimpimage_pdb.c | 314 +-
libgimp/gimpimage_pdb.h | 347 +-
libgimp/gimpimagecolorprofile.c | 181 +
libgimp/gimpimagecolorprofile.h | 46 +
libgimp/gimpimagecolorprofile_pdb.c | 212 +
libgimp/gimpimagecolorprofile_pdb.h | 51 +
libgimp/gimpimagecombobox.c | 2 +-
libgimp/gimpimageconvert_pdb.c | 4 +-
libgimp/gimpimagegrid_pdb.c | 20 +-
libgimp/gimpimageselect_pdb.c | 14 +-
libgimp/gimpimagetransform_pdb.c | 303 +
libgimp/gimpimagetransform_pdb.h | 62 +
libgimp/gimpitem_pdb.c | 58 +-
libgimp/gimpitemcombobox.c | 32 +-
libgimp/gimpitemtransform_pdb.c | 18 +-
libgimp/gimplayer.c | 4 +-
libgimp/gimplayer_pdb.c | 10 +-
libgimp/gimpmetadata.c | 8 +-
libgimp/gimppainttools_pdb.c | 4 +-
libgimp/gimppalette_pdb.c | 30 +-
libgimp/gimppalettemenu.c | 6 +-
libgimp/gimppaletteselectbutton.c | 12 +-
libgimp/gimppattern_pdb.c | 4 +-
libgimp/gimppatternselectbutton.c | 12 +-
libgimp/gimppixbuf.c | 6 +-
libgimp/gimpplugin_pdb.c | 14 +-
libgimp/gimpprocbrowserdialog.c | 4 +-
libgimp/gimpproceduraldb_pdb.c | 2 +-
libgimp/gimpprocview.c | 2 +-
libgimp/gimpprogress.c | 10 +-
libgimp/gimpprogress_pdb.c | 14 +-
libgimp/gimpprogressbar.c | 2 +-
libgimp/gimpselectbutton.c | 2 +-
libgimp/gimpselectiontools_pdb.c | 6 +-
libgimp/gimptextlayer_pdb.c | 60 +-
libgimp/gimpui.c | 8 +-
libgimp/gimpvectors.c | 28 +-
libgimp/gimpvectors_pdb.c | 52 +-
libgimp/gimpzoompreview.c | 16 +-
libgimpbase/gimpbasetypes.c | 16 +-
libgimpbase/gimpchecks.c | 2 +-
libgimpbase/gimpcpuaccel.c | 4 +-
libgimpbase/gimpenv.c | 16 +-
libgimpbase/gimpmemsize.c | 8 +-
libgimpbase/gimpmetadata.c | 519 +-
libgimpbase/gimpparam.h | 8 +-
libgimpbase/gimprectangle.c | 4 +-
libgimpbase/gimpunit.c | 14 +-
libgimpbase/gimputils.c | 28 +-
libgimpbase/gimpvaluearray.c | 41 +-
libgimpbase/gimpvaluearray.h | 2 +-
libgimpbase/gimpwire.h | 30 +-
libgimpcolor/Makefile.am | 6 +-
libgimpcolor/gimpcairo.c | 29 +-
libgimpcolor/gimpcairo.h | 8 +-
libgimpcolor/gimpcolor.def | 33 +-
libgimpcolor/gimpcolor.h | 2 +-
libgimpcolor/gimpcolormanaged.c | 16 +-
libgimpcolor/{gimplcms.c => gimpcolorprofile.c} | 221 +-
libgimpcolor/gimpcolorprofile.h | 68 +
libgimpcolor/gimphsl.c | 4 +-
libgimpcolor/gimplcms.h | 68 -
libgimpcolor/gimppixbuf.c | 49 +-
libgimpcolor/gimppixbuf.h | 7 +-
libgimpcolor/gimprgb-parse.c | 10 +-
libgimpcolor/gimprgb.c | 26 +-
libgimpconfig/gimpcolorconfig.c | 52 +-
libgimpconfig/gimpcolorconfig.h | 20 +-
libgimpconfig/gimpconfig-deserialize.c | 4 +-
libgimpconfig/gimpconfig-error.c | 2 +-
libgimpconfig/gimpconfig-iface.c | 36 +-
libgimpconfig/gimpconfig-path.c | 18 +-
libgimpconfig/gimpconfig-serialize.c | 10 +-
libgimpconfig/gimpconfig-utils.c | 10 +-
libgimpconfig/gimpconfig.def | 8 +-
libgimpconfig/gimpconfigwriter.c | 32 +-
libgimpconfig/gimpscanner.c | 32 +-
libgimpmath/gimpmatrix.c | 14 +-
libgimpmath/gimpvector.c | 6 +-
libgimpmodule/gimpmodule.c | 2 +-
libgimpthumb/gimpthumb-utils.c | 12 +-
libgimpthumb/gimpthumbnail.c | 12 +-
libgimpwidgets/gimpbrowser.c | 8 +-
libgimpwidgets/gimpcairo-utils.c | 4 +-
libgimpwidgets/gimpcellrenderercolor.c | 2 +-
libgimpwidgets/gimpcellrenderertoggle.c | 4 +-
libgimpwidgets/gimpchainbutton.c | 2 +-
libgimpwidgets/gimpcolorarea.c | 8 +-
libgimpwidgets/gimpcolorbutton.c | 12 +-
libgimpwidgets/gimpcolordisplay.c | 8 +-
libgimpwidgets/gimpcolordisplaystack.c | 4 +-
libgimpwidgets/gimpcolorhexentry.c | 6 +-
libgimpwidgets/gimpcolorprofilechooserdialog.c | 4 +-
libgimpwidgets/gimpcolorprofilecombobox.c | 20 +-
libgimpwidgets/gimpcolorprofilestore.c | 10 +-
libgimpwidgets/gimpcolorprofileview.c | 4 +-
libgimpwidgets/gimpcolorscale.c | 2 +-
libgimpwidgets/gimpcolorselection.c | 2 +-
libgimpwidgets/gimpcolorselector.c | 2 +-
libgimpwidgets/gimpdialog.c | 8 +-
libgimpwidgets/gimpenumcombobox.c | 8 +-
libgimpwidgets/gimpenumlabel.c | 8 +-
libgimpwidgets/gimpenumstore.c | 14 +-
libgimpwidgets/gimpenumwidgets.c | 20 +-
libgimpwidgets/gimpframe.c | 2 +-
libgimpwidgets/gimphelpui.c | 4 +-
libgimpwidgets/gimphelpui.h | 2 +-
libgimpwidgets/gimpintcombobox.c | 26 +-
libgimpwidgets/gimpintstore.c | 6 +-
libgimpwidgets/gimpnumberpairentry.c | 26 +-
libgimpwidgets/gimpoffsetarea.c | 2 +-
libgimpwidgets/gimppageselector.c | 42 +-
libgimpwidgets/gimppreview.c | 26 +-
libgimpwidgets/gimppreviewarea.c | 6 +-
libgimpwidgets/gimpruler.c | 20 +-
libgimpwidgets/gimpscaleentry.c | 4 +-
libgimpwidgets/gimpscrolledpreview.c | 8 +-
libgimpwidgets/gimpsizeentry.c | 4 +-
libgimpwidgets/gimpstock.h | 4 +-
libgimpwidgets/gimpstringcombobox.c | 12 +-
libgimpwidgets/gimpwidgets-error.h | 2 +-
libgimpwidgets/gimpwidgetsutils.c | 56 +-
menus/image-menu.xml.in | 15 +-
modules/color-selector-cmyk.c | 14 +-
modules/display-filter-lcms.c | 10 +-
modules/display-filter-proof.c | 8 +-
modules/gimpcolorwheel.c | 12 +-
plug-ins/common/.gitignore | 2 -
plug-ins/common/Makefile.am | 21 +-
plug-ins/common/gimprc.common | 1 -
plug-ins/common/lcms.c | 630 +-
plug-ins/common/plugin-defs.pl | 3 +-
plug-ins/common/wind.c | 1048 -
plug-ins/file-jpeg/jpeg-load.c | 20 +-
plug-ins/file-jpeg/jpeg-save.c | 38 +-
plug-ins/file-psd/Makefile.am | 1 +
plug-ins/file-psd/psd-load.c | 881 +-
plug-ins/file-psd/psd-save.c | 54 +-
plug-ins/gradient-flare/gradient-flare.c | 4 +-
plug-ins/script-fu/scripts/burn-in-anim.scm | 2 +-
plug-ins/script-fu/scripts/circuit.scm | 13 +-
plug-ins/script-fu/scripts/fuzzyborder.scm | 4 +-
plug-ins/script-fu/scripts/old-photo.scm | 6 +-
po-libgimp/POTFILES.in | 2 +-
po-libgimp/ca.po | 1403 +-
po-libgimp/es.po | 4636 ++--
po-libgimp/hu.po | 969 +-
po-libgimp/oc.po |16977 +--------
po-libgimp/sk.po | 1182 +-
po-plug-ins/POTFILES.in | 1 -
po-plug-ins/el.po | 611 +-
po-plug-ins/es.po |26790 +++++++-------
po-plug-ins/hu.po | 4072 +--
po-plug-ins/oc.po |17853 ++--------
po-python/es.po | 926 +-
po-python/oc.po |15944 +--------
po-python/sk.po | 441 +-
po-script-fu/es.po | 4599 ++--
po-script-fu/oc.po | 2737 +-
po-script-fu/sk.po | 1802 +-
po-tips/LINGUAS | 1 +
po-tips/oc.po | 327 +
po/POTFILES.in | 2 +
po/el.po | 1799 +-
po/es.po |39150 ++++++++++----------
po/it.po | 567 +-
po/oc.po |15424 +++++---
po/sk.po | 1979 +-
tools/pdbgen/Makefile.am | 7 +-
tools/pdbgen/enumcode.pl | 4 +-
tools/pdbgen/enums.pl | 32 +-
tools/pdbgen/groups.pl | 2 +
tools/pdbgen/lib.pl | 2 +-
tools/pdbgen/pdb/image.pdb | 247 +-
tools/pdbgen/pdb/image_color_profile.pdb | 218 +
tools/pdbgen/pdb/image_transform.pdb | 276 +
tools/pdbgen/pdb/layer.pdb | 57 +-
tools/pdbgen/pdb/plug_in_compat.pdb | 163 +-
362 files changed, 71806 insertions(+), 103695 deletions(-)
---
diff --cc app/core/gimpimage-merge.c
index a779966,590a4c2..032f857
--- a/app/core/gimpimage-merge.c
+++ b/app/core/gimpimage-merge.c
@@@ -40,11 -40,10 +40,12 @@@
#include "gimpgrouplayer.h"
#include "gimpimage.h"
#include "gimpimage-merge.h"
+#include "gimpimage-metadata.h"
#include "gimpimage-undo.h"
#include "gimpitemstack.h"
+#include "gimpitem-metadata.h"
#include "gimplayer-floating-sel.h"
+ #include "gimplayer-new.h"
#include "gimplayermask.h"
#include "gimpmarshal.h"
#include "gimpparasitelist.h"
diff --cc app/xcf/xcf-load.c
index a09f58d,a62b37c..75640a1
--- a/app/xcf/xcf-load.c
+++ b/app/xcf/xcf-load.c
@@@ -47,8 -47,8 +47,9 @@@
#include "core/gimpimage-sample-points.h"
#include "core/gimpimage-undo.h"
#include "core/gimpitemstack.h"
+#include "core/gimpitem-metadata.h"
#include "core/gimplayer-floating-sel.h"
+ #include "core/gimplayer-new.h"
#include "core/gimplayermask.h"
#include "core/gimpparasitelist.h"
#include "core/gimpprogress.h"
diff --cc libgimp/Makefile.am
index d027b93,a4cd0fa..0c1a267
--- a/libgimp/Makefile.am
+++ b/libgimp/Makefile.am
@@@ -206,8 -210,8 +210,10 @@@ libgimp_sources =
gimpgradientselect.h \
gimpimage.c \
gimpimage.h \
+ gimpimagecolorprofile.c \
+ gimpimagecolorprofile.h \
+ gimpitem.c \
+ gimpitem.h \
gimplayer.c \
gimplayer.h \
gimppalette.c \
@@@ -329,7 -333,7 +335,8 @@@ gimpinclude_HEADERS =
gimpgradients.h \
gimpgradientselect.h \
gimpimage.h \
+ gimpimagecolorprofile.h \
+ gimpitem.h \
gimplayer.h \
gimppalette.h \
gimppalettes.h \
diff --cc libgimp/gimp.def
index dd0cd03,de42af0..fd53eba
--- a/libgimp/gimp.def
+++ b/libgimp/gimp.def
@@@ -493,8 -496,8 +496,9 @@@ EXPORT
gimp_image_set_active_channel
gimp_image_set_active_layer
gimp_image_set_active_vectors
+ gimp_image_set_attributes
gimp_image_set_cmap
+ gimp_image_set_color_profile
gimp_image_set_colormap
gimp_image_set_component_active
gimp_image_set_component_visible
diff --cc libgimp/gimp.h
index eb78f6f,a681fd0..e7f83a1
--- a/libgimp/gimp.h
+++ b/libgimp/gimp.h
@@@ -44,7 -44,7 +44,8 @@@
#include <libgimp/gimpgradients.h>
#include <libgimp/gimpgradientselect.h>
#include <libgimp/gimpimage.h>
+ #include <libgimp/gimpimagecolorprofile.h>
+#include <libgimp/gimpitem.h>
#include <libgimp/gimplayer.h>
#include <libgimp/gimppalette.h>
#include <libgimp/gimppalettes.h>
diff --cc libgimp/gimpimage.c
index 246aed4,9c87ec8..9e68720
--- a/libgimp/gimpimage.c
+++ b/libgimp/gimpimage.c
@@@ -101,31 -101,31 +101,31 @@@ gimp_image_get_thumbnail_data (gint32
}
/**
- * gimp_image_get_metadata:
+ * gimp_image_get_attributes:
* @image_ID: The image.
*
- * Returns the image's metadata.
+ * Returns the image's attributes.
*
- * Returns exif/iptc/xmp metadata from the image.
+ * Returns attributes from the image.
*
- * Returns: The exif/ptc/xmp metadata, or %NULL if there is none.
+ * Returns: The attributes, or %NULL if there is none.
*
- * Since: GIMP 2.10
+ * Since: 2.10
**/
-GimpMetadata *
-gimp_image_get_metadata (gint32 image_ID)
+GimpAttributes *
+gimp_image_get_attributes (gint32 image_ID)
{
- GimpMetadata *metadata = NULL;
- gchar *metadata_string;
+ GimpAttributes *attributes = NULL;
+ gchar *attributes_string = NULL;
- metadata_string = _gimp_image_get_metadata (image_ID);
- if (metadata_string)
+ attributes_string = _gimp_image_get_attributes (image_ID);
+ if (attributes_string)
{
- metadata = gimp_metadata_deserialize (metadata_string);
- g_free (metadata_string);
+ attributes = gimp_attributes_deserialize (attributes_string);
+ g_free (attributes_string);
}
- return metadata;
+ return attributes;
}
/**
@@@ -140,22 -140,22 +140,22 @@@
*
* Returns: TRUE on success.
*
- * Since: GIMP 2.10
+ * Since: 2.10
**/
gboolean
-gimp_image_set_metadata (gint32 image_ID,
- GimpMetadata *metadata)
+gimp_image_set_attributes (gint32 image_ID,
+ GimpAttributes *attributes)
{
- gchar *metadata_string = NULL;
+ gchar *attributes_string = NULL;
gboolean success;
- if (metadata)
- metadata_string = gimp_metadata_serialize (metadata);
+ if (attributes)
+ attributes_string = gimp_attributes_serialize (attributes);
- success = _gimp_image_set_metadata (image_ID, metadata_string);
+ success = _gimp_image_set_attributes (image_ID, attributes_string);
- if (metadata_string)
- g_free (metadata_string);
+ if (attributes_string)
+ g_free (attributes_string);
return success;
}
diff --cc libgimp/gimpimage_pdb.h
index 642edb2,22f321c..8264058
--- a/libgimp/gimpimage_pdb.h
+++ b/libgimp/gimpimage_pdb.h
@@@ -32,195 -32,172 +32,172 @@@ G_BEGIN_DECL
/* For information look into the C source or the html documentation */
- gboolean gimp_image_is_valid (gint32 image_ID);
- gint* gimp_image_list (gint *num_images);
- gint32 gimp_image_new (gint width,
- gint height,
- GimpImageBaseType type);
- gint32 gimp_image_new_with_precision (gint width,
- gint height,
- GimpImageBaseType type,
- GimpPrecision precision);
- gint32 gimp_image_duplicate (gint32 image_ID);
- gboolean gimp_image_delete (gint32 image_ID);
- GimpImageBaseType gimp_image_base_type (gint32 image_ID);
- GimpPrecision gimp_image_get_precision (gint32 image_ID);
- gint gimp_image_width (gint32 image_ID);
- gint gimp_image_height (gint32 image_ID);
+ gboolean gimp_image_is_valid (gint32 image_ID);
+ gint* gimp_image_list (gint *num_images);
+ gint32 gimp_image_new (gint width,
+ gint height,
+ GimpImageBaseType type);
+ gint32 gimp_image_new_with_precision (gint width,
+ gint height,
+ GimpImageBaseType type,
+ GimpPrecision precision);
+ gint32 gimp_image_duplicate (gint32 image_ID);
+ gboolean gimp_image_delete (gint32 image_ID);
+ GimpImageBaseType gimp_image_base_type (gint32 image_ID);
+ GimpPrecision gimp_image_get_precision (gint32 image_ID);
+ gint gimp_image_width (gint32 image_ID);
+ gint gimp_image_height (gint32 image_ID);
GIMP_DEPRECATED_FOR(gimp_drawable_free_shadow)
- gboolean gimp_image_free_shadow (gint32 image_ID);
- gboolean gimp_image_resize (gint32 image_ID,
- gint new_width,
- gint new_height,
- gint offx,
- gint offy);
- gboolean gimp_image_resize_to_layers (gint32 image_ID);
- gboolean gimp_image_scale (gint32 image_ID,
- gint new_width,
- gint new_height);
- GIMP_DEPRECATED_FOR(gimp_image_scale)
- gboolean gimp_image_scale_full (gint32 image_ID,
- gint new_width,
- gint new_height,
- GimpInterpolationType interpolation);
- gboolean gimp_image_crop (gint32 image_ID,
- gint new_width,
- gint new_height,
- gint offx,
- gint offy);
- gboolean gimp_image_flip (gint32 image_ID,
- GimpOrientationType flip_type);
- gboolean gimp_image_rotate (gint32 image_ID,
- GimpRotationType rotate_type);
- gint* gimp_image_get_layers (gint32 image_ID,
- gint *num_layers);
- gint* gimp_image_get_channels (gint32 image_ID,
- gint *num_channels);
- gint* gimp_image_get_vectors (gint32 image_ID,
- gint *num_vectors);
- gint32 gimp_image_get_active_drawable (gint32 image_ID);
- gboolean gimp_image_unset_active_channel (gint32 image_ID);
- gint32 gimp_image_get_floating_sel (gint32 image_ID);
- gint32 gimp_image_floating_sel_attached_to (gint32 image_ID);
- gboolean gimp_image_pick_color (gint32 image_ID,
- gint32 drawable_ID,
- gdouble x,
- gdouble y,
- gboolean sample_merged,
- gboolean sample_average,
- gdouble average_radius,
- GimpRGB *color);
- gint32 gimp_image_pick_correlate_layer (gint32 image_ID,
- gint x,
- gint y);
+ gboolean gimp_image_free_shadow (gint32 image_ID);
+ gint* gimp_image_get_layers (gint32 image_ID,
+ gint *num_layers);
+ gint* gimp_image_get_channels (gint32 image_ID,
+ gint *num_channels);
+ gint* gimp_image_get_vectors (gint32 image_ID,
+ gint *num_vectors);
+ gint32 gimp_image_get_active_drawable (gint32 image_ID);
+ gboolean gimp_image_unset_active_channel (gint32 image_ID);
+ gint32 gimp_image_get_floating_sel (gint32 image_ID);
+ gint32 gimp_image_floating_sel_attached_to (gint32 image_ID);
+ gboolean gimp_image_pick_color (gint32 image_ID,
+ gint32 drawable_ID,
+ gdouble x,
+ gdouble y,
+ gboolean sample_merged,
+ gboolean sample_average,
+ gdouble average_radius,
+ GimpRGB *color);
+ gint32 gimp_image_pick_correlate_layer (gint32 image_ID,
+ gint x,
+ gint y);
GIMP_DEPRECATED_FOR(gimp_image_insert_layer)
- gboolean gimp_image_add_layer (gint32 image_ID,
- gint32 layer_ID,
- gint position);
- gboolean gimp_image_insert_layer (gint32 image_ID,
- gint32 layer_ID,
- gint32 parent_ID,
- gint position);
- gboolean gimp_image_remove_layer (gint32 image_ID,
- gint32 layer_ID);
+ gboolean gimp_image_add_layer (gint32 image_ID,
+ gint32 layer_ID,
+ gint position);
+ gboolean gimp_image_insert_layer (gint32 image_ID,
+ gint32 layer_ID,
+ gint32 parent_ID,
+ gint position);
+ gboolean gimp_image_remove_layer (gint32 image_ID,
+ gint32 layer_ID);
GIMP_DEPRECATED_FOR(gimp_image_insert_channel)
- gboolean gimp_image_add_channel (gint32 image_ID,
- gint32 channel_ID,
- gint position);
- gboolean gimp_image_insert_channel (gint32 image_ID,
- gint32 channel_ID,
- gint32 parent_ID,
- gint position);
- gboolean gimp_image_remove_channel (gint32 image_ID,
- gint32 channel_ID);
+ gboolean gimp_image_add_channel (gint32 image_ID,
+ gint32 channel_ID,
+ gint position);
+ gboolean gimp_image_insert_channel (gint32 image_ID,
+ gint32 channel_ID,
+ gint32 parent_ID,
+ gint position);
+ gboolean gimp_image_remove_channel (gint32 image_ID,
+ gint32 channel_ID);
GIMP_DEPRECATED_FOR(gimp_image_insert_vectors)
- gboolean gimp_image_add_vectors (gint32 image_ID,
- gint32 vectors_ID,
- gint position);
- gboolean gimp_image_insert_vectors (gint32 image_ID,
- gint32 vectors_ID,
- gint32 parent_ID,
- gint position);
- gboolean gimp_image_remove_vectors (gint32 image_ID,
- gint32 vectors_ID);
- gint gimp_image_get_item_position (gint32 image_ID,
- gint32 item_ID);
- gboolean gimp_image_raise_item (gint32 image_ID,
- gint32 item_ID);
- gboolean gimp_image_lower_item (gint32 image_ID,
- gint32 item_ID);
- gboolean gimp_image_raise_item_to_top (gint32 image_ID,
- gint32 item_ID);
- gboolean gimp_image_lower_item_to_bottom (gint32 image_ID,
- gint32 item_ID);
- gboolean gimp_image_reorder_item (gint32 image_ID,
- gint32 item_ID,
- gint32 parent_ID,
- gint position);
- gint32 gimp_image_flatten (gint32 image_ID);
- gint32 gimp_image_merge_visible_layers (gint32 image_ID,
- GimpMergeType merge_type);
- gint32 gimp_image_merge_down (gint32 image_ID,
- gint32 merge_layer_ID,
- GimpMergeType merge_type);
- G_GNUC_INTERNAL guint8* _gimp_image_get_colormap (gint32 image_ID,
- gint *num_bytes);
- G_GNUC_INTERNAL gboolean _gimp_image_set_colormap (gint32 image_ID,
- gint num_bytes,
- const guint8 *colormap);
- G_GNUC_INTERNAL gboolean _gimp_image_set_attributes (gint32 image_ID,
- const gchar *attributes_string);
- G_GNUC_INTERNAL gchar* _gimp_image_get_attributes (gint32 image_ID);
- gboolean gimp_image_clean_all (gint32 image_ID);
- gboolean gimp_image_is_dirty (gint32 image_ID);
- G_GNUC_INTERNAL gboolean _gimp_image_thumbnail (gint32 image_ID,
- gint width,
- gint height,
- gint *actual_width,
- gint *actual_height,
- gint *bpp,
- gint *thumbnail_data_count,
- guint8 **thumbnail_data);
- gint32 gimp_image_get_active_layer (gint32 image_ID);
- gboolean gimp_image_set_active_layer (gint32 image_ID,
- gint32 active_layer_ID);
- gint32 gimp_image_get_active_channel (gint32 image_ID);
- gboolean gimp_image_set_active_channel (gint32 image_ID,
- gint32 active_channel_ID);
- gint32 gimp_image_get_active_vectors (gint32 image_ID);
- gboolean gimp_image_set_active_vectors (gint32 image_ID,
- gint32 active_vectors_ID);
- gint32 gimp_image_get_selection (gint32 image_ID);
- gboolean gimp_image_get_component_active (gint32 image_ID,
- GimpChannelType component);
- gboolean gimp_image_set_component_active (gint32 image_ID,
- GimpChannelType component,
- gboolean active);
- gboolean gimp_image_get_component_visible (gint32 image_ID,
- GimpChannelType component);
- gboolean gimp_image_set_component_visible (gint32 image_ID,
- GimpChannelType component,
- gboolean visible);
- gchar* gimp_image_get_filename (gint32 image_ID);
- gboolean gimp_image_set_filename (gint32 image_ID,
- const gchar *filename);
- gchar* gimp_image_get_uri (gint32 image_ID);
- gchar* gimp_image_get_xcf_uri (gint32 image_ID);
- gchar* gimp_image_get_imported_uri (gint32 image_ID);
- gchar* gimp_image_get_exported_uri (gint32 image_ID);
- gchar* gimp_image_get_name (gint32 image_ID);
- gboolean gimp_image_get_resolution (gint32 image_ID,
- gdouble *xresolution,
- gdouble *yresolution);
- gboolean gimp_image_set_resolution (gint32 image_ID,
- gdouble xresolution,
- gdouble yresolution);
- GimpUnit gimp_image_get_unit (gint32 image_ID);
- gboolean gimp_image_set_unit (gint32 image_ID,
- GimpUnit unit);
- gint gimp_image_get_tattoo_state (gint32 image_ID);
- gboolean gimp_image_set_tattoo_state (gint32 image_ID,
- gint tattoo_state);
- gint32 gimp_image_get_layer_by_tattoo (gint32 image_ID,
- gint tattoo);
- gint32 gimp_image_get_channel_by_tattoo (gint32 image_ID,
- gint tattoo);
- gint32 gimp_image_get_vectors_by_tattoo (gint32 image_ID,
- gint tattoo);
- gint32 gimp_image_get_layer_by_name (gint32 image_ID,
- const gchar *name);
- gint32 gimp_image_get_channel_by_name (gint32 image_ID,
- const gchar *name);
- gint32 gimp_image_get_vectors_by_name (gint32 image_ID,
- const gchar *name);
- gboolean gimp_image_attach_parasite (gint32 image_ID,
- const GimpParasite *parasite);
- gboolean gimp_image_detach_parasite (gint32 image_ID,
- const gchar *name);
- GimpParasite* gimp_image_get_parasite (gint32 image_ID,
- const gchar *name);
- gchar** gimp_image_get_parasite_list (gint32 image_ID,
- gint *num_parasites);
+ gboolean gimp_image_add_vectors (gint32 image_ID,
+ gint32 vectors_ID,
+ gint position);
+ gboolean gimp_image_insert_vectors (gint32 image_ID,
+ gint32 vectors_ID,
+ gint32 parent_ID,
+ gint position);
+ gboolean gimp_image_remove_vectors (gint32 image_ID,
+ gint32 vectors_ID);
+ gint gimp_image_get_item_position (gint32 image_ID,
+ gint32 item_ID);
+ gboolean gimp_image_raise_item (gint32 image_ID,
+ gint32 item_ID);
+ gboolean gimp_image_lower_item (gint32 image_ID,
+ gint32 item_ID);
+ gboolean gimp_image_raise_item_to_top (gint32 image_ID,
+ gint32 item_ID);
+ gboolean gimp_image_lower_item_to_bottom (gint32 image_ID,
+ gint32 item_ID);
+ gboolean gimp_image_reorder_item (gint32 image_ID,
+ gint32 item_ID,
+ gint32 parent_ID,
+ gint position);
+ gint32 gimp_image_flatten (gint32 image_ID);
+ gint32 gimp_image_merge_visible_layers (gint32 image_ID,
+ GimpMergeType merge_type);
+ gint32 gimp_image_merge_down (gint32 image_ID,
+ gint32 merge_layer_ID,
+ GimpMergeType merge_type);
+ G_GNUC_INTERNAL guint8* _gimp_image_get_colormap (gint32 image_ID,
+ gint *num_bytes);
+ G_GNUC_INTERNAL gboolean _gimp_image_set_colormap (gint32 image_ID,
+ gint num_bytes,
+ const guint8 *colormap);
-G_GNUC_INTERNAL gchar* _gimp_image_get_metadata (gint32 image_ID);
-G_GNUC_INTERNAL gboolean _gimp_image_set_metadata (gint32 image_ID,
- const gchar *metadata_string);
++G_GNUC_INTERNAL gboolean _gimp_image_set_attributes (gint32 image_ID,
++ const gchar *attributes_string);
++G_GNUC_INTERNAL gchar* _gimp_image_get_attributes (gint32 image_ID);
+ gboolean gimp_image_clean_all (gint32 image_ID);
+ gboolean gimp_image_is_dirty (gint32 image_ID);
+ G_GNUC_INTERNAL gboolean _gimp_image_thumbnail (gint32 image_ID,
+ gint width,
+ gint height,
+ gint *actual_width,
+ gint *actual_height,
+ gint *bpp,
+ gint *thumbnail_data_count,
+ guint8 **thumbnail_data);
+ gint32 gimp_image_get_active_layer (gint32 image_ID);
+ gboolean gimp_image_set_active_layer (gint32 image_ID,
+ gint32 active_layer_ID);
+ gint32 gimp_image_get_active_channel (gint32 image_ID);
+ gboolean gimp_image_set_active_channel (gint32 image_ID,
+ gint32 active_channel_ID);
+ gint32 gimp_image_get_active_vectors (gint32 image_ID);
+ gboolean gimp_image_set_active_vectors (gint32 image_ID,
+ gint32 active_vectors_ID);
+ gint32 gimp_image_get_selection (gint32 image_ID);
+ gboolean gimp_image_get_component_active (gint32 image_ID,
+ GimpChannelType component);
+ gboolean gimp_image_set_component_active (gint32 image_ID,
+ GimpChannelType component,
+ gboolean active);
+ gboolean gimp_image_get_component_visible (gint32 image_ID,
+ GimpChannelType component);
+ gboolean gimp_image_set_component_visible (gint32 image_ID,
+ GimpChannelType component,
+ gboolean visible);
+ gchar* gimp_image_get_filename (gint32 image_ID);
+ gboolean gimp_image_set_filename (gint32 image_ID,
+ const gchar *filename);
+ gchar* gimp_image_get_uri (gint32 image_ID);
+ gchar* gimp_image_get_xcf_uri (gint32 image_ID);
+ gchar* gimp_image_get_imported_uri (gint32 image_ID);
+ gchar* gimp_image_get_exported_uri (gint32 image_ID);
+ gchar* gimp_image_get_name (gint32 image_ID);
+ gboolean gimp_image_get_resolution (gint32 image_ID,
+ gdouble *xresolution,
+ gdouble *yresolution);
+ gboolean gimp_image_set_resolution (gint32 image_ID,
+ gdouble xresolution,
+ gdouble yresolution);
+ GimpUnit gimp_image_get_unit (gint32 image_ID);
+ gboolean gimp_image_set_unit (gint32 image_ID,
+ GimpUnit unit);
+ gint gimp_image_get_tattoo_state (gint32 image_ID);
+ gboolean gimp_image_set_tattoo_state (gint32 image_ID,
+ gint tattoo_state);
+ gint32 gimp_image_get_layer_by_tattoo (gint32 image_ID,
+ gint tattoo);
+ gint32 gimp_image_get_channel_by_tattoo (gint32 image_ID,
+ gint tattoo);
+ gint32 gimp_image_get_vectors_by_tattoo (gint32 image_ID,
+ gint tattoo);
+ gint32 gimp_image_get_layer_by_name (gint32 image_ID,
+ const gchar *name);
+ gint32 gimp_image_get_channel_by_name (gint32 image_ID,
+ const gchar *name);
+ gint32 gimp_image_get_vectors_by_name (gint32 image_ID,
+ const gchar *name);
+ gboolean gimp_image_attach_parasite (gint32 image_ID,
+ const GimpParasite *parasite);
+ gboolean gimp_image_detach_parasite (gint32 image_ID,
+ const gchar *name);
+ GimpParasite* gimp_image_get_parasite (gint32 image_ID,
+ const gchar *name);
+ gchar** gimp_image_get_parasite_list (gint32 image_ID,
+ gint *num_parasites);
G_END_DECLS
diff --cc libgimp/gimpmetadata.c
index 3e61fd1,2a49cfc..b022b1c
--- a/libgimp/gimpmetadata.c
+++ b/libgimp/gimpmetadata.c
@@@ -213,9 -195,9 +213,9 @@@ gimp_image_metadata_load_finish (gint3
*
* Returns: The image's metadata, prepared for saving.
*
- * Since: GIMP 2.10
+ * Since: 2.10
*/
-GimpMetadata *
+GimpAttributes *
gimp_image_metadata_save_prepare (gint32 image_ID,
const gchar *mime_type,
GimpMetadataSaveFlags *suggested_flags)
diff --cc libgimpbase/gimpmetadata.c
index fab2842,131de6e..b05a4dc
--- a/libgimpbase/gimpmetadata.c
+++ b/libgimpbase/gimpmetadata.c
@@@ -171,6 -173,35 +171,38 @@@ gimp_metadata_new (void
return metadata;
}
++<<<<<<< HEAD
++=======
+ /**
+ * gimp_metadata_duplicate:
+ * @metadata: The object to duplicate, or %NULL.
+ *
+ * Duplicates a #GimpMetadata instance.
+ *
+ * Return value: The new #GimpMetadata, or %NULL if @metadata is %NULL.
+ *
+ * Since: 2.10
+ */
+ GimpMetadata *
+ gimp_metadata_duplicate (GimpMetadata *metadata)
+ {
+ GimpMetadata *new_metadata = NULL;
+
+ g_return_val_if_fail (metadata == NULL || GEXIV2_IS_METADATA (metadata), NULL);
+
+ if (metadata)
+ {
+ gchar *xml;
+
+ xml = gimp_metadata_serialize (metadata);
+ new_metadata = gimp_metadata_deserialize (xml);
+ g_free (xml);
+ }
+
+ return new_metadata;
+ }
+
++>>>>>>> remotes/origin/master
typedef struct
{
gchar name[1024];
@@@ -178,6 -209,290 +210,293 @@@
GimpMetadata *metadata;
} GimpMetadataParseData;
++<<<<<<< HEAD
++=======
+ static const gchar*
+ gimp_metadata_attribute_name_to_value (const gchar **attribute_names,
+ const gchar **attribute_values,
+ const gchar *name)
+ {
+ while (*attribute_names)
+ {
+ if (! strcmp (*attribute_names, name))
+ {
+ return *attribute_values;
+ }
+
+ attribute_names++;
+ attribute_values++;
+ }
+
+ return NULL;
+ }
+
+ static void
+ gimp_metadata_deserialize_start_element (GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ GError **error)
+ {
+ GimpMetadataParseData *parse_data = user_data;
+
+ if (! strcmp (element_name, "tag"))
+ {
+ const gchar *name;
+ const gchar *encoding;
+
+ name = gimp_metadata_attribute_name_to_value (attribute_names,
+ attribute_values,
+ "name");
+ encoding = gimp_metadata_attribute_name_to_value (attribute_names,
+ attribute_values,
+ "encoding");
+
+ if (! name)
+ {
+ g_set_error (error, gimp_metadata_error_quark (), 1001,
+ "Element 'tag' does not contain required attribute 'name'.");
+ return;
+ }
+
+ strncpy (parse_data->name, name, sizeof (parse_data->name));
+ parse_data->name[sizeof (parse_data->name) - 1] = 0;
+
+ parse_data->base64 = (encoding && ! strcmp (encoding, "base64"));
+ }
+ }
+
+ static void
+ gimp_metadata_deserialize_end_element (GMarkupParseContext *context,
+ const gchar *element_name,
+ gpointer user_data,
+ GError **error)
+ {
+ }
+
+ static void
+ gimp_metadata_deserialize_text (GMarkupParseContext *context,
+ const gchar *text,
+ gsize text_len,
+ gpointer user_data,
+ GError **error)
+ {
+ GimpMetadataParseData *parse_data = user_data;
+ const gchar *current_element;
+
+ current_element = g_markup_parse_context_get_element (context);
+
+ if (! g_strcmp0 (current_element, "tag"))
+ {
+ gchar *value = g_strndup (text, text_len);
+
+ if (parse_data->base64)
+ {
+ guchar *decoded;
+ gsize len;
+
+ decoded = g_base64_decode (value, &len);
+
+ if (decoded[len - 1] == '\0')
+ gexiv2_metadata_set_tag_string (parse_data->metadata,
+ parse_data->name,
+ (const gchar *) decoded);
+
+ g_free (decoded);
+ }
+ else
+ {
+ gexiv2_metadata_set_tag_string (parse_data->metadata,
+ parse_data->name,
+ value);
+ }
+
+ g_free (value);
+ }
+ }
+
+ static void
+ gimp_metadata_deserialize_error (GMarkupParseContext *context,
+ GError *error,
+ gpointer user_data)
+ {
+ g_printerr ("Metadata parse error: %s\n", error->message);
+ }
+
+ /**
+ * gimp_metadata_deserialize:
+ * @metadata_xml: A string of serialized metadata XML.
+ *
+ * Deserializes a string of XML that has been created by
+ * gimp_metadata_serialize().
+ *
+ * Return value: The new #GimpMetadata.
+ *
+ * Since: 2.10
+ */
+ GimpMetadata *
+ gimp_metadata_deserialize (const gchar *metadata_xml)
+ {
+ GimpMetadata *metadata;
+ GMarkupParser markup_parser;
+ GimpMetadataParseData parse_data;
+ GMarkupParseContext *context;
+
+ g_return_val_if_fail (metadata_xml != NULL, NULL);
+
+ metadata = gimp_metadata_new ();
+
+ parse_data.metadata = metadata;
+
+ markup_parser.start_element = gimp_metadata_deserialize_start_element;
+ markup_parser.end_element = gimp_metadata_deserialize_end_element;
+ markup_parser.text = gimp_metadata_deserialize_text;
+ markup_parser.passthrough = NULL;
+ markup_parser.error = gimp_metadata_deserialize_error;
+
+ context = g_markup_parse_context_new (&markup_parser, 0, &parse_data, NULL);
+
+ g_markup_parse_context_parse (context,
+ metadata_xml, strlen (metadata_xml),
+ NULL);
+
+ g_markup_parse_context_unref (context);
+
+ return metadata;
+ }
+
+ static gchar *
+ gimp_metadata_escape (const gchar *name,
+ const gchar *value,
+ gboolean *base64)
+ {
+ if (! g_utf8_validate (value, -1, NULL))
+ {
+ gchar *encoded;
+
+ encoded = g_base64_encode ((const guchar *) value, strlen (value) + 1);
+
+ g_printerr ("Invalid UTF-8 in metadata value %s, encoding as base64: %s\n",
+ name, encoded);
+
+ *base64 = TRUE;
+
+ return encoded;
+ }
+
+ *base64 = FALSE;
+
+ return g_markup_escape_text (value, -1);
+ }
+
+ static void
+ gimp_metadata_append_tag (GString *string,
+ const gchar *name,
+ gchar *value,
+ gboolean base64)
+ {
+ if (value)
+ {
+ if (base64)
+ {
+ g_string_append_printf (string, " <tag name=\"%s\" encoding=\"base64\">%s</tag>\n",
+ name, value);
+ }
+ else
+ {
+ g_string_append_printf (string, " <tag name=\"%s\">%s</tag>\n",
+ name, value);
+ }
+
+ g_free (value);
+ }
+ }
+
+ /**
+ * gimp_metadata_serialize:
+ * @metadata: A #GimpMetadata instance.
+ *
+ * Serializes @metadata into an XML string that can later be deserialized
+ * using gimp_metadata_deserialize().
+ *
+ * Return value: The serialized XML string.
+ *
+ * Since: 2.10
+ */
+ gchar *
+ gimp_metadata_serialize (GimpMetadata *metadata)
+ {
+ GString *string;
+ gchar **exif_data = NULL;
+ gchar **iptc_data = NULL;
+ gchar **xmp_data = NULL;
+ gchar *value;
+ gchar *escaped;
+ gboolean base64;
+ gint i;
+
+ g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), NULL);
+
+ string = g_string_new (NULL);
+
+ g_string_append (string, "<?xml version='1.0' encoding='UTF-8'?>\n");
+ g_string_append (string, "<metadata>\n");
+
+ exif_data = gexiv2_metadata_get_exif_tags (metadata);
+
+ if (exif_data)
+ {
+ for (i = 0; exif_data[i] != NULL; i++)
+ {
+ value = gexiv2_metadata_get_tag_string (metadata, exif_data[i]);
+ escaped = gimp_metadata_escape (exif_data[i], value, &base64);
+ g_free (value);
+
+ gimp_metadata_append_tag (string, exif_data[i], escaped, base64);
+ }
+
+ g_strfreev (exif_data);
+ }
+
+ xmp_data = gexiv2_metadata_get_xmp_tags (metadata);
+
+ if (xmp_data)
+ {
+ for (i = 0; xmp_data[i] != NULL; i++)
+ {
+ value = gexiv2_metadata_get_tag_string (metadata, xmp_data[i]);
+ escaped = gimp_metadata_escape (xmp_data[i], value, &base64);
+ g_free (value);
+
+ gimp_metadata_append_tag (string, xmp_data[i], escaped, base64);
+ }
+
+ g_strfreev (xmp_data);
+ }
+
+ iptc_data = gexiv2_metadata_get_iptc_tags (metadata);
+
+ if (iptc_data)
+ {
+ for (i = 0; iptc_data[i] != NULL; i++)
+ {
+ value = gexiv2_metadata_get_tag_string (metadata, iptc_data[i]);
+ escaped = gimp_metadata_escape (iptc_data[i], value, &base64);
+ g_free (value);
+
+ gimp_metadata_append_tag (string, iptc_data[i], escaped, base64);
+ }
+
+ g_strfreev (iptc_data);
+ }
+
+ g_string_append (string, "</metadata>\n");
+
+ return g_string_free (string, FALSE);
+ }
+
++>>>>>>> remotes/origin/master
/**
* gimp_metadata_load_from_file:
* @file: The #GFile to load the metadata from
@@@ -404,6 -719,191 +723,194 @@@ gimp_metadata_set_from_xmp (GimpMetadat
}
/**
++<<<<<<< HEAD
++=======
+ * gimp_metadata_set_pixel_size:
+ * @metadata: A #GimpMetadata instance.
+ * @width: Width in pixels
+ * @height: Height in pixels
+ *
+ * Sets Exif.Image.ImageWidth and Exif.Image.ImageLength on @metadata.
+ *
+ * Since: 2.10
+ */
+ void
+ gimp_metadata_set_pixel_size (GimpMetadata *metadata,
+ gint width,
+ gint height)
+ {
+ gchar buffer[32];
+
+ g_return_if_fail (GEXIV2_IS_METADATA (metadata));
+
+ g_snprintf (buffer, sizeof (buffer), "%d", width);
+ gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ImageWidth", buffer);
+
+ g_snprintf (buffer, sizeof (buffer), "%d", height);
+ gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ImageLength", buffer);
+ }
+
+ /**
+ * gimp_metadata_set_bits_per_sample:
+ * @metadata: A #GimpMetadata instance.
+ * @bits_per_sample: Bits per pixel, per component
+ *
+ * Sets Exif.Image.BitsPerSample on @metadata.
+ *
+ * Since: 2.10
+ */
+ void
+ gimp_metadata_set_bits_per_sample (GimpMetadata *metadata,
+ gint bits_per_sample)
+ {
+ gchar buffer[32];
+
+ g_return_if_fail (GEXIV2_IS_METADATA (metadata));
+
+ g_snprintf (buffer, sizeof (buffer), "%d %d %d",
+ bits_per_sample, bits_per_sample, bits_per_sample);
+ gexiv2_metadata_set_tag_string (metadata, "Exif.Image.BitsPerSample", buffer);
+ }
+
+ /**
+ * gimp_metadata_get_resolution:
+ * @metadata: A #GimpMetadata instance.
+ * @xres: Return location for the X Resolution, in ppi
+ * @yres: Return location for the Y Resolution, in ppi
+ * @unit: Return location for the unit unit
+ *
+ * Returns values based on Exif.Image.XResolution,
+ * Exif.Image.YResolution and Exif.Image.ResolutionUnit of @metadata.
+ *
+ * Return value: %TRUE on success, %FALSE otherwise.
+ *
+ * Since: 2.10
+ */
+ gboolean
+ gimp_metadata_get_resolution (GimpMetadata *metadata,
+ gdouble *xres,
+ gdouble *yres,
+ GimpUnit *unit)
+ {
+ gint xnom, xdenom;
+ gint ynom, ydenom;
+
+ g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), FALSE);
+
+ if (gexiv2_metadata_get_exif_tag_rational (metadata,
+ "Exif.Image.XResolution",
+ &xnom, &xdenom) &&
+ gexiv2_metadata_get_exif_tag_rational (metadata,
+ "Exif.Image.YResolution",
+ &ynom, &ydenom))
+ {
+ gchar *un;
+ gint exif_unit = 2;
+
+ un = gexiv2_metadata_get_tag_string (metadata,
+ "Exif.Image.ResolutionUnit");
+ if (un)
+ {
+ exif_unit = atoi (un);
+ g_free (un);
+ }
+
+ if (xnom != 0 && xdenom != 0 &&
+ ynom != 0 && ydenom != 0)
+ {
+ gdouble xresolution = (gdouble) xnom / (gdouble) xdenom;
+ gdouble yresolution = (gdouble) ynom / (gdouble) ydenom;
+
+ if (exif_unit == 3)
+ {
+ xresolution *= 2.54;
+ yresolution *= 2.54;
+ }
+
+ if (xresolution >= GIMP_MIN_RESOLUTION &&
+ xresolution <= GIMP_MAX_RESOLUTION &&
+ yresolution >= GIMP_MIN_RESOLUTION &&
+ yresolution <= GIMP_MAX_RESOLUTION)
+ {
+ if (xres)
+ *xres = xresolution;
+
+ if (yres)
+ *yres = yresolution;
+
+ if (unit)
+ {
+ if (exif_unit == 3)
+ *unit = GIMP_UNIT_MM;
+ else
+ *unit = GIMP_UNIT_INCH;
+ }
+
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+ }
+
+ /**
+ * gimp_metadata_set_resolution:
+ * @metadata: A #GimpMetadata instance.
+ * @xres: The image's X Resolution, in ppi
+ * @yres: The image's Y Resolution, in ppi
+ * @unit: The image's unit
+ *
+ * Sets Exif.Image.XResolution, Exif.Image.YResolution and
+ * Exif.Image.ResolutionUnit @metadata.
+ *
+ * Since: 2.10
+ */
+ void
+ gimp_metadata_set_resolution (GimpMetadata *metadata,
+ gdouble xres,
+ gdouble yres,
+ GimpUnit unit)
+ {
+ gchar buffer[32];
+ gint exif_unit;
+ gint factor;
+
+ g_return_if_fail (GEXIV2_IS_METADATA (metadata));
+
+ if (gimp_unit_is_metric (unit))
+ {
+ xres /= 2.54;
+ yres /= 2.54;
+
+ exif_unit = 3;
+ }
+ else
+ {
+ exif_unit = 2;
+ }
+
+ for (factor = 1; factor <= 100 /* arbitrary */; factor++)
+ {
+ if (fabs (xres * factor - ROUND (xres * factor)) < 0.01 &&
+ fabs (yres * factor - ROUND (yres * factor)) < 0.01)
+ break;
+ }
+
+ gexiv2_metadata_set_exif_tag_rational (metadata,
+ "Exif.Image.XResolution",
+ ROUND (xres * factor), factor);
+
+ gexiv2_metadata_set_exif_tag_rational (metadata,
+ "Exif.Image.YResolution",
+ ROUND (yres * factor), factor);
+
+ g_snprintf (buffer, sizeof (buffer), "%d", exif_unit);
+ gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ResolutionUnit", buffer);
+ }
+
+ /**
++>>>>>>> remotes/origin/master
* gimp_metadata_is_tag_supported:
* @tag: A metadata tag name
* @mime_type: A mime type
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]