26 #include "../generic/python_utildefines.h"
59 PyObject *cb_func, *cb_args, *
result;
60 PyGILState_STATE gilstate;
64 cb_func = PyTuple_GET_ITEM((PyObject *)customdata, 1);
65 cb_args = PyTuple_GET_ITEM((PyObject *)customdata, 2);
66 result = PyObject_CallObject(cb_func, cb_args);
82 PyObject *dst = PyTuple_New(len_dst);
83 const int len_src = PyTuple_GET_SIZE(src);
85 for (
int i = 0; i < len_src; i++) {
86 PyObject *item = PyTuple_GET_ITEM(src, i);
87 PyTuple_SET_ITEM(dst, i, item);
95 PyObject *cb_func, *cb_args, *
result;
96 PyGILState_STATE gilstate;
100 cb_func = PyTuple_GET_ITEM((PyObject *)customdata, 1);
101 cb_args = PyTuple_GET_ITEM((PyObject *)customdata, 2);
103 const int cb_args_len = PyTuple_GET_SIZE(cb_args);
105 PyObject *cb_args_xy = PyTuple_New(2);
109 PyTuple_SET_ITEM(cb_args_with_xy, cb_args_len, cb_args_xy);
111 result = PyObject_CallObject(cb_func, cb_args_with_xy);
113 Py_DECREF(cb_args_with_xy);
127 PyObject *pyrna_callback_add(
BPy_StructRNA *
self, PyObject *args)
131 PyObject *cb_func, *cb_args;
132 char *cb_event_str =
NULL;
135 if (!PyArg_ParseTuple(args,
136 "OO!|s:bpy_struct.callback_add",
144 if (!PyCallable_Check(cb_func)) {
145 PyErr_SetString(PyExc_TypeError,
"callback_add(): first argument isn't callable");
166 PyErr_SetString(PyExc_TypeError,
"callback_add(): type does not support callbacks");
173 PyObject *pyrna_callback_remove(
BPy_StructRNA *
self, PyObject *args)
179 if (!PyArg_ParseTuple(args,
"O!:callback_remove", &PyCapsule_Type, &py_handle)) {
185 if (handle ==
NULL) {
186 PyErr_SetString(PyExc_ValueError,
187 "callback_remove(handle): NULL handle given, invalid or already removed");
192 customdata = ED_region_draw_cb_customdata(handle);
193 Py_DECREF((PyObject *)customdata);
198 PyErr_SetString(PyExc_TypeError,
"callback_remove(): type does not support callbacks");
265 PyObject *args = PyCapsule_GetContext(capsule);
273 PyObject *cb_func, *cb_args;
276 if (PyTuple_GET_SIZE(args) < 2) {
277 PyErr_SetString(PyExc_ValueError,
"handler_add(handler): expected at least 2 args");
281 cls = PyTuple_GET_ITEM(args, 0);
285 cb_func = PyTuple_GET_ITEM(args, 1);
286 if (!PyCallable_Check(cb_func)) {
287 PyErr_SetString(PyExc_TypeError,
"first argument isn't callable");
294 const char *error_prefix =
"WindowManager.draw_cursor_add";
296 const char *space_type_str;
297 const char *region_type_str;
302 .space_type_str =
NULL,
303 .region_type_str =
NULL,
308 if (!PyArg_ParseTuple(args,
309 "OOO!|ss:WindowManager.draw_cursor_add",
315 &
params.region_type_str)) {
322 error_prefix) == -1) {
328 error_prefix) == -1) {
336 const char *error_prefix =
"Space.draw_handler_add";
338 const char *region_type_str;
339 const char *event_str;
345 if (!PyArg_ParseTuple(args,
346 "OOO!ss:Space.draw_handler_add",
363 error_prefix) == -1) {
376 PyErr_Format(PyExc_TypeError,
"region type '%.200s' not in space",
params.region_type_str);
382 PyErr_SetString(PyExc_TypeError,
"callback_add(): type does not support callbacks");
394 PyCapsule_SetContext(
ret, args);
406 bool capsule_clear =
false;
408 if (PyTuple_GET_SIZE(args) < 2) {
409 PyErr_SetString(PyExc_ValueError,
"callback_remove(handler): expected at least 2 args");
413 cls = PyTuple_GET_ITEM(args, 0);
417 py_handle = PyTuple_GET_ITEM(args, 1);
419 if (handle ==
NULL) {
420 PyErr_SetString(PyExc_ValueError,
421 "callback_remove(handler): NULL handler given, invalid or already removed");
426 if (!PyArg_ParseTuple(
427 args,
"OO!:WindowManager.draw_cursor_remove", &cls, &PyCapsule_Type, &py_handle)) {
431 capsule_clear =
true;
434 const char *error_prefix =
"Space.draw_handler_remove";
436 const char *region_type_str;
441 if (!PyArg_ParseTuple(args,
442 "OO!s:Space.draw_handler_remove",
446 &
params.region_type_str)) {
453 error_prefix) == -1) {
466 PyErr_Format(PyExc_TypeError,
"region type '%.200s' not in space",
params.region_type_str);
470 capsule_clear =
true;
473 PyErr_SetString(PyExc_TypeError,
"callback_remove(): type does not support callbacks");
478 PyObject *handle_args = PyCapsule_GetContext(py_handle);
479 Py_DECREF(handle_args);
483 PyCapsule_Destructor destructor_fn = PyCapsule_GetDestructor(py_handle);
485 destructor_fn(py_handle);
486 PyCapsule_SetDestructor(py_handle,
NULL);
500 PyObject *tuple = customdata;
503 PyGILState_STATE gilstate;
505 gilstate = PyGILState_Ensure();
511 PyGILState_Release(gilstate);
struct SpaceType * BKE_spacetype_from_id(int spaceid)
struct ARegionType * BKE_regiontype_from_id(const struct SpaceType *st, int regionid)
#define REGION_DRAW_POST_VIEW
#define REGION_DRAW_BACKDROP
void * ED_region_draw_cb_activate(struct ARegionType *art, void(*draw)(const struct bContext *, struct ARegion *, void *), void *customdata, int type)
void ED_region_draw_cb_remove_by_type(struct ARegionType *art, void *draw_fn, void(*free)(void *))
#define REGION_DRAW_POST_PIXEL
void ED_region_draw_cb_exit(struct ARegionType *, void *)
#define REGION_DRAW_PRE_VIEW
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
StructRNA RNA_SpacePreferences
StructRNA RNA_SpaceView3D
StructRNA RNA_SpaceProperties
StructRNA RNA_SpaceImageEditor
StructRNA RNA_SpaceTextEditor
StructRNA RNA_WindowManager
StructRNA RNA_SpaceNodeEditor
StructRNA RNA_SpaceSequenceEditor
StructRNA RNA_SpaceOutliner
StructRNA RNA_SpaceClipEditor
StructRNA RNA_SpaceSpreadsheet
StructRNA RNA_SpaceDopeSheetEditor
StructRNA RNA_SpaceFileBrowser
StructRNA RNA_SpaceConsole
StructRNA RNA_SpaceGraphEditor
void bpy_context_clear(struct bContext *C, const PyGILState_STATE *gilstate)
void bpy_context_set(struct bContext *C, PyGILState_STATE *gilstate)
int pyrna_enum_value_from_id(const EnumPropertyItem *item, const char *identifier, int *r_value, const char *error_prefix)
StructRNA * pyrna_struct_as_srna(PyObject *self, const bool parent, const char *error_prefix)
static eSpace_Type rna_Space_refine_reverse(StructRNA *srna)
static const char * rna_capsual_id_invalid
PyObject * pyrna_callback_classmethod_remove(PyObject *UNUSED(self), PyObject *args)
static PyObject * PyC_Tuple_CopySized(PyObject *src, int len_dst)
static void cb_customdata_free(void *customdata)
static void cb_region_draw(const bContext *C, ARegion *UNUSED(region), void *customdata)
static void cb_rna_capsule_destructor(PyObject *capsule)
static void cb_wm_cursor_draw(bContext *C, int x, int y, void *customdata)
void BPY_callback_screen_free(struct ARegionType *art)
PyObject * pyrna_callback_classmethod_add(PyObject *UNUSED(self), PyObject *args)
static const EnumPropertyItem region_draw_mode_items[]
static const char * rna_capsual_id
void BPY_callback_wm_free(struct wmWindowManager *wm)
#define PyTuple_SET_ITEMS(op_arg,...)
const char * RNA_struct_identifier(const StructRNA *type)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
const EnumPropertyItem rna_enum_region_type_items[]
const EnumPropertyItem rna_enum_space_type_items[]
bool WM_paint_cursor_end(wmPaintCursor *handle)
void WM_paint_cursor_remove_by_type(wmWindowManager *wm, void *draw_fn, void(*free)(void *))
wmPaintCursor * WM_paint_cursor_activate(short space_type, short region_type, bool(*poll)(bContext *C), wmPaintCursorDraw draw, void *customdata)