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