
with proper value names. Mark most values as _BROKEN because they use weird alpha compositing that has to die. Move GimpLayerModeEffects to libgimpbase, deprecate it, and set it as compat enum for GimpLayerMode. Add the GimpLayerModeEffects values as compat constants to script-fu and pygimp.
2076 lines
59 KiB
Plaintext
2076 lines
59 KiB
Plaintext
headers
|
|
#include <Python.h>
|
|
|
|
#define NO_IMPORT_PYGOBJECT
|
|
#include <pygobject.h>
|
|
|
|
#include <pycairo.h>
|
|
extern Pycairo_CAPI_t *Pycairo_CAPI;
|
|
|
|
#define GIMP_DISABLE_DEPRECATION_WARNINGS
|
|
#include <libgimp/gimp.h>
|
|
#undef GIMP_DISABLE_DEPRECATED
|
|
#include <libgimp/gimpui.h>
|
|
#define GIMP_DISABLE_DEPRECATED
|
|
|
|
#define NO_IMPORT_PYGIMP
|
|
#include "pygimp-api.h"
|
|
|
|
#define NO_IMPORT_PYGIMPCOLOR
|
|
#include "pygimpcolor-api.h"
|
|
|
|
typedef struct {
|
|
PyObject *constraint;
|
|
PyObject *user_data;
|
|
} PyGimpConstraintData;
|
|
|
|
typedef struct {
|
|
PyObject *sensitivity_func;
|
|
PyObject *user_data;
|
|
} PyGimpIntSensitivityData;
|
|
|
|
/* TODO: Add a header for these */
|
|
void gimpui_register_classes(PyObject *d);
|
|
void gimpui_add_constants(PyObject *module, const gchar *strip_prefix);
|
|
|
|
static void
|
|
pygimp_decref_callback(PyObject* obj) {
|
|
Py_XDECREF (obj);
|
|
}
|
|
|
|
%%
|
|
modulename gimpui
|
|
%%
|
|
import gobject.GObject as PyGObject_Type
|
|
import gtk.gdk.Pixbuf as PyGdkPixbuf_Type
|
|
import gtk.Object as PyGtkObject_Type
|
|
import gtk.Widget as PyGtkWidget_Type
|
|
import gtk.Dialog as PyGtkDialog_Type
|
|
import gtk.Window as PyGtkWindow_Type
|
|
import gtk.Label as PyGtkLabel_Type
|
|
import gtk.Button as PyGtkButton_Type
|
|
import gtk.ToggleButton as PyGtkToggleButton_Type
|
|
import gtk.RadioButton as PyGtkRadioButton_Type
|
|
import gtk.SpinButton as PyGtkSpinButton_Type
|
|
import gtk.Entry as PyGtkEntry_Type
|
|
import gtk.DrawingArea as PyGtkDrawingArea_Type
|
|
import gtk.Table as PyGtkTable_Type
|
|
import gtk.Frame as PyGtkFrame_Type
|
|
import gtk.HBox as PyGtkHBox_Type
|
|
import gtk.VBox as PyGtkVBox_Type
|
|
import gtk.HPaned as PyGtkHPaned_Type
|
|
import gtk.VPaned as PyGtkVPaned_Type
|
|
import gtk.Scale as PyGtkScale_Type
|
|
import gtk.ProgressBar as PyGtkProgressBar_Type
|
|
import gtk.OptionMenu as PyGtkOptionMenu_Type
|
|
import gtk.ComboBox as PyGtkComboBox_Type
|
|
import gtk.ListStore as PyGtkListStore_Type
|
|
import gtk.TreeModel as PyGtkTreeModel_Type
|
|
import gtk.CellRenderer as PyGtkCellRenderer_Type
|
|
import gtk.CellRendererToggle as PyGtkCellRendererToggle_Type
|
|
import gimp.Parasite as PyGimpParasite_Type
|
|
%%
|
|
ignore
|
|
gimp_dialog_add_buttons
|
|
gimp_int_combo_box_connect
|
|
gimp_color_profile_combo_box_new
|
|
gimp_enum_store_new_with_values
|
|
gimp_int_combo_box_new_array
|
|
%%
|
|
ignore-glob
|
|
*_get_type
|
|
*_valist
|
|
gimp_resolution_*
|
|
%%
|
|
ignore-type
|
|
GimpIntStoreColumns
|
|
%%
|
|
override gimp_drawable_combo_box_new kwargs
|
|
static gboolean
|
|
pygimp_drawable_constraint_marshal(gint32 image_id, gint32 drawable_id,
|
|
gpointer user_data)
|
|
{
|
|
PyObject *img, *drw, *ret;
|
|
gboolean res;
|
|
PyGimpConstraintData *data = user_data;
|
|
|
|
img = pygimp_image_new(image_id);
|
|
if (!img) {
|
|
PyErr_Print();
|
|
return FALSE;
|
|
}
|
|
|
|
drw = pygimp_drawable_new(NULL, drawable_id);
|
|
if (!drw) {
|
|
PyErr_Print();
|
|
Py_DECREF(img);
|
|
return FALSE;
|
|
}
|
|
|
|
if (data->user_data && data->user_data != Py_None)
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, drw,
|
|
data->user_data, NULL);
|
|
else
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, drw, NULL);
|
|
|
|
if (!ret) {
|
|
PyErr_Print();
|
|
res = FALSE;
|
|
} else {
|
|
res = PyObject_IsTrue(ret);
|
|
Py_DECREF(ret);
|
|
}
|
|
|
|
Py_DECREF(drw);
|
|
Py_DECREF(img);
|
|
|
|
return res;
|
|
}
|
|
|
|
static int
|
|
_wrap_gimp_drawable_combo_box_new(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *constraint = NULL, *user_data = NULL;
|
|
GimpDrawableConstraintFunc func = NULL;
|
|
PyGimpConstraintData *data = NULL;
|
|
|
|
static char *kwlist[] = { "constraint", "data", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"|OO:gimpui.DrawableComboBox.__init__",
|
|
kwlist,
|
|
&constraint, &user_data))
|
|
return -1;
|
|
|
|
if (constraint && constraint != Py_None) {
|
|
if (!PyCallable_Check(constraint)) {
|
|
PyErr_SetString(PyExc_TypeError, "first arg must be callable");
|
|
return -1;
|
|
}
|
|
|
|
data = g_new(PyGimpConstraintData, 1);
|
|
|
|
data->constraint = constraint;
|
|
Py_XINCREF(constraint);
|
|
|
|
data->user_data = user_data;
|
|
Py_XINCREF(user_data);
|
|
|
|
func = pygimp_drawable_constraint_marshal;
|
|
}
|
|
|
|
self->obj = (GObject *)gimp_drawable_combo_box_new(func, data);
|
|
|
|
Py_XDECREF(constraint);
|
|
Py_XDECREF(user_data);
|
|
g_free(data);
|
|
|
|
if (pyg_type_from_object((PyObject *)self) != GIMP_TYPE_DRAWABLE_COMBO_BOX) {
|
|
PyErr_SetString(PyExc_RuntimeError, "__gobject_init__ must be used "
|
|
"when subclassing gimpui.DrawableComboBox");
|
|
return -1;
|
|
}
|
|
|
|
pygobject_register_wrapper((PyObject *)self);
|
|
return 0;
|
|
}
|
|
%%
|
|
define GimpDrawableComboBox.set_active_drawable kwargs
|
|
static PyObject *
|
|
_wrap_gimp_drawable_combo_box_set_active_drawable(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyGimpDrawable *drw;
|
|
|
|
static char *kwlist[] = { "drawable", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!:GimpDrawableComboBox.set_active_drawable",
|
|
kwlist,
|
|
PyGimpDrawable_Type, &drw))
|
|
return NULL;
|
|
|
|
if (!gimp_int_combo_box_set_active(GIMP_INT_COMBO_BOX(self->obj), drw->ID)) {
|
|
PyErr_Format(pygimp_error,
|
|
"Drawable (ID %d) does not exist in GimpDrawableComboBox",
|
|
drw->ID);
|
|
return NULL;
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
define GimpDrawableComboBox.get_active_drawable noargs
|
|
static PyObject *
|
|
_wrap_gimp_drawable_combo_box_get_active_drawable(PyGObject *self)
|
|
{
|
|
int value;
|
|
|
|
if (gimp_int_combo_box_get_active(GIMP_INT_COMBO_BOX(self->obj), &value))
|
|
return pygimp_drawable_new(NULL, value);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_channel_combo_box_new kwargs
|
|
static gboolean
|
|
pygimp_channel_constraint_marshal(gint32 image_id, gint32 channel_id,
|
|
gpointer user_data)
|
|
{
|
|
PyObject *img, *chn, *ret;
|
|
gboolean res;
|
|
PyGimpConstraintData *data = user_data;
|
|
|
|
img = pygimp_image_new(image_id);
|
|
if (!img) {
|
|
PyErr_Print();
|
|
return FALSE;
|
|
}
|
|
|
|
chn = pygimp_channel_new(channel_id);
|
|
if (!chn) {
|
|
PyErr_Print();
|
|
Py_DECREF(img);
|
|
return FALSE;
|
|
}
|
|
|
|
if (data->user_data && data->user_data != Py_None)
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, chn,
|
|
data->user_data, NULL);
|
|
else
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, chn, NULL);
|
|
|
|
if (!ret) {
|
|
PyErr_Print();
|
|
res = FALSE;
|
|
} else {
|
|
res = PyObject_IsTrue(ret);
|
|
Py_DECREF(ret);
|
|
}
|
|
|
|
Py_DECREF(chn);
|
|
Py_DECREF(img);
|
|
|
|
return res;
|
|
}
|
|
|
|
static int
|
|
_wrap_gimp_channel_combo_box_new(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *constraint = NULL, *user_data = NULL;
|
|
GimpDrawableConstraintFunc func = NULL;
|
|
PyGimpConstraintData *data = NULL;
|
|
|
|
static char *kwlist[] = { "constraint", "data", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"|OO:gimpui.ChannelComboBox.__init__",
|
|
kwlist,
|
|
&constraint, &user_data))
|
|
return -1;
|
|
|
|
if (constraint && constraint != Py_None) {
|
|
if (!PyCallable_Check(constraint)) {
|
|
PyErr_SetString(PyExc_TypeError, "first arg must be callable");
|
|
return -1;
|
|
}
|
|
|
|
data = g_new(PyGimpConstraintData, 1);
|
|
|
|
data->constraint = constraint;
|
|
Py_INCREF(constraint);
|
|
|
|
data->user_data = user_data;
|
|
Py_XINCREF(user_data);
|
|
|
|
func = pygimp_channel_constraint_marshal;
|
|
}
|
|
|
|
self->obj = (GObject *)gimp_channel_combo_box_new(func, data);
|
|
|
|
Py_XDECREF(constraint);
|
|
Py_XDECREF(user_data);
|
|
g_free(data);
|
|
|
|
if (pyg_type_from_object((PyObject *)self) != GIMP_TYPE_CHANNEL_COMBO_BOX) {
|
|
PyErr_SetString(PyExc_RuntimeError, "__gobject_init__ must be used "
|
|
"when subclassing gimpui.ChannelComboBox");
|
|
return -1;
|
|
}
|
|
|
|
pygobject_register_wrapper((PyObject *)self);
|
|
return 0;
|
|
}
|
|
%%
|
|
define GimpChannelComboBox.set_active_channel kwargs
|
|
static PyObject *
|
|
_wrap_gimp_channel_combo_box_set_active_channel(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyGimpChannel *chn;
|
|
|
|
static char *kwlist[] = { "channel", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!:GimpChannelComboBox.set_active_channel",
|
|
kwlist,
|
|
PyGimpChannel_Type, &chn))
|
|
return NULL;
|
|
|
|
if (!gimp_int_combo_box_set_active(GIMP_INT_COMBO_BOX(self->obj), chn->ID)) {
|
|
PyErr_Format(pygimp_error,
|
|
"Channel (ID %d) does not exist in GimpChannelComboBox",
|
|
chn->ID);
|
|
return NULL;
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
define GimpChannelComboBox.get_active_channel noargs
|
|
static PyObject *
|
|
_wrap_gimp_channel_combo_box_get_active_channel(PyGObject *self)
|
|
{
|
|
int value;
|
|
|
|
if (gimp_int_combo_box_get_active(GIMP_INT_COMBO_BOX(self->obj), &value))
|
|
return pygimp_channel_new(value);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_layer_combo_box_new kwargs
|
|
static gboolean
|
|
pygimp_layer_constraint_marshal(gint32 image_id, gint32 layer_id,
|
|
gpointer user_data)
|
|
{
|
|
PyObject *img, *lay, *ret;
|
|
gboolean res;
|
|
PyGimpConstraintData *data = user_data;
|
|
|
|
img = pygimp_image_new(image_id);
|
|
if (!img) {
|
|
PyErr_Print();
|
|
return FALSE;
|
|
}
|
|
|
|
lay = pygimp_layer_new(layer_id);
|
|
if (!lay) {
|
|
PyErr_Print();
|
|
Py_DECREF(img);
|
|
return FALSE;
|
|
}
|
|
|
|
if (data->user_data && data->user_data != Py_None)
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, lay,
|
|
data->user_data, NULL);
|
|
else
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, lay, NULL);
|
|
|
|
if (!ret) {
|
|
PyErr_Print();
|
|
res = FALSE;
|
|
} else {
|
|
res = PyObject_IsTrue(ret);
|
|
Py_DECREF(ret);
|
|
}
|
|
|
|
Py_DECREF(lay);
|
|
Py_DECREF(img);
|
|
|
|
return res;
|
|
}
|
|
|
|
static int
|
|
_wrap_gimp_layer_combo_box_new(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *constraint = NULL, *user_data = NULL;
|
|
GimpDrawableConstraintFunc func = NULL;
|
|
PyGimpConstraintData *data = NULL;
|
|
|
|
static char *kwlist[] = { "constraint", "data", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"|OO:gimpui.LayerComboBox.__init__",
|
|
kwlist,
|
|
&constraint, &user_data))
|
|
return -1;
|
|
|
|
if (constraint && constraint != Py_None) {
|
|
if (!PyCallable_Check(constraint)) {
|
|
PyErr_SetString(PyExc_TypeError, "first arg must be callable");
|
|
return -1;
|
|
}
|
|
|
|
data = g_new(PyGimpConstraintData, 1);
|
|
|
|
data->constraint = constraint;
|
|
Py_INCREF(constraint);
|
|
|
|
data->user_data = user_data;
|
|
Py_XINCREF(user_data);
|
|
|
|
func = pygimp_layer_constraint_marshal;
|
|
}
|
|
|
|
self->obj = (GObject *)gimp_layer_combo_box_new(func, data);
|
|
|
|
Py_XDECREF(constraint);
|
|
Py_XDECREF(user_data);
|
|
g_free(data);
|
|
|
|
if (pyg_type_from_object((PyObject *)self) != GIMP_TYPE_LAYER_COMBO_BOX) {
|
|
PyErr_SetString(PyExc_RuntimeError, "__gobject_init__ must be used "
|
|
"when subclassing gimpui.LayerComboBox");
|
|
return -1;
|
|
}
|
|
|
|
pygobject_register_wrapper((PyObject *)self);
|
|
return 0;
|
|
}
|
|
%%
|
|
define GimpLayerComboBox.set_active_layer kwargs
|
|
static PyObject *
|
|
_wrap_gimp_layer_combo_box_set_active_layer(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyGimpLayer *lay;
|
|
|
|
static char *kwlist[] = { "layer", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!:GimpLayerComboBox.set_active_layer",
|
|
kwlist,
|
|
PyGimpLayer_Type, &lay))
|
|
return NULL;
|
|
|
|
if (!gimp_int_combo_box_set_active(GIMP_INT_COMBO_BOX(self->obj), lay->ID)) {
|
|
PyErr_Format(pygimp_error,
|
|
"Layer (ID %d) does not exist in GimpLayerComboBox",
|
|
lay->ID);
|
|
return NULL;
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
define GimpLayerComboBox.get_active_layer noargs
|
|
static PyObject *
|
|
_wrap_gimp_layer_combo_box_get_active_layer(PyGObject *self)
|
|
{
|
|
int value;
|
|
|
|
if (gimp_int_combo_box_get_active(GIMP_INT_COMBO_BOX(self->obj), &value))
|
|
return pygimp_layer_new(value);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_vectors_combo_box_new kwargs
|
|
static gboolean
|
|
pygimp_vectors_constraint_marshal(gint32 image_id, gint32 vectors_id,
|
|
gpointer user_data)
|
|
{
|
|
PyObject *img, *vect, *ret;
|
|
gboolean res;
|
|
PyGimpConstraintData *data = user_data;
|
|
|
|
img = pygimp_image_new(image_id);
|
|
if (!img) {
|
|
PyErr_Print();
|
|
return FALSE;
|
|
}
|
|
|
|
vect = pygimp_vectors_new(vectors_id);
|
|
if (!vect) {
|
|
PyErr_Print();
|
|
Py_DECREF(img);
|
|
return FALSE;
|
|
}
|
|
|
|
if (data->user_data && data->user_data != Py_None)
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, vect,
|
|
data->user_data, NULL);
|
|
else
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, vect, NULL);
|
|
|
|
if (!ret) {
|
|
PyErr_Print();
|
|
res = FALSE;
|
|
} else {
|
|
res = PyObject_IsTrue(ret);
|
|
Py_DECREF(ret);
|
|
}
|
|
|
|
Py_DECREF(vect);
|
|
Py_DECREF(img);
|
|
|
|
return res;
|
|
}
|
|
|
|
static int
|
|
_wrap_gimp_vectors_combo_box_new(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *constraint = NULL, *user_data = NULL;
|
|
GimpVectorsConstraintFunc func = NULL;
|
|
PyGimpConstraintData *data = NULL;
|
|
|
|
static char *kwlist[] = { "constraint", "data", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"|OO:gimpui.VectorsComboBox.__init__",
|
|
kwlist,
|
|
&constraint, &user_data))
|
|
return -1;
|
|
|
|
if (constraint && constraint != Py_None) {
|
|
if (!PyCallable_Check(constraint)) {
|
|
PyErr_SetString(PyExc_TypeError, "first arg must be callable");
|
|
return -1;
|
|
}
|
|
|
|
data = g_new(PyGimpConstraintData, 1);
|
|
|
|
data->constraint = constraint;
|
|
Py_INCREF(constraint);
|
|
|
|
data->user_data = user_data;
|
|
Py_XINCREF(user_data);
|
|
|
|
func = pygimp_vectors_constraint_marshal;
|
|
}
|
|
|
|
self->obj = (GObject *)gimp_vectors_combo_box_new(func, data);
|
|
|
|
Py_XDECREF(constraint);
|
|
Py_XDECREF(user_data);
|
|
g_free(data);
|
|
|
|
if (pyg_type_from_object((PyObject *)self) != GIMP_TYPE_VECTORS_COMBO_BOX) {
|
|
PyErr_SetString(PyExc_RuntimeError, "__gobject_init__ must be used "
|
|
"when subclassing gimpui.VectorsComboBox");
|
|
return -1;
|
|
}
|
|
|
|
pygobject_register_wrapper((PyObject *)self);
|
|
return 0;
|
|
}
|
|
%%
|
|
define GimpVectorsComboBox.set_active_vectors kwargs
|
|
static PyObject *
|
|
_wrap_gimp_vectors_combo_box_set_active_vectors(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyGimpVectors *vect;
|
|
|
|
static char *kwlist[] = { "vectors", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!:GimpVectorsComboBox.set_active_vectors",
|
|
kwlist,
|
|
PyGimpVectors_Type, &vect))
|
|
return NULL;
|
|
|
|
if (!gimp_int_combo_box_set_active(GIMP_INT_COMBO_BOX(self->obj), vect->ID)) {
|
|
PyErr_Format(pygimp_error,
|
|
"Vectors (ID %d) does not exist in GimpVectorsComboBox",
|
|
vect->ID);
|
|
return NULL;
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
define GimpVectorsComboBox.get_active_vectors noargs
|
|
static PyObject *
|
|
_wrap_gimp_vectors_combo_box_get_active_vectors(PyGObject *self)
|
|
{
|
|
int value;
|
|
|
|
if (gimp_int_combo_box_get_active(GIMP_INT_COMBO_BOX(self->obj), &value))
|
|
return pygimp_vectors_new(value);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_image_combo_box_new kwargs
|
|
static gboolean
|
|
pygimp_image_constraint_marshal(gint32 image_id, gpointer user_data)
|
|
{
|
|
PyObject *img, *ret;
|
|
gboolean res;
|
|
PyGimpConstraintData *data = user_data;
|
|
|
|
img = pygimp_image_new(image_id);
|
|
if (!img) {
|
|
PyErr_Print();
|
|
return FALSE;
|
|
}
|
|
|
|
if (data->user_data && data->user_data != Py_None)
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img,
|
|
data->user_data, NULL);
|
|
else
|
|
ret = PyObject_CallFunctionObjArgs(data->constraint, img, NULL);
|
|
|
|
if (!ret) {
|
|
PyErr_Print();
|
|
res = FALSE;
|
|
} else {
|
|
res = PyObject_IsTrue(ret);
|
|
Py_DECREF(ret);
|
|
}
|
|
|
|
Py_DECREF(img);
|
|
|
|
return res;
|
|
}
|
|
|
|
static int
|
|
_wrap_gimp_image_combo_box_new(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *constraint = NULL, *user_data = NULL;
|
|
GimpImageConstraintFunc func = NULL;
|
|
PyGimpConstraintData *data = NULL;
|
|
|
|
static char *kwlist[] = { "constraint", "data", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"|OO:gimpui.ImageComboBox.__init__",
|
|
kwlist,
|
|
&constraint, &user_data))
|
|
return -1;
|
|
|
|
if (constraint && constraint != Py_None) {
|
|
if (!PyCallable_Check(constraint)) {
|
|
PyErr_SetString(PyExc_TypeError, "first arg must be callable");
|
|
return -1;
|
|
}
|
|
|
|
data = g_new(PyGimpConstraintData, 1);
|
|
|
|
data->constraint = constraint;
|
|
Py_INCREF(constraint);
|
|
|
|
data->user_data = user_data;
|
|
Py_XINCREF(user_data);
|
|
|
|
func = pygimp_image_constraint_marshal;
|
|
}
|
|
|
|
self->obj = (GObject *)gimp_image_combo_box_new(func, data);
|
|
|
|
Py_XDECREF(constraint);
|
|
Py_XDECREF(user_data);
|
|
g_free(data);
|
|
|
|
if (pyg_type_from_object((PyObject *)self) != GIMP_TYPE_IMAGE_COMBO_BOX) {
|
|
PyErr_SetString(PyExc_RuntimeError, "__gobject_init__ must be used "
|
|
"when subclassing gimpui.ImageComboBox");
|
|
return -1;
|
|
}
|
|
|
|
pygobject_register_wrapper((PyObject *)self);
|
|
return 0;
|
|
}
|
|
%%
|
|
define GimpImageComboBox.set_active_image kwargs
|
|
static PyObject *
|
|
_wrap_gimp_image_combo_box_set_active_image(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyGimpImage *img;
|
|
|
|
static char *kwlist[] = { "image", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!:GimpImageComboBox.set_active_image",
|
|
kwlist,
|
|
PyGimpImage_Type, &img))
|
|
return NULL;
|
|
|
|
if (!gimp_int_combo_box_set_active(GIMP_INT_COMBO_BOX(self->obj), img->ID)) {
|
|
PyErr_Format(pygimp_error,
|
|
"Image (ID %d) does not exist in GimpImageComboBox",
|
|
img->ID);
|
|
return NULL;
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
define GimpImageComboBox.get_active_image noargs
|
|
static PyObject *
|
|
_wrap_gimp_image_combo_box_get_active_image(PyGObject *self)
|
|
{
|
|
int value;
|
|
|
|
if (gimp_int_combo_box_get_active(GIMP_INT_COMBO_BOX(self->obj), &value))
|
|
return pygimp_image_new(value);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_dialog_new kwargs
|
|
static void
|
|
pygimp_help_func_marshal(const gchar *help_id, gpointer help_data)
|
|
{
|
|
GObject *dialog = help_data;
|
|
PyObject *py_dialog, *help_func, *ret;
|
|
|
|
py_dialog = g_object_get_data(dialog, "pygimp-dialog-pyobject");
|
|
help_func = g_object_get_data(dialog, "pygimp-dialog-help_func");
|
|
|
|
ret = PyObject_CallFunction(help_func, "sO", help_id, py_dialog);
|
|
|
|
if (ret)
|
|
Py_DECREF(ret);
|
|
else
|
|
PyErr_Print();
|
|
}
|
|
|
|
static void
|
|
pygimp_help_func_destroy(gpointer data)
|
|
{
|
|
PyObject *help_func = data;
|
|
|
|
Py_DECREF(help_func);
|
|
}
|
|
|
|
static void
|
|
pygimp_dialog_close(GtkWidget *widget)
|
|
{
|
|
/* Synthesize delete_event to close dialog. */
|
|
|
|
if (gtk_widget_get_window (widget)) {
|
|
GdkEvent *event = gdk_event_new(GDK_DELETE);
|
|
|
|
event->any.window = g_object_ref (gtk_widget_get_window (widget));
|
|
event->any.send_event = TRUE;
|
|
|
|
gtk_main_do_event(event);
|
|
gdk_event_free(event);
|
|
}
|
|
}
|
|
|
|
static int
|
|
_wrap_gimp_dialog_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
gchar *title, *role;
|
|
PyGObject *py_window = NULL;
|
|
PyObject *py_flags = NULL, *py_buttons = Py_None;
|
|
PyObject *help_func = NULL;
|
|
gchar *help_id = NULL;
|
|
GtkDialogFlags flags = 0;
|
|
int len, i;
|
|
GtkWidget *parent;
|
|
GimpHelpFunc func;
|
|
|
|
static char *kwlist[] = { "title", "role", "parent", "flags",
|
|
"help_func", "help_id", "buttons", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"zz|OOOzO:gimpui.GimpDialog.__init__",
|
|
kwlist,
|
|
&title, &role, &py_window, &py_flags,
|
|
&help_func, &help_id, &py_buttons))
|
|
return -1;
|
|
|
|
if (py_window == NULL || (PyObject*)py_window == Py_None)
|
|
parent = NULL;
|
|
else if (pygobject_check(py_window, &PyGtkWindow_Type))
|
|
parent = GTK_WIDGET(py_window->obj);
|
|
else {
|
|
PyErr_SetString(PyExc_TypeError, "parent must be a GtkWindow or None");
|
|
return -1;
|
|
}
|
|
|
|
if (pyg_flags_get_value(GTK_TYPE_DIALOG_FLAGS, py_flags, (gint *)&flags))
|
|
return -1;
|
|
|
|
if (py_buttons == Py_None)
|
|
len = 0;
|
|
else if (PyTuple_Check(py_buttons))
|
|
len = PyTuple_Size(py_buttons);
|
|
else {
|
|
PyErr_SetString(PyExc_TypeError, "buttons must be a tuple containing text/response pairs or None");
|
|
return -1;
|
|
}
|
|
|
|
if (len % 2) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"buttons tuple must contain text/response id pairs");
|
|
return -1;
|
|
}
|
|
|
|
if (help_func) {
|
|
if (help_func != Py_None) {
|
|
if (!PyCallable_Check(help_func)) {
|
|
PyErr_SetString(PyExc_TypeError, "help_func must be callable");
|
|
return -1;
|
|
}
|
|
|
|
func = pygimp_help_func_marshal;
|
|
|
|
} else {
|
|
func = gimp_standard_help_func;
|
|
}
|
|
} else {
|
|
func = gimp_standard_help_func;
|
|
}
|
|
|
|
pygobject_construct(self,
|
|
"title", title,
|
|
"role", role,
|
|
"modal", (flags & GTK_DIALOG_MODAL),
|
|
"help-func", func,
|
|
"help-id", help_id,
|
|
NULL);
|
|
|
|
if (!self->obj) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"could not create GimpDialog object");
|
|
return -1;
|
|
}
|
|
|
|
if (parent) {
|
|
if (GTK_IS_WINDOW(parent))
|
|
gtk_window_set_transient_for(GTK_WINDOW(self->obj),
|
|
GTK_WINDOW(parent));
|
|
else
|
|
gtk_window_set_screen(GTK_WINDOW(self->obj),
|
|
gtk_widget_get_screen(parent));
|
|
|
|
if (flags & GTK_DIALOG_DESTROY_WITH_PARENT)
|
|
g_signal_connect_object(parent, "destroy",
|
|
G_CALLBACK(pygimp_dialog_close),
|
|
self->obj, G_CONNECT_SWAPPED);
|
|
}
|
|
|
|
for (i = 0; i < len; i += 2) {
|
|
PyObject *text = PyTuple_GetItem(py_buttons, i);
|
|
PyObject *id = PyTuple_GetItem(py_buttons, i + 1);
|
|
if (!PyString_Check(text) && !PyUnicode_Check(text)) {
|
|
gtk_object_destroy(GTK_OBJECT(self->obj));
|
|
self->obj = NULL;
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"first member of each text/response id pair "
|
|
"must be a string");
|
|
return -1;
|
|
}
|
|
if (!PyInt_Check(id)) {
|
|
gtk_object_destroy(GTK_OBJECT(self->obj));
|
|
self->obj = NULL;
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"second member of each text/response id pair "
|
|
"must be a number");
|
|
return -1;
|
|
}
|
|
|
|
gimp_dialog_add_button(GIMP_DIALOG(self->obj), PyString_AsString(text),
|
|
PyInt_AsLong(id));
|
|
}
|
|
|
|
if (help_func && help_func != Py_None) {
|
|
g_object_set_data(self->obj, "pygimp-dialog-help-data", self);
|
|
|
|
Py_INCREF(help_func);
|
|
g_object_set_data_full(self->obj, "pygimp-dialog-help-func",
|
|
help_func, pygimp_help_func_destroy);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
%%
|
|
new-constructor GIMP_TYPE_DIALOG
|
|
%%
|
|
override gimp_color_button_get_color noargs
|
|
static PyObject *
|
|
_wrap_gimp_color_button_get_color(PyGObject *self)
|
|
{
|
|
GimpRGB rgb;
|
|
|
|
gimp_color_button_get_color(GIMP_COLOR_BUTTON(self->obj), &rgb);
|
|
|
|
return pygimp_rgb_new(&rgb);
|
|
}
|
|
%%
|
|
override gimp_brush_select_button_get_brush noargs
|
|
static PyObject *
|
|
_wrap_gimp_brush_select_button_get_brush(PyGObject *self)
|
|
{
|
|
const gchar *brush_name;
|
|
gdouble opacity;
|
|
gint spacing;
|
|
GimpLayerMode paint_mode;
|
|
|
|
brush_name =
|
|
gimp_brush_select_button_get_brush(GIMP_BRUSH_SELECT_BUTTON(self->obj),
|
|
&opacity, &spacing, &paint_mode);
|
|
|
|
return Py_BuildValue("(sdiN)", brush_name, opacity, spacing,
|
|
pyg_enum_from_gtype(GIMP_TYPE_LAYER_MODE,
|
|
paint_mode));
|
|
}
|
|
%%
|
|
override gimp_window_set_transient
|
|
static PyObject *
|
|
_wrap_gimp_window_set_transient(PyGObject *self)
|
|
{
|
|
gimp_window_set_transient(GTK_WINDOW(self->obj));
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_color_button_new kwargs
|
|
static int
|
|
_wrap_gimp_color_button_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
gchar *title = NULL;
|
|
gint width = -1, height = -1;
|
|
PyObject *py_color = NULL, *py_type = NULL;
|
|
GimpRGB *color, default_color = { 0.0, 0.0, 0.0, 100.0 };
|
|
GimpColorAreaType type;
|
|
|
|
static char *kwlist[] = { "title", "width", "height", "color", "type",
|
|
NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"|ziiOO:gimpui.ColorButton.__init__",
|
|
kwlist,
|
|
&title, &width, &height,
|
|
&py_color, &py_type))
|
|
return -1;
|
|
|
|
if (py_color == NULL || (PyObject*)py_color == Py_None)
|
|
color = &default_color;
|
|
else if (pyg_boxed_check(py_color, GIMP_TYPE_RGB))
|
|
color = pyg_boxed_get(py_color, GimpRGB);
|
|
else {
|
|
PyErr_SetString(PyExc_TypeError, "color should be a GimpRGB or None");
|
|
return -1;
|
|
}
|
|
|
|
if (py_type == NULL || (PyObject*)py_type == Py_None)
|
|
type = GIMP_COLOR_AREA_FLAT;
|
|
else if (pyg_enum_get_value(GIMP_TYPE_COLOR_AREA_TYPE, py_type,
|
|
(gint*)&type))
|
|
return -1;
|
|
|
|
if (pygobject_construct(self,
|
|
"title", title,
|
|
"type", type,
|
|
"color", color,
|
|
"area-width", width,
|
|
"area-height", height,
|
|
NULL))
|
|
return -1;
|
|
|
|
return 0;
|
|
}
|
|
%%
|
|
new-constructor GIMP_TYPE_COLOR_BUTTON
|
|
%%
|
|
override gimp_color_scale_new kwargs
|
|
static int
|
|
_wrap_gimp_color_scale_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
PyObject *py_orientation, *py_channel;
|
|
GtkOrientation orientation;
|
|
GimpColorSelectorChannel channel;
|
|
|
|
static char *kwlist[] = { "orientation", "channel", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"OO:gimpui.ColorScale.__init__",
|
|
kwlist,
|
|
&py_orientation, &py_channel))
|
|
return -1;
|
|
|
|
if (pyg_enum_get_value(GTK_TYPE_ORIENTATION, py_orientation,
|
|
(gint*)&orientation))
|
|
return -1;
|
|
|
|
if (pyg_enum_get_value(GIMP_TYPE_COLOR_SELECTOR_CHANNEL, py_channel,
|
|
(gint*)&channel))
|
|
return -1;
|
|
|
|
if (pygobject_construct(self,
|
|
"orientation", orientation,
|
|
"channel", channel,
|
|
NULL))
|
|
return -1;
|
|
|
|
gtk_range_set_flippable (GTK_RANGE (self->obj),
|
|
orientation == GTK_ORIENTATION_HORIZONTAL);
|
|
|
|
return 0;
|
|
}
|
|
%%
|
|
new-constructor GIMP_TYPE_COLOR_SCALE
|
|
%%
|
|
override gimp_enum_label_new kwargs
|
|
static int
|
|
_wrap_gimp_enum_label_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
PyObject *py_enum_type = NULL;
|
|
GType enum_type;
|
|
gint value;
|
|
|
|
static char *kwlist[] = { "enum_type", "value", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"Oi:gimpui.GimpEnumLabel.__init__",
|
|
kwlist,
|
|
&py_enum_type, &value))
|
|
return -1;
|
|
|
|
if ((enum_type = pyg_type_from_object(py_enum_type)) == 0)
|
|
return -1;
|
|
|
|
if (pygobject_construct(self,
|
|
"enum-type", enum_type,
|
|
"enum-value", value,
|
|
NULL))
|
|
return -1;
|
|
|
|
return 0;
|
|
}
|
|
%%
|
|
new-constructor GIMP_TYPE_ENUM_LABEL
|
|
%%
|
|
override gimp_int_combo_box_new kwargs
|
|
static int
|
|
_wrap_gimp_int_combo_box_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
PyObject *py_items = NULL;
|
|
int len, i;
|
|
|
|
static char *kwlist[] = { "items", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"|O:gimpui.IntComboBox.__init__",
|
|
kwlist,
|
|
&py_items))
|
|
return -1;
|
|
|
|
if (py_items == NULL || py_items == Py_None)
|
|
len = 0;
|
|
else if (PyTuple_Check(py_items))
|
|
len = PyTuple_Size(py_items);
|
|
else {
|
|
PyErr_SetString(PyExc_TypeError,
|
|
"items must be a tuple containing label/value pairs "
|
|
"or None");
|
|
return -1;
|
|
}
|
|
|
|
if (len % 2) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"items tuple must contain label/value pairs");
|
|
return -1;
|
|
}
|
|
|
|
if (pygobject_construct(self, NULL))
|
|
return -1;
|
|
|
|
for (i = 0; i < len; i += 2) {
|
|
PyObject *label = PyTuple_GetItem(py_items, i);
|
|
PyObject *value = PyTuple_GetItem(py_items, i + 1);
|
|
|
|
if (!PyString_Check(label)) {
|
|
gtk_object_destroy(GTK_OBJECT(self->obj));
|
|
self->obj = NULL;
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"first member of each label/value pair "
|
|
"must be a string");
|
|
return -1;
|
|
}
|
|
|
|
if (!PyInt_Check(value)) {
|
|
gtk_object_destroy(GTK_OBJECT(self->obj));
|
|
self->obj = NULL;
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"second member of each label/value pair "
|
|
"must be a number");
|
|
return -1;
|
|
}
|
|
|
|
gimp_int_combo_box_append(GIMP_INT_COMBO_BOX(self->obj),
|
|
GIMP_INT_STORE_LABEL,
|
|
PyString_AsString(label),
|
|
GIMP_INT_STORE_VALUE,
|
|
PyInt_AsLong(value),
|
|
-1);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
%%
|
|
new-constructor GIMP_TYPE_INT_COMBO_BOX
|
|
%%
|
|
override gimp_int_combo_box_set_sensitivity kwargs
|
|
static gboolean
|
|
pygimp_int_combo_box_sensitivity_marshal(gint value, gpointer user_data)
|
|
{
|
|
PyObject *py_value;
|
|
PyGimpIntSensitivityData *data;
|
|
PyObject *ret;
|
|
gboolean res;
|
|
|
|
data = user_data;
|
|
|
|
py_value = PyInt_FromLong(value);
|
|
|
|
ret = PyObject_CallFunctionObjArgs(data->sensitivity_func, py_value,
|
|
data->user_data, NULL);
|
|
|
|
if (!ret) {
|
|
PyErr_Print();
|
|
res = FALSE;
|
|
} else {
|
|
res = PyObject_IsTrue(ret);
|
|
Py_DECREF(ret);
|
|
}
|
|
|
|
Py_DECREF(py_value);
|
|
|
|
return res;
|
|
}
|
|
|
|
static void
|
|
pygimp_int_combo_box_sensitivity_data_destroy(gpointer user_data)
|
|
{
|
|
PyGimpIntSensitivityData *data;
|
|
data = user_data;
|
|
|
|
Py_DECREF(data->sensitivity_func);
|
|
Py_XDECREF(data->user_data);
|
|
|
|
g_free(data);
|
|
}
|
|
|
|
static PyObject *
|
|
_wrap_gimp_int_combo_box_set_sensitivity(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *py_sensitivity_func;
|
|
PyObject *py_user_data = NULL;
|
|
PyGimpIntSensitivityData *data;
|
|
|
|
static char *kwlist[] = { "sensitivity_func", "user_data", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O|O:GimpIntComboBox.set_sensitivity",
|
|
kwlist, &py_sensitivity_func,
|
|
&py_user_data))
|
|
return NULL;
|
|
|
|
if (!PyCallable_Check(py_sensitivity_func)) {
|
|
PyErr_SetString(PyExc_TypeError, "first argument must be callable.");
|
|
return NULL;
|
|
}
|
|
|
|
data = g_new(PyGimpIntSensitivityData, 1);
|
|
|
|
data->sensitivity_func = py_sensitivity_func;
|
|
Py_INCREF(data->sensitivity_func);
|
|
|
|
if (py_user_data == NULL || py_user_data == Py_None)
|
|
data->user_data = NULL;
|
|
else {
|
|
data->user_data = py_user_data;
|
|
Py_INCREF(data->user_data);
|
|
}
|
|
|
|
gimp_int_combo_box_set_sensitivity(GIMP_INT_COMBO_BOX(self->obj),
|
|
pygimp_int_combo_box_sensitivity_marshal,
|
|
data,
|
|
pygimp_int_combo_box_sensitivity_data_destroy);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_int_combo_box_get_active noargs
|
|
static PyObject *
|
|
_wrap_gimp_int_combo_box_get_active(PyGObject *self)
|
|
{
|
|
int value;
|
|
|
|
if (gimp_int_combo_box_get_active(GIMP_INT_COMBO_BOX(self->obj), &value))
|
|
return PyLong_FromLong(value);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_int_combo_box_set_active kwargs
|
|
static PyObject *
|
|
_wrap_gimp_int_combo_box_set_active(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
int value;
|
|
|
|
static char *kwlist[] = { "value", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"i:GimpIntComboBox.set_active", kwlist,
|
|
&value))
|
|
return NULL;
|
|
|
|
if (!gimp_int_combo_box_set_active(GIMP_INT_COMBO_BOX(self->obj), value)) {
|
|
PyErr_Format(pygimp_error,
|
|
"Value %d does not exist in GimpIntComboBox",
|
|
value);
|
|
return NULL;
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_int_combo_box_append kwargs
|
|
static PyObject *
|
|
_wrap_gimp_int_combo_box_append(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *py_items;
|
|
int i, len;
|
|
|
|
static char *kwlist[] = { "items", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O:gimpui.IntComboBox.append",
|
|
kwlist,
|
|
&py_items))
|
|
return NULL;
|
|
|
|
if (py_items == NULL || py_items == Py_None)
|
|
len = 0;
|
|
else if (PyTuple_Check(py_items))
|
|
len = PyTuple_Size(py_items);
|
|
else {
|
|
PyErr_SetString(PyExc_TypeError,
|
|
"items must be a tuple containing label/value pairs "
|
|
"or None");
|
|
return NULL;
|
|
}
|
|
|
|
if (len % 2) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"items tuple must contain label/value pairs");
|
|
return NULL;
|
|
}
|
|
|
|
for (i = 0; i < len; i += 2) {
|
|
PyObject *label = PyTuple_GetItem(py_items, i);
|
|
PyObject *value = PyTuple_GetItem(py_items, i + 1);
|
|
|
|
if (!PyString_Check(label)) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"first member of each label/value pair "
|
|
"must be a string");
|
|
return NULL;
|
|
}
|
|
|
|
if (!PyInt_Check(value)) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"second member of each label/value pair "
|
|
"must be a number");
|
|
return NULL;
|
|
}
|
|
|
|
gimp_int_combo_box_append(GIMP_INT_COMBO_BOX(self->obj),
|
|
GIMP_INT_STORE_LABEL,
|
|
PyString_AsString(label),
|
|
GIMP_INT_STORE_VALUE,
|
|
PyInt_AsLong(value),
|
|
-1);
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_int_combo_box_prepend kwargs
|
|
static PyObject *
|
|
_wrap_gimp_int_combo_box_prepend(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *py_items;
|
|
int i, len;
|
|
|
|
static char *kwlist[] = { "items", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O:gimpui.IntComboBox.prepend",
|
|
kwlist,
|
|
&py_items))
|
|
return NULL;
|
|
|
|
if (py_items == NULL || py_items == Py_None)
|
|
len = 0;
|
|
else if (PyTuple_Check(py_items))
|
|
len = PyTuple_Size(py_items);
|
|
else {
|
|
PyErr_SetString(PyExc_TypeError,
|
|
"items must be a tuple containing label/value pairs "
|
|
"or None");
|
|
return NULL;
|
|
}
|
|
|
|
if (len % 2) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"items tuple must contain label/value pairs");
|
|
return NULL;
|
|
}
|
|
|
|
for (i = 0; i < len; i += 2) {
|
|
PyObject *label = PyTuple_GetItem(py_items, i);
|
|
PyObject *value = PyTuple_GetItem(py_items, i + 1);
|
|
|
|
if (!PyString_Check(label)) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"first member of each label/value pair "
|
|
"must be a string");
|
|
return NULL;
|
|
}
|
|
|
|
if (!PyInt_Check(value)) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"second member of each label/value pair "
|
|
"must be a number");
|
|
return NULL;
|
|
}
|
|
|
|
gimp_int_combo_box_prepend(GIMP_INT_COMBO_BOX(self->obj),
|
|
GIMP_INT_STORE_LABEL,
|
|
PyString_AsString(label),
|
|
GIMP_INT_STORE_VALUE,
|
|
PyInt_AsLong(value),
|
|
-1);
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_browser_add_search_types args
|
|
static PyObject *
|
|
_wrap_gimp_browser_add_search_types(PyGObject *self, PyObject *args)
|
|
{
|
|
GimpBrowser *browser;
|
|
int len, i;
|
|
PyObject *element;
|
|
gchar *label;
|
|
gint id;
|
|
|
|
browser = GIMP_BROWSER(self->obj);
|
|
|
|
len = PyTuple_Size(args);
|
|
|
|
for (i = 0; i < len; ++i) {
|
|
element = PyTuple_GetItem(args, i);
|
|
if (!PyTuple_Check(element)) {
|
|
PyErr_SetString(PyExc_TypeError, "GimpBrowser.add_search_types: Arguments must be tuples");
|
|
return NULL;
|
|
}
|
|
if (!PyArg_ParseTuple(element, "si", &label, &id))
|
|
return NULL;
|
|
gimp_browser_add_search_types(browser, label, id, NULL);
|
|
}
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_proc_browser_dialog_new kwargs
|
|
static int
|
|
_wrap_gimp_proc_browser_dialog_new(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
gchar *title, *role;
|
|
PyObject *py_buttons = Py_None;
|
|
PyObject *help_func = NULL;
|
|
gchar *help_id = NULL;
|
|
int len, i;
|
|
GimpHelpFunc func;
|
|
|
|
static char *kwlist[] = { "title", "role", "help_func", "help_id",
|
|
"buttons", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"zz|OzO:gimpui.GimpProcBrowserDialog.__init__",
|
|
kwlist,
|
|
&title, &role, &help_func, &help_id,
|
|
&py_buttons))
|
|
return -1;
|
|
|
|
if (py_buttons == Py_None)
|
|
len = 0;
|
|
else if (PyTuple_Check(py_buttons))
|
|
len = PyTuple_Size(py_buttons);
|
|
else {
|
|
PyErr_SetString(PyExc_TypeError,
|
|
"buttons must be a tuple containing text/response "
|
|
"pairs or None");
|
|
return -1;
|
|
}
|
|
|
|
if (len % 2) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"buttons tuple must contain text/response id pairs");
|
|
return -1;
|
|
}
|
|
|
|
if (help_func) {
|
|
if (help_func != Py_None) {
|
|
if (!PyCallable_Check(help_func)) {
|
|
PyErr_SetString(PyExc_TypeError, "help_func must be callable");
|
|
return -1;
|
|
}
|
|
|
|
func = pygimp_help_func_marshal;
|
|
|
|
} else {
|
|
func = gimp_standard_help_func;
|
|
}
|
|
} else {
|
|
func = gimp_standard_help_func;
|
|
}
|
|
|
|
pygobject_construct(self,
|
|
"title", title,
|
|
"role", role,
|
|
"help-func", func,
|
|
"help-id", help_id,
|
|
NULL);
|
|
|
|
if (!self->obj) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"could not create GimpProcBrowserDialog object");
|
|
return -1;
|
|
}
|
|
|
|
for (i = 0; i < len; i += 2) {
|
|
PyObject *text = PyTuple_GetItem(py_buttons, i);
|
|
PyObject *id = PyTuple_GetItem(py_buttons, i + 1);
|
|
if (!PyString_Check(text) && !PyUnicode_Check(text)) {
|
|
gtk_object_destroy(GTK_OBJECT(self->obj));
|
|
self->obj = NULL;
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"first member of each text/response id pair "
|
|
"must be a string");
|
|
return -1;
|
|
}
|
|
if (!PyInt_Check(id)) {
|
|
gtk_object_destroy(GTK_OBJECT(self->obj));
|
|
self->obj = NULL;
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"second member of each text/response id pair "
|
|
"must be a number");
|
|
return -1;
|
|
}
|
|
|
|
gimp_dialog_add_button(GIMP_DIALOG(self->obj), PyString_AsString(text),
|
|
PyInt_AsLong(id));
|
|
}
|
|
|
|
if (help_func && help_func != Py_None) {
|
|
g_object_set_data(self->obj, "pygimp-dialog-help-data", self);
|
|
|
|
Py_INCREF(help_func);
|
|
g_object_set_data_full(self->obj, "pygimp-dialog-help-func",
|
|
help_func, pygimp_help_func_destroy);
|
|
}
|
|
|
|
g_signal_emit_by_name(GIMP_PROC_BROWSER_DIALOG(self->obj)->browser,
|
|
"search", "", 0, self->obj);
|
|
return 0;
|
|
}
|
|
%%
|
|
new-constructor GIMP_TYPE_PROC_BROWSER_DIALOG
|
|
%%
|
|
override gimp_number_pair_entry_get_values noargs
|
|
static PyObject *
|
|
_wrap_gimp_number_pair_entry_get_values(PyGObject *self)
|
|
{
|
|
gdouble left, right;
|
|
|
|
gimp_number_pair_entry_get_values(GIMP_NUMBER_PAIR_ENTRY(self->obj),
|
|
&left, &right);
|
|
|
|
return Py_BuildValue("(dd)", left, right);
|
|
}
|
|
%%
|
|
override gimp_number_pair_entry_get_default_values noargs
|
|
static PyObject *
|
|
_wrap_gimp_number_pair_entry_get_default_values(PyGObject *self)
|
|
{
|
|
gdouble left, right;
|
|
|
|
gimp_number_pair_entry_get_default_values(
|
|
GIMP_NUMBER_PAIR_ENTRY(self->obj),
|
|
&left, &right);
|
|
|
|
return Py_BuildValue("(dd)", left, right);
|
|
}
|
|
%%
|
|
override gimp_number_pair_entry_get_aspect noargs
|
|
static PyObject *
|
|
_wrap_gimp_number_pair_entry_get_aspect(PyGObject *self)
|
|
{
|
|
GimpAspectType aspect;
|
|
|
|
aspect =
|
|
gimp_number_pair_entry_get_aspect(GIMP_NUMBER_PAIR_ENTRY(self->obj));
|
|
|
|
return pyg_enum_from_gtype(GIMP_TYPE_ASPECT_TYPE, aspect);
|
|
}
|
|
%%
|
|
override gimp_number_pair_entry_set_aspect kwargs
|
|
static PyObject *
|
|
_wrap_gimp_number_pair_entry_set_aspect(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PyObject *py_aspect;
|
|
GimpAspectType aspect;
|
|
|
|
static char *kwlist[] = {"aspect", NULL};
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O:GimpNumberPairEntry.set_aspect",
|
|
kwlist, &py_aspect))
|
|
return NULL;
|
|
|
|
if (pyg_enum_get_value(GIMP_TYPE_ASPECT_TYPE, py_aspect, (gint*)&aspect))
|
|
{
|
|
Py_XDECREF(py_aspect);
|
|
return NULL;
|
|
}
|
|
|
|
gimp_number_pair_entry_set_aspect(GIMP_NUMBER_PAIR_ENTRY(self->obj),
|
|
aspect);
|
|
|
|
Py_DECREF(py_aspect);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_page_selector_get_selected_pages noargs
|
|
static PyObject *
|
|
_wrap_gimp_page_selector_get_selected_pages(PyGObject *self)
|
|
{
|
|
gint *selected_pages;
|
|
gint n_selected_pages;
|
|
PyObject *py_selected_pages;
|
|
int i;
|
|
|
|
selected_pages = gimp_page_selector_get_selected_pages(
|
|
GIMP_PAGE_SELECTOR (self->obj),
|
|
&n_selected_pages);
|
|
|
|
py_selected_pages = PyTuple_New(n_selected_pages);
|
|
for (i = 0; i < n_selected_pages; ++i)
|
|
PyTuple_SetItem(py_selected_pages, i,
|
|
PyInt_FromLong(selected_pages[i]));
|
|
|
|
g_free(selected_pages);
|
|
|
|
return py_selected_pages;
|
|
}
|
|
%%
|
|
override gimp_preview_get_position noargs
|
|
static PyObject *
|
|
_wrap_gimp_preview_get_position(PyGObject *self)
|
|
{
|
|
gint x;
|
|
gint y;
|
|
|
|
gimp_preview_get_position(GIMP_PREVIEW(self->obj), &x, &y);
|
|
|
|
return Py_BuildValue("(ii)", x, y);
|
|
}
|
|
%%
|
|
override gimp_preview_get_size noargs
|
|
static PyObject *
|
|
_wrap_gimp_preview_get_size(PyGObject *self)
|
|
{
|
|
gint width;
|
|
gint height;
|
|
|
|
gimp_preview_get_size(GIMP_PREVIEW(self->obj), &width, &height);
|
|
|
|
return Py_BuildValue("(ii)", width, height);
|
|
}
|
|
%%
|
|
override gimp_preview_transform kwargs
|
|
static PyObject *
|
|
_wrap_gimp_preview_transform(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
gint src_x;
|
|
gint src_y;
|
|
gint dest_x;
|
|
gint dest_y;
|
|
|
|
static char *kwlist[] = {"x", "y", NULL};
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:GimpPreview.transform",
|
|
kwlist, &src_x, &src_y))
|
|
return NULL;
|
|
|
|
gimp_preview_transform(GIMP_PREVIEW(self->obj), src_x, src_y, &dest_x,
|
|
&dest_y);
|
|
|
|
return Py_BuildValue("(ii)", dest_x, dest_y);
|
|
}
|
|
%%
|
|
override gimp_preview_untransform kwargs
|
|
static PyObject *
|
|
_wrap_gimp_preview_untransform(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
gint src_x;
|
|
gint src_y;
|
|
gint dest_x;
|
|
gint dest_y;
|
|
|
|
static char *kwlist[] = {"x", "y", NULL};
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"ii:GimpPreview.untransform",
|
|
kwlist, &src_x, &src_y))
|
|
return NULL;
|
|
|
|
gimp_preview_untransform(GIMP_PREVIEW(self->obj), src_x, src_y, &dest_x,
|
|
&dest_y);
|
|
|
|
return Py_BuildValue("(ii)", dest_x, dest_y);
|
|
}
|
|
%%
|
|
override gimp_zoom_model_get_fraction noargs
|
|
static PyObject *
|
|
_wrap_gimp_zoom_model_get_fraction(PyGObject *self)
|
|
{
|
|
gint numerator;
|
|
gint denominator;
|
|
|
|
gimp_zoom_model_get_fraction(GIMP_ZOOM_MODEL(self->obj), &numerator,
|
|
&denominator);
|
|
|
|
return Py_BuildValue("(ii)", numerator, denominator);
|
|
}
|
|
%%
|
|
override gimp_drawable_preview_get_drawable noargs
|
|
static PyObject *
|
|
_wrap_gimp_drawable_preview_get_drawable(PyGObject *self)
|
|
{
|
|
PyObject *drawable;
|
|
|
|
drawable = g_object_get_data(self->obj,
|
|
"pygimp-drawable-preview-pydrawable");
|
|
Py_INCREF(drawable);
|
|
return drawable;
|
|
}
|
|
%%
|
|
override gimp_zoom_preview_get_drawable noargs
|
|
static PyObject *
|
|
_wrap_gimp_zoom_preview_get_drawable(PyGObject *self)
|
|
{
|
|
PyObject *drawable;
|
|
|
|
drawable = g_object_get_data(self->obj,
|
|
"pygimp-zoom-preview-pydrawable");
|
|
Py_INCREF(drawable);
|
|
return drawable;
|
|
}
|
|
%%
|
|
override gimp_drawable_preview_draw_region kwargs
|
|
static PyObject *
|
|
_wrap_gimp_drawable_preview_draw_region(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
/* PyGimpPixelRgn *pypixelrgn;
|
|
|
|
static char *kwlist[] = {"drawable", NULL};
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!:GimpDrawablePreview.draw_region",
|
|
kwlist, PyGimpPixelRgn_Type, &pypixelrgn))
|
|
return NULL;
|
|
|
|
gimp_drawable_preview_draw_region(GIMP_DRAWABLE_PREVIEW(self->obj),
|
|
&pypixelrgn->pr);
|
|
*/
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_int_store_lookup_by_value
|
|
static PyObject *
|
|
_wrap_gimp_int_store_lookup_by_value(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "value", NULL };
|
|
int value, ret;
|
|
GtkTreeIter iter;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"i:GimpIntStore.gimp_int_store_lookup_by_value",
|
|
kwlist, &value))
|
|
return NULL;
|
|
|
|
ret = gimp_int_store_lookup_by_value(GTK_TREE_MODEL(self->obj), value,
|
|
&iter);
|
|
if (ret)
|
|
pyg_boxed_new(GTK_TYPE_TREE_ITER, &iter, TRUE, TRUE);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_memsize_entry_new
|
|
static int
|
|
_wrap_gimp_memsize_entry_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "value", "lower", "upper", NULL };
|
|
guint64 value, lower, upper;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"LLL:GimpMemsizeEntry.__init__",
|
|
kwlist, &value, &lower, &upper))
|
|
return -1;
|
|
|
|
self->obj = (GObject *)gimp_memsize_entry_new(value, lower, upper);
|
|
|
|
if (!self->obj) {
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
"could not create GimpMemsizeEntry object");
|
|
return -1;
|
|
}
|
|
pygobject_register_wrapper((PyObject *)self);
|
|
return 0;
|
|
}
|
|
%%
|
|
override gimp_memsize_entry_set_value
|
|
static PyObject *
|
|
_wrap_gimp_memsize_entry_set_value(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "value", NULL };
|
|
guint64 value;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"L:GimpMemsizeEntry.set_value",
|
|
kwlist, &value))
|
|
return NULL;
|
|
|
|
gimp_memsize_entry_set_value(GIMP_MEMSIZE_ENTRY(self->obj), value);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_color_area_get_color noargs
|
|
static PyObject *
|
|
_wrap_gimp_color_area_get_color(PyGObject *self)
|
|
{
|
|
GimpRGB rgb;
|
|
|
|
gimp_color_area_get_color(GIMP_COLOR_AREA(self->obj), &rgb);
|
|
|
|
return pygimp_rgb_new(&rgb);
|
|
}
|
|
%%
|
|
override gimp_color_hex_entry_get_color noargs
|
|
static PyObject *
|
|
_wrap_gimp_color_hex_entry_get_color(PyGObject *self)
|
|
{
|
|
GimpRGB rgb;
|
|
|
|
gimp_color_hex_entry_get_color(GIMP_COLOR_HEX_ENTRY(self->obj), &rgb);
|
|
|
|
return pygimp_rgb_new(&rgb);
|
|
}
|
|
%%
|
|
override gimp_color_notebook_get_color noargs
|
|
static PyObject *
|
|
_wrap_gimp_color_notebook_get_color(PyGObject *self)
|
|
{
|
|
GimpRGB rgb;
|
|
|
|
gimp_color_notebook_get_color(GIMP_COLOR_NOTEBOOK(self->obj), &rgb);
|
|
|
|
return pygimp_rgb_new(&rgb);
|
|
}
|
|
%%
|
|
override gimp_color_selection_get_color noargs
|
|
static PyObject *
|
|
_wrap_gimp_color_selection_get_color(PyGObject *self)
|
|
{
|
|
GimpRGB rgb;
|
|
|
|
gimp_color_selection_get_color(GIMP_COLOR_SELECTION(self->obj), &rgb);
|
|
|
|
return pygimp_rgb_new(&rgb);
|
|
}
|
|
%%
|
|
override gimp_color_selection_get_old_color noargs
|
|
static PyObject *
|
|
_wrap_gimp_color_selection_get_old_color(PyGObject *self)
|
|
{
|
|
GimpRGB rgb;
|
|
|
|
gimp_color_selection_get_old_color(GIMP_COLOR_SELECTION(self->obj), &rgb);
|
|
|
|
return pygimp_rgb_new(&rgb);
|
|
}
|
|
%%
|
|
override gimp_enum_store_new kwargs
|
|
static int
|
|
_wrap_gimp_enum_store_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "enum_type", "minimum", "maximum", NULL };
|
|
PyObject *py_enum_type = NULL;
|
|
PyObject *py_minimum = NULL;
|
|
PyObject *py_maximum = NULL;
|
|
GType enum_type;
|
|
GEnumClass *enum_class;
|
|
gint minimum, maximum;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O|O!O!:GimpEnumStore.__init__", kwlist,
|
|
&py_enum_type, &PyInt_Type, &py_minimum,
|
|
&PyInt_Type, &py_maximum))
|
|
return -1;
|
|
if ((enum_type = pyg_type_from_object(py_enum_type)) == 0)
|
|
return -1;
|
|
|
|
enum_class = g_type_class_ref(enum_type);
|
|
|
|
if (py_minimum == NULL)
|
|
minimum = enum_class->minimum;
|
|
else
|
|
minimum = PyInt_AsLong(py_minimum);
|
|
|
|
if (py_maximum == NULL)
|
|
maximum = enum_class->maximum;
|
|
else
|
|
maximum = PyInt_AsLong(py_maximum);
|
|
|
|
g_type_class_unref(enum_class);
|
|
|
|
self->obj = (GObject *)gimp_enum_store_new_with_range(enum_type, minimum, maximum);
|
|
|
|
if (!self->obj) {
|
|
PyErr_SetString(PyExc_RuntimeError, "could not create GimpEnumStore object");
|
|
return -1;
|
|
}
|
|
pygobject_register_wrapper((PyObject *)self);
|
|
return 0;
|
|
}
|
|
%%
|
|
override gimp_zoom_preview_new_with_model kwargs
|
|
static int
|
|
_wrap_gimp_zoom_preview_new_with_model(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "drawable", "model", NULL };
|
|
PyGimpDrawable *py_drawable;
|
|
PyGObject *py_zoom_model = NULL;
|
|
GimpZoomModel *zoom_model;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!|O!:GimpZoomPreview.__init__", kwlist,
|
|
PyGimpDrawable_Type, &py_drawable,
|
|
&PyGimpZoomModel_Type, &py_zoom_model))
|
|
return -1;
|
|
|
|
if (py_zoom_model)
|
|
zoom_model = (GimpZoomModel*)py_zoom_model->obj;
|
|
else
|
|
zoom_model = NULL;
|
|
|
|
if (!py_drawable->drawable)
|
|
py_drawable->drawable = gimp_drawable_get(py_drawable->ID);
|
|
|
|
if (pygobject_construct(self, "drawable", py_drawable->drawable, "model", zoom_model, NULL))
|
|
return -1;
|
|
|
|
g_object_set_data_full(self->obj, "pygimp-zoom-preview-pydrawable",
|
|
py_drawable,
|
|
(GDestroyNotify)pygimp_decref_callback);
|
|
|
|
Py_INCREF(py_drawable);
|
|
|
|
return 0;
|
|
}
|
|
%%
|
|
new-constructor GIMP_TYPE_ZOOM_PREVIEW
|
|
%%
|
|
override gimp_aspect_preview_new kwargs
|
|
static int
|
|
_wrap_gimp_aspect_preview_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "drawable", NULL };
|
|
PyGimpDrawable *py_drawable;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!|:GimpAspectPreview.__init__", kwlist,
|
|
PyGimpDrawable_Type, &py_drawable))
|
|
return -1;
|
|
|
|
if (!py_drawable->drawable)
|
|
py_drawable->drawable = gimp_drawable_get(py_drawable->ID);
|
|
|
|
if (pygobject_construct(self, "drawable", py_drawable->drawable, NULL))
|
|
return -1;
|
|
|
|
g_signal_connect_swapped(self->obj, "destroy",
|
|
(GCallback)pygimp_decref_callback, py_drawable);
|
|
Py_INCREF(py_drawable);
|
|
|
|
return 0;
|
|
}
|
|
%%
|
|
new-constructor GIMP_TYPE_ASPECT_PREVIEW
|
|
%%
|
|
override gimp_drawable_preview_new kwargs
|
|
static int
|
|
_wrap_gimp_drawable_preview_new(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "drawable", NULL };
|
|
PyGimpDrawable *py_drawable;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!|:GimpDrawablePreview.__init__", kwlist,
|
|
PyGimpDrawable_Type, &py_drawable))
|
|
return -1;
|
|
|
|
if (!py_drawable->drawable)
|
|
py_drawable->drawable = gimp_drawable_get(py_drawable->ID);
|
|
|
|
if (pygobject_construct(self, "drawable", py_drawable->drawable, NULL))
|
|
return -1;
|
|
|
|
g_object_set_data_full(self->obj, "pygimp-drawable-preview-pydrawable",
|
|
py_drawable,
|
|
(GDestroyNotify)pygimp_decref_callback);
|
|
|
|
Py_INCREF(py_drawable);
|
|
|
|
return 0;
|
|
}
|
|
|
|
%%
|
|
new-constructor GIMP_TYPE_DRAWABLE_PREVIEW
|
|
%%
|
|
override gimp_ruler_get_range noargs
|
|
static PyObject *
|
|
_wrap_gimp_ruler_get_range(PyGObject *self)
|
|
{
|
|
gdouble lower, upper, max_size;
|
|
|
|
gimp_ruler_get_range(GIMP_RULER(self->obj), &lower, &upper, &max_size);
|
|
|
|
return Py_BuildValue("(ddd)", lower, upper, max_size);
|
|
}
|
|
%%
|
|
override gimp_color_display_convert_surface kwargs
|
|
static PyObject *
|
|
_wrap_gimp_color_display_convert_surface(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PycairoSurface *pysurface;
|
|
|
|
static char *kwlist[] = { "surface", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!:GimpColorDisplay.convert_surface",
|
|
kwlist,
|
|
&PycairoSurface_Type, &pysurface))
|
|
return NULL;
|
|
|
|
gimp_color_display_convert_surface(GIMP_COLOR_DISPLAY(self->obj),
|
|
pysurface->surface);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_color_display_stack_convert_surface kwargs
|
|
static PyObject *
|
|
_wrap_gimp_color_display_stack_convert_surface(PyGObject *self, PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
PycairoSurface *pysurface;
|
|
|
|
static char *kwlist[] = { "surface", NULL };
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"O!:GimpColorDisplayStack.convert_surface",
|
|
kwlist,
|
|
&PycairoSurface_Type, &pysurface))
|
|
return NULL;
|
|
|
|
gimp_color_display_stack_convert_surface(GIMP_COLOR_DISPLAY_STACK(self->obj),
|
|
pysurface->surface);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override gimp_zoom_preview_get_source noargs
|
|
static PyObject *
|
|
_wrap_gimp_zoom_preview_get_source(PyGObject *self)
|
|
{
|
|
gint width, height, bpp;
|
|
guchar *image;
|
|
PyObject *pyimage;
|
|
|
|
image = gimp_zoom_preview_get_source(GIMP_ZOOM_PREVIEW(self->obj),
|
|
&width, &height, &bpp);
|
|
|
|
if (image)
|
|
{
|
|
pyimage = PyByteArray_FromStringAndSize((const char *)image,
|
|
width * height * bpp);
|
|
g_free (image);
|
|
}
|
|
else
|
|
{
|
|
Py_INCREF(Py_None);
|
|
pyimage = Py_None;
|
|
}
|
|
|
|
return Py_BuildValue("(Niii)", pyimage, width, height, bpp);
|
|
}
|
|
%%
|
|
override gimp_ui_init noargs
|
|
static PyObject *
|
|
_wrap_gimp_ui_init(PyObject *self)
|
|
{
|
|
extern const char *prog_name;
|
|
|
|
gimp_ui_init (prog_name, FALSE);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|