1 /* -*- Mode: C; c-basic-offset: 4 -*-
2  * Gimp-Python - allows the writing of Gimp plugins in Python.
3  * Copyright (C) 2005  Manish Singh <yosh@gimp.org>
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  */
18 
19 #ifdef HAVE_CONFIG_H
20 #  include <config.h>
21 #endif
22 
23 #include <Python.h>
24 
25 #include <glib-object.h>
26 
27 #include <pygobject.h>
28 
29 #include "pygimp-api.h"
30 #include "pygimp-util.h"
31 #include "libgimp/gimpui.h"
32 
33 static void
add_misc_enums(PyObject * m)34 add_misc_enums(PyObject *m)
35 {
36     PyModule_AddIntConstant(m, "PARASITE_PERSISTENT",
37                             GIMP_PARASITE_PERSISTENT);
38     PyModule_AddIntConstant(m, "PARASITE_UNDOABLE",
39                             GIMP_PARASITE_UNDOABLE);
40     PyModule_AddIntConstant(m, "PARASITE_ATTACH_PARENT",
41                             GIMP_PARASITE_ATTACH_PARENT);
42     PyModule_AddIntConstant(m, "PARASITE_PARENT_PERSISTENT",
43                             GIMP_PARASITE_PARENT_PERSISTENT);
44     PyModule_AddIntConstant(m, "PARASITE_PARENT_UNDOABLE",
45                             GIMP_PARASITE_PARENT_UNDOABLE);
46     PyModule_AddIntConstant(m, "PARASITE_ATTACH_GRANDPARENT",
47                             GIMP_PARASITE_ATTACH_GRANDPARENT);
48     PyModule_AddIntConstant(m, "PARASITE_GRANDPARENT_PERSISTENT",
49                             GIMP_PARASITE_GRANDPARENT_PERSISTENT);
50     PyModule_AddIntConstant(m, "PARASITE_GRANDPARENT_UNDOABLE",
51                             GIMP_PARASITE_GRANDPARENT_UNDOABLE);
52 
53     PyModule_AddIntConstant(m, "UNIT_PIXEL",
54                             GIMP_UNIT_PIXEL);
55     PyModule_AddIntConstant(m, "UNIT_INCH",
56                             GIMP_UNIT_INCH);
57     PyModule_AddIntConstant(m, "UNIT_MM",
58                             GIMP_UNIT_MM);
59     PyModule_AddIntConstant(m, "UNIT_POINT",
60                             GIMP_UNIT_POINT);
61     PyModule_AddIntConstant(m, "UNIT_PICA",
62                             GIMP_UNIT_PICA);
63 
64     PyModule_AddIntConstant(m, "MIN_IMAGE_SIZE",
65                             GIMP_MIN_IMAGE_SIZE);
66     PyModule_AddIntConstant(m, "MAX_IMAGE_SIZE",
67                             GIMP_MAX_IMAGE_SIZE);
68 
69     PyModule_AddObject(m, "MIN_RESOLUTION",
70                        PyFloat_FromDouble(GIMP_MIN_RESOLUTION));
71     PyModule_AddObject(m, "MAX_RESOLUTION",
72                        PyFloat_FromDouble(GIMP_MAX_RESOLUTION));
73 
74     PyModule_AddObject(m, "MAX_MEMSIZE",
75                        PyLong_FromUnsignedLongLong(GIMP_MAX_MEMSIZE));
76 
77     PyModule_AddIntConstant(m, "PIXEL_FETCHER_EDGE_NONE",
78                             GIMP_PIXEL_FETCHER_EDGE_NONE);
79     PyModule_AddIntConstant(m, "PIXEL_FETCHER_EDGE_WRAP",
80                             GIMP_PIXEL_FETCHER_EDGE_WRAP);
81     PyModule_AddIntConstant(m, "PIXEL_FETCHER_EDGE_SMEAR",
82                             GIMP_PIXEL_FETCHER_EDGE_SMEAR);
83     PyModule_AddIntConstant(m, "PIXEL_FETCHER_EDGE_BLACK",
84                             GIMP_PIXEL_FETCHER_EDGE_BLACK);
85     PyModule_AddIntConstant(m, "PIXEL_FETCHER_EDGE_BACKGROUND",
86                             GIMP_PIXEL_FETCHER_EDGE_BACKGROUND);
87 }
88 
89 static void
add_compat_enums(PyObject * m)90 add_compat_enums(PyObject *m)
91 {
92     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_RGB",
93                             GIMP_EXPORT_CAN_HANDLE_RGB);
94     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_GRAY",
95                             GIMP_EXPORT_CAN_HANDLE_GRAY);
96     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_INDEXED",
97                             GIMP_EXPORT_CAN_HANDLE_INDEXED);
98     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_BITMAP",
99                             GIMP_EXPORT_CAN_HANDLE_BITMAP);
100     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_ALPHA",
101                             GIMP_EXPORT_CAN_HANDLE_ALPHA);
102     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_LAYERS",
103                             GIMP_EXPORT_CAN_HANDLE_LAYERS);
104     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION",
105                             GIMP_EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION);
106     PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_LAYER_MASKS",
107                             GIMP_EXPORT_CAN_HANDLE_LAYER_MASKS);
108     PyModule_AddIntConstant(m, "EXPORT_NEEDS_ALPHA",
109                             GIMP_EXPORT_NEEDS_ALPHA);
110 
111     PyModule_AddIntConstant(m, "EXPORT_CANCEL",
112                             GIMP_EXPORT_CANCEL);
113     PyModule_AddIntConstant(m, "EXPORT_IGNORE",
114                             GIMP_EXPORT_IGNORE);
115     PyModule_AddIntConstant(m, "EXPORT_EXPORT",
116                             GIMP_EXPORT_EXPORT);
117 }
118 
119 static void
add_registered_enums(PyObject * m)120 add_registered_enums(PyObject *m)
121 {
122     gint          num_names, i;
123     const gchar **names;
124     GQuark        quark = g_quark_from_static_string ("gimp-compat-enum");
125 
126     names = gimp_enums_get_type_names (&num_names);
127 
128     pyg_enum_add_constants (m, GIMP_TYPE_CHECK_SIZE, "GIMP_");
129     pyg_enum_add_constants (m, GIMP_TYPE_CHECK_TYPE, "GIMP_");
130 
131     for (i = 0; i < num_names; i++)
132         {
133             GType enum_type = g_type_from_name (names[i]);
134 
135             pyg_enum_add_constants (m, enum_type, "GIMP_");
136 
137             enum_type = (GType) g_type_get_qdata (enum_type, quark);
138 
139             if (enum_type)
140                 pyg_enum_add_constants (m, enum_type, "GIMP_");
141         }
142 }
143 
144 
145 /* Initialization function for the module (*must* be called initgimpenums) */
146 
147 static char gimpenums_doc[] =
148 "This module provides interfaces to allow you to write gimp plug-ins"
149 ;
150 
151 void init_gimpenums(void);
152 
153 PyMODINIT_FUNC
init_gimpenums(void)154 init_gimpenums(void)
155 {
156     PyObject *m;
157 
158     pygimp_init_pygobject();
159 
160     init_pygimp();
161 
162     gimp_enums_init();
163 
164     /* Create the module and add the functions */
165     m = Py_InitModule3("_gimpenums", NULL, gimpenums_doc);
166 
167     add_misc_enums(m);
168     add_compat_enums(m);
169     add_registered_enums(m);
170 
171     /* Check for errors */
172     if (PyErr_Occurred())
173         Py_FatalError("can't initialize module _gimpenums");
174 }
175