Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/python')
-rw-r--r--source/blender/python/generic/py_capi_utils.c2
-rw-r--r--source/blender/python/intern/bpy_props.c23
-rw-r--r--source/blender/python/intern/bpy_rna.c25
-rw-r--r--source/blender/python/intern/bpy_rna_array.c47
4 files changed, 67 insertions, 30 deletions
diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
index cee9ad3b477..d2d78167fae 100644
--- a/source/blender/python/generic/py_capi_utils.c
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -91,7 +91,7 @@ int PyC_AsArray_FAST(
}
}
else if (type == &PyBool_Type) {
- int *array_bool = array;
+ bool *array_bool = array;
for (i = 0; i < length; i++) {
array_bool[i] = (PyLong_AsLong(value_fast_items[i]) != 0);
}
diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c
index d0b0331430d..edcc2bef0c5 100644
--- a/source/blender/python/intern/bpy_props.c
+++ b/source/blender/python/intern/bpy_props.c
@@ -263,7 +263,7 @@ static void bpy_prop_update_cb(struct bContext *C, struct PointerRNA *ptr, struc
}
}
-static int bpy_prop_boolean_get_cb(struct PointerRNA *ptr, struct PropertyRNA *prop)
+static bool bpy_prop_boolean_get_cb(struct PointerRNA *ptr, struct PropertyRNA *prop)
{
PyObject **py_data = RNA_property_py_data_get(prop);
PyObject *py_func;
@@ -273,7 +273,7 @@ static int bpy_prop_boolean_get_cb(struct PointerRNA *ptr, struct PropertyRNA *p
PyGILState_STATE gilstate;
bool use_gil;
const bool is_write_ok = pyrna_write_check();
- int value;
+ bool value;
BLI_assert(py_data != NULL);
@@ -301,12 +301,15 @@ static int bpy_prop_boolean_get_cb(struct PointerRNA *ptr, struct PropertyRNA *p
value = false;
}
else {
- value = PyC_Long_AsI32(ret);
+ int value_i = PyC_Long_AsBool(ret);
- if (value == -1 && PyErr_Occurred()) {
+ if (value_i == -1 && PyErr_Occurred()) {
PyC_Err_PrintWithFunc(py_func);
value = false;
}
+ else {
+ value = (bool)value_i;
+ }
Py_DECREF(ret);
}
@@ -321,7 +324,7 @@ static int bpy_prop_boolean_get_cb(struct PointerRNA *ptr, struct PropertyRNA *p
return value;
}
-static void bpy_prop_boolean_set_cb(struct PointerRNA *ptr, struct PropertyRNA *prop, int value)
+static void bpy_prop_boolean_set_cb(struct PointerRNA *ptr, struct PropertyRNA *prop, bool value)
{
PyObject **py_data = RNA_property_py_data_get(prop);
PyObject *py_func;
@@ -375,7 +378,7 @@ static void bpy_prop_boolean_set_cb(struct PointerRNA *ptr, struct PropertyRNA *
}
}
-static int bpy_prop_poll_cb(struct PointerRNA *self, PointerRNA candidate, struct PropertyRNA *prop)
+static bool bpy_prop_poll_cb(struct PointerRNA *self, PointerRNA candidate, struct PropertyRNA *prop)
{
PyObject *py_self;
PyObject *py_candidate;
@@ -420,7 +423,7 @@ static int bpy_prop_poll_cb(struct PointerRNA *self, PointerRNA candidate, struc
return result;
}
-static void bpy_prop_boolean_array_get_cb(struct PointerRNA *ptr, struct PropertyRNA *prop, int *values)
+static void bpy_prop_boolean_array_get_cb(struct PointerRNA *ptr, struct PropertyRNA *prop, bool *values)
{
PyObject **py_data = RNA_property_py_data_get(prop);
PyObject *py_func;
@@ -481,7 +484,7 @@ static void bpy_prop_boolean_array_get_cb(struct PointerRNA *ptr, struct Propert
}
}
-static void bpy_prop_boolean_array_set_cb(struct PointerRNA *ptr, struct PropertyRNA *prop, const int *values)
+static void bpy_prop_boolean_array_set_cb(struct PointerRNA *ptr, struct PropertyRNA *prop, const bool *values)
{
PyObject **py_data = RNA_property_py_data_get(prop);
PyObject *py_func;
@@ -511,7 +514,7 @@ static void bpy_prop_boolean_array_set_cb(struct PointerRNA *ptr, struct Propert
self = pyrna_struct_as_instance(ptr);
PyTuple_SET_ITEM(args, 0, self);
- py_values = PyC_Tuple_PackArray_I32FromBool(values, len);
+ py_values = PyC_Tuple_PackArray_Bool(values, len);
PyTuple_SET_ITEM(args, 1, py_values);
ret = PyObject_CallObject(py_func, args);
@@ -2097,7 +2100,7 @@ static PyObject *BPy_BoolVectorProperty(PyObject *self, PyObject *args, PyObject
if (srna) {
const char *id = NULL, *name = NULL, *description = "";
int id_len;
- int def[PYRNA_STACK_ARRAY] = {0};
+ bool def[PYRNA_STACK_ARRAY] = {0};
int size = 3;
PropertyRNA *prop;
PyObject *pydef = NULL;
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index be0e9771a0a..3e1c85d7f9f 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -1667,7 +1667,7 @@ static int pyrna_py_to_prop(
return -1;
}
else {
- if (data) *((int *)data) = param;
+ if (data) *((bool *)data) = param;
else RNA_property_boolean_set(ptr, prop, param);
}
break;
@@ -2486,9 +2486,9 @@ static PyObject *pyrna_prop_array_subscript_slice(
}
case PROP_BOOLEAN:
{
- int values_stack[PYRNA_STACK_ARRAY];
- int *values;
- if (length > PYRNA_STACK_ARRAY) { values = PyMem_MALLOC(sizeof(int) * length); }
+ bool values_stack[PYRNA_STACK_ARRAY];
+ bool *values;
+ if (length > PYRNA_STACK_ARRAY) { values = PyMem_MALLOC(sizeof(bool) * length); }
else { values = values_stack; }
RNA_property_boolean_get_array(ptr, prop, values);
@@ -2869,7 +2869,7 @@ static int prop_subscript_ass_array_slice__int_recursive(
}
static int prop_subscript_ass_array_slice__bool_recursive(
- PyObject **value_items, int *value,
+ PyObject **value_items, bool *value,
int totdim, const int dimsize[])
{
const int length = dimsize[0];
@@ -2992,9 +2992,9 @@ static int prop_subscript_ass_array_slice(
}
case PROP_BOOLEAN:
{
- int values_stack[PYRNA_STACK_ARRAY];
- int *values = (length_flat > PYRNA_STACK_ARRAY) ?
- (values_alloc = PyMem_MALLOC(sizeof(*values) * length_flat)) : values_stack;
+ bool values_stack[PYRNA_STACK_ARRAY];
+ bool *values = (length_flat > PYRNA_STACK_ARRAY) ?
+ (values_alloc = PyMem_MALLOC(sizeof(bool) * length_flat)) : values_stack;
if (start != 0 || stop != length) {
/* partial assignment? - need to get the array */
@@ -4986,6 +4986,8 @@ static bool foreach_compat_buffer(RawPropertyType raw_type, int attr_signed, con
case PROP_RAW_INT:
if (attr_signed) return (f == 'i') ? 1 : 0;
else return (f == 'I') ? 1 : 0;
+ case PROP_RAW_BOOLEAN:
+ return (f == '?') ? 1 : 0;
case PROP_RAW_FLOAT:
return (f == 'f') ? 1 : 0;
case PROP_RAW_DOUBLE:
@@ -5052,6 +5054,9 @@ static PyObject *foreach_getset(BPy_PropertyRNA *self, PyObject *args, int set)
case PROP_RAW_INT:
((int *)array)[i] = (int)PyLong_AsLong(item);
break;
+ case PROP_RAW_BOOLEAN:
+ ((bool *)array)[i] = (int)PyLong_AsLong(item) != 0;
+ break;
case PROP_RAW_FLOAT:
((float *)array)[i] = (float)PyFloat_AsDouble(item);
break;
@@ -5386,7 +5391,7 @@ static PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *dat
case PROP_BOOLEAN:
ret = PyTuple_New(len);
for (a = 0; a < len; a++)
- PyTuple_SET_ITEM(ret, a, PyBool_FromLong(((int *)data)[a]));
+ PyTuple_SET_ITEM(ret, a, PyBool_FromLong(((bool *)data)[a]));
break;
case PROP_INT:
ret = PyTuple_New(len);
@@ -5429,7 +5434,7 @@ static PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *dat
/* see if we can coerce into a python type - PropertyType */
switch (type) {
case PROP_BOOLEAN:
- ret = PyBool_FromLong(*(int *)data);
+ ret = PyBool_FromLong(*(bool *)data);
break;
case PROP_INT:
ret = PyLong_FromLong(*(int *)data);
diff --git a/source/blender/python/intern/bpy_rna_array.c b/source/blender/python/intern/bpy_rna_array.c
index 571ee0edea2..9a184df8054 100644
--- a/source/blender/python/intern/bpy_rna_array.c
+++ b/source/blender/python/intern/bpy_rna_array.c
@@ -564,7 +564,7 @@ static void py_to_int(const struct ItemConvertArgData *arg, PyObject *py, char *
static void py_to_bool(const struct ItemConvertArgData *UNUSED(arg), PyObject *py, char *data)
{
- *(int *)data = (int)PyObject_IsTrue(py);
+ *(bool *)data = (bool)PyObject_IsTrue(py);
}
static int py_float_check(PyObject *py)
@@ -596,7 +596,7 @@ static void int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, void *v
static void bool_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, void *value)
{
- RNA_property_boolean_set_index(ptr, prop, index, *(int *)value);
+ RNA_property_boolean_set_index(ptr, prop, index, *(bool *)value);
}
static void convert_item_init_float(
@@ -655,7 +655,7 @@ int pyrna_py_to_array(PointerRNA *ptr, PropertyRNA *prop, char *param_data,
convert_item_init_bool(ptr, prop, &convert_item);
ret = py_to_array(
- py, ptr, prop, param_data, py_bool_check, "boolean", sizeof(int),
+ py, ptr, prop, param_data, py_bool_check, "boolean", sizeof(bool),
&convert_item, (RNA_SetArrayFunc)RNA_property_boolean_set_array, error_prefix);
break;
}
@@ -885,10 +885,9 @@ int pyrna_array_contains_py(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
}
break;
}
- case PROP_BOOLEAN:
case PROP_INT:
{
- int value_i = PyLong_AsLong(value);
+ int value_i = PyC_Long_AsI32(value);
if (value_i == -1 && PyErr_Occurred()) {
PyErr_Clear();
return 0;
@@ -904,10 +903,40 @@ int pyrna_array_contains_py(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
tmp_arr = tmp;
}
- if (type == PROP_BOOLEAN)
- RNA_property_boolean_get_array(ptr, prop, tmp_arr);
- else
- RNA_property_int_get_array(ptr, prop, tmp_arr);
+ RNA_property_int_get_array(ptr, prop, tmp_arr);
+
+ for (i = 0; i < len; i++) {
+ if (tmp_arr[i] == value_i) {
+ break;
+ }
+ }
+
+ if (tmp_arr != tmp)
+ PyMem_FREE(tmp_arr);
+
+ return i < len ? 1 : 0;
+ }
+ break;
+ }
+ case PROP_BOOLEAN:
+ {
+ int value_i = PyC_Long_AsBool(value);
+ if (value_i == -1 && PyErr_Occurred()) {
+ PyErr_Clear();
+ return 0;
+ }
+ else {
+ bool tmp[32];
+ bool *tmp_arr;
+
+ if (len * sizeof(bool) > sizeof(tmp)) {
+ tmp_arr = PyMem_MALLOC(len * sizeof(bool));
+ }
+ else {
+ tmp_arr = tmp;
+ }
+
+ RNA_property_boolean_get_array(ptr, prop, tmp_arr);
for (i = 0; i < len; i++) {
if (tmp_arr[i] == value_i) {