1
2typedef GType (* GimpGetTypeFunc) (void);
3
4static const GimpGetTypeFunc get_type_funcs[] =
5{
6  gegl_distance_metric_get_type,
7  gimp_add_mask_type_get_type,
8  gimp_blend_mode_get_type,
9  gimp_brush_application_mode_get_type,
10  gimp_brush_generated_shape_get_type,
11  gimp_bucket_fill_mode_get_type,
12  gimp_cap_style_get_type,
13  gimp_channel_ops_get_type,
14  gimp_channel_type_get_type,
15  gimp_clone_type_get_type,
16  gimp_color_management_mode_get_type,
17  gimp_color_rendering_intent_get_type,
18  gimp_color_tag_get_type,
19  gimp_component_type_get_type,
20  gimp_convert_dither_type_get_type,
21  gimp_convert_palette_type_get_type,
22  gimp_convolve_type_get_type,
23  gimp_desaturate_mode_get_type,
24  gimp_dodge_burn_type_get_type,
25  gimp_fill_type_get_type,
26  gimp_foreground_extract_mode_get_type,
27  gimp_gradient_blend_color_space_get_type,
28  gimp_gradient_segment_color_get_type,
29  gimp_gradient_segment_type_get_type,
30  gimp_gradient_type_get_type,
31  gimp_grid_style_get_type,
32  gimp_histogram_channel_get_type,
33  gimp_hue_range_get_type,
34  gimp_icon_type_get_type,
35  gimp_image_base_type_get_type,
36  gimp_image_type_get_type,
37  gimp_ink_blob_type_get_type,
38  gimp_interpolation_type_get_type,
39  gimp_join_style_get_type,
40  gimp_layer_color_space_get_type,
41  gimp_layer_composite_mode_get_type,
42  gimp_layer_mode_get_type,
43  gimp_mask_apply_mode_get_type,
44  gimp_merge_type_get_type,
45  gimp_message_handler_type_get_type,
46  gimp_offset_type_get_type,
47  gimp_orientation_type_get_type,
48  gimp_pdb_arg_type_get_type,
49  gimp_pdb_error_handler_get_type,
50  gimp_pdb_proc_type_get_type,
51  gimp_pdb_status_type_get_type,
52  gimp_paint_application_mode_get_type,
53  gimp_precision_get_type,
54  gimp_progress_command_get_type,
55  gimp_repeat_mode_get_type,
56  gimp_rotation_type_get_type,
57  gimp_run_mode_get_type,
58  gimp_select_criterion_get_type,
59  gimp_size_type_get_type,
60  gimp_stack_trace_mode_get_type,
61  gimp_stroke_method_get_type,
62  gimp_text_direction_get_type,
63  gimp_text_hint_style_get_type,
64  gimp_text_justification_get_type,
65  gimp_transfer_mode_get_type,
66  gimp_transform_direction_get_type,
67  gimp_transform_resize_get_type,
68  gimp_user_directory_get_type,
69  gimp_vectors_stroke_type_get_type
70};
71
72static const gchar * const type_names[] =
73{
74  "GeglDistanceMetric",
75  "GimpAddMaskType",
76  "GimpBlendMode",
77  "GimpBrushApplicationMode",
78  "GimpBrushGeneratedShape",
79  "GimpBucketFillMode",
80  "GimpCapStyle",
81  "GimpChannelOps",
82  "GimpChannelType",
83  "GimpCloneType",
84  "GimpColorManagementMode",
85  "GimpColorRenderingIntent",
86  "GimpColorTag",
87  "GimpComponentType",
88  "GimpConvertDitherType",
89  "GimpConvertPaletteType",
90  "GimpConvolveType",
91  "GimpDesaturateMode",
92  "GimpDodgeBurnType",
93  "GimpFillType",
94  "GimpForegroundExtractMode",
95  "GimpGradientBlendColorSpace",
96  "GimpGradientSegmentColor",
97  "GimpGradientSegmentType",
98  "GimpGradientType",
99  "GimpGridStyle",
100  "GimpHistogramChannel",
101  "GimpHueRange",
102  "GimpIconType",
103  "GimpImageBaseType",
104  "GimpImageType",
105  "GimpInkBlobType",
106  "GimpInterpolationType",
107  "GimpJoinStyle",
108  "GimpLayerColorSpace",
109  "GimpLayerCompositeMode",
110  "GimpLayerMode",
111  "GimpMaskApplyMode",
112  "GimpMergeType",
113  "GimpMessageHandlerType",
114  "GimpOffsetType",
115  "GimpOrientationType",
116  "GimpPDBArgType",
117  "GimpPDBErrorHandler",
118  "GimpPDBProcType",
119  "GimpPDBStatusType",
120  "GimpPaintApplicationMode",
121  "GimpPrecision",
122  "GimpProgressCommand",
123  "GimpRepeatMode",
124  "GimpRotationType",
125  "GimpRunMode",
126  "GimpSelectCriterion",
127  "GimpSizeType",
128  "GimpStackTraceMode",
129  "GimpStrokeMethod",
130  "GimpTextDirection",
131  "GimpTextHintStyle",
132  "GimpTextJustification",
133  "GimpTransferMode",
134  "GimpTransformDirection",
135  "GimpTransformResize",
136  "GimpUserDirectory",
137  "GimpVectorsStrokeType"
138};
139
140static gboolean enums_initialized = FALSE;
141
142GType gimp_convert_dither_type_compat_get_type (void);
143GType gimp_layer_mode_effects_get_type         (void);
144
145/**
146 * gimp_enums_init:
147 *
148 * This function makes sure all the enum types are registered
149 * with the #GType system. This is intended for use by language
150 * bindings that need the symbols early, before gimp_main is run.
151 * It's not necessary for plug-ins to call this directly, because
152 * the normal plug-in initialization code will handle it implicitly.
153 *
154 * Since: 2.4
155 **/
156void
157gimp_enums_init (void)
158{
159  const GimpGetTypeFunc *funcs = get_type_funcs;
160  GQuark                 quark;
161  gint                   i;
162
163  if (enums_initialized)
164    return;
165
166  for (i = 0; i < G_N_ELEMENTS (get_type_funcs); i++, funcs++)
167    {
168      GType type = (*funcs) ();
169
170      g_type_class_ref (type);
171    }
172
173  /*  keep compat enum code in sync with app/app.c (app_libs_init)  */
174  quark = g_quark_from_static_string ("gimp-compat-enum");
175
176  g_type_set_qdata (GIMP_TYPE_CONVERT_DITHER_TYPE, quark,
177		    (gpointer) gimp_convert_dither_type_compat_get_type ());
178  g_type_set_qdata (GIMP_TYPE_LAYER_MODE, quark,
179		    (gpointer) gimp_layer_mode_effects_get_type ());
180
181  gimp_base_compat_enums_init ();
182
183  enums_initialized = TRUE;
184}
185
186/**
187 * gimp_enums_get_type_names:
188 * @n_type_names: return location for the number of names
189 *
190 * This function gives access to the list of enums registered by libgimp.
191 * The returned array is static and must not be modified.
192 *
193 * Return value: an array with type names
194 *
195 * Since: 2.2
196 **/
197const gchar **
198gimp_enums_get_type_names (gint *n_type_names)
199{
200  g_return_val_if_fail (n_type_names != NULL, NULL);
201
202  *n_type_names = G_N_ELEMENTS (type_names);
203
204  return (const gchar **) type_names;
205}
206