1 /* This file is part of GEGL
2 *
3 * GEGL is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public
5 * License as published by the Free Software Foundation; either
6 * version 3 of the License, or (at your option) any later version.
7 *
8 * GEGL is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with GEGL; if not, see <https://www.gnu.org/licenses/>.
15 *
16 * Copyright 2020 Brian Stafford
17 */
18
19 #include "gegl-metadata.h"
20
G_DEFINE_INTERFACE(GeglMetadata,gegl_metadata,G_TYPE_OBJECT)21 G_DEFINE_INTERFACE (GeglMetadata, gegl_metadata, G_TYPE_OBJECT)
22
23 static void
24 gegl_metadata_default_init (G_GNUC_UNUSED GeglMetadataInterface *iface)
25 {
26 }
27
28 void
gegl_metadata_register_map(GeglMetadata * metadata,const gchar * file_module,guint flags,const GeglMetadataMap * map,gsize n_map)29 gegl_metadata_register_map (GeglMetadata *metadata, const gchar *file_module,
30 guint flags, const GeglMetadataMap *map, gsize n_map)
31 {
32 GeglMetadataInterface *iface;
33
34 g_return_if_fail (GEGL_IS_METADATA (metadata));
35
36 iface = GEGL_METADATA_GET_IFACE (metadata);
37 g_return_if_fail (iface->register_map != NULL);
38 return (*iface->register_map) (metadata, file_module, flags, map, n_map);
39 }
40
41 void
gegl_metadata_unregister_map(GeglMetadata * metadata)42 gegl_metadata_unregister_map (GeglMetadata *metadata)
43 {
44 GeglMetadataInterface *iface;
45
46 g_return_if_fail (GEGL_IS_METADATA (metadata));
47
48 iface = GEGL_METADATA_GET_IFACE (metadata);
49 g_return_if_fail (iface->register_map != NULL);
50 return (*iface->register_map) (metadata, NULL, 0, NULL, 0);
51 }
52
53 gboolean
gegl_metadata_set_resolution(GeglMetadata * metadata,GeglResolutionUnit unit,gfloat x,gfloat y)54 gegl_metadata_set_resolution (GeglMetadata *metadata, GeglResolutionUnit unit,
55 gfloat x, gfloat y)
56 {
57 GeglMetadataInterface *iface;
58
59 g_return_val_if_fail (GEGL_IS_METADATA (metadata), FALSE);
60
61 iface = GEGL_METADATA_GET_IFACE (metadata);
62 g_return_val_if_fail (iface->set_resolution != NULL, FALSE);
63 return (*iface->set_resolution) (metadata, unit, x, y);
64 }
65
66 gboolean
gegl_metadata_get_resolution(GeglMetadata * metadata,GeglResolutionUnit * unit,gfloat * x,gfloat * y)67 gegl_metadata_get_resolution (GeglMetadata *metadata, GeglResolutionUnit *unit,
68 gfloat *x, gfloat *y)
69 {
70 GeglMetadataInterface *iface;
71
72 g_return_val_if_fail (GEGL_IS_METADATA (metadata), FALSE);
73
74 iface = GEGL_METADATA_GET_IFACE (metadata);
75 g_return_val_if_fail (iface->get_resolution != NULL, FALSE);
76 return (*iface->get_resolution) (metadata, unit, x, y);
77 }
78
79 gboolean
gegl_metadata_iter_lookup(GeglMetadata * metadata,GeglMetadataIter * iter,const gchar * key)80 gegl_metadata_iter_lookup (GeglMetadata *metadata, GeglMetadataIter *iter,
81 const gchar *key)
82 {
83 GeglMetadataInterface *iface;
84
85 g_return_val_if_fail (GEGL_IS_METADATA (metadata), FALSE);
86
87 iface = GEGL_METADATA_GET_IFACE (metadata);
88 g_return_val_if_fail (iface->iter_lookup != NULL, FALSE);
89 return (*iface->iter_lookup) (metadata, iter, key);
90 }
91
92 void
gegl_metadata_iter_init(GeglMetadata * metadata,GeglMetadataIter * iter)93 gegl_metadata_iter_init (GeglMetadata *metadata, GeglMetadataIter *iter)
94 {
95 GeglMetadataInterface *iface;
96
97 g_return_if_fail (GEGL_IS_METADATA (metadata));
98
99 iface = GEGL_METADATA_GET_IFACE (metadata);
100 g_return_if_fail (iface->iter_init != NULL);
101 (*iface->iter_init) (metadata, iter);
102 }
103
104 const gchar *
gegl_metadata_iter_next(GeglMetadata * metadata,GeglMetadataIter * iter)105 gegl_metadata_iter_next (GeglMetadata *metadata, GeglMetadataIter *iter)
106 {
107 GeglMetadataInterface *iface;
108
109 g_return_val_if_fail (GEGL_IS_METADATA (metadata), FALSE);
110
111 iface = GEGL_METADATA_GET_IFACE (metadata);
112 g_return_val_if_fail (iface->iter_next != NULL, FALSE);
113 return (*iface->iter_next) (metadata, iter);
114 }
115
116 gboolean
gegl_metadata_iter_set_value(GeglMetadata * metadata,GeglMetadataIter * iter,const GValue * value)117 gegl_metadata_iter_set_value (GeglMetadata *metadata, GeglMetadataIter *iter,
118 const GValue *value)
119 {
120 GeglMetadataInterface *iface;
121
122 g_return_val_if_fail (GEGL_IS_METADATA (metadata), FALSE);
123
124 iface = GEGL_METADATA_GET_IFACE (metadata);
125 g_return_val_if_fail (iface->iter_set_value != NULL, FALSE);
126 return (*iface->iter_set_value) (metadata, iter, value);
127 }
128
129 gboolean
gegl_metadata_iter_get_value(GeglMetadata * metadata,GeglMetadataIter * iter,GValue * value)130 gegl_metadata_iter_get_value (GeglMetadata *metadata, GeglMetadataIter *iter,
131 GValue *value)
132 {
133 GeglMetadataInterface *iface;
134
135 g_return_val_if_fail (GEGL_IS_METADATA (metadata), FALSE);
136
137 iface = GEGL_METADATA_GET_IFACE (metadata);
138 g_return_val_if_fail (iface->iter_get_value != NULL, FALSE);
139 return (*iface->iter_get_value) (metadata, iter, value);
140 }
141