diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py index 5279aa10843..21fe503f840 100644 --- a/release/ui/buttons_scene.py +++ b/release/ui/buttons_scene.py @@ -40,7 +40,7 @@ class RENDER_PT_image(bpy.types.Panel): layout.column_flow() layout.itemR(rd, "resolution_x", text="SizeX") - layout.itemR(rd, "resolution_x", text="SizeY") + layout.itemR(rd, "resolution_y", text="SizeY") layout.itemR(rd, "pixel_aspect_x", text="AspX") layout.itemR(rd, "pixel_aspect_y", text="AspY") diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index 3e403ea1aad..660e1d01b6c 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -80,7 +80,7 @@ int PYOP_props_from_dict(PointerRNA *ptr, PyObject *kw) break; } - if (pyrna_py_to_prop(ptr, prop, item)) { + if (pyrna_py_to_prop(ptr, prop, NULL, item)) { error_val= -1; break; } diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index d2d9364e7df..87ce11b76d9 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -217,8 +217,10 @@ PyObject *pyrna_func_to_py(PointerRNA *ptr, FunctionRNA *func) return ret; } -int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value) + +int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value) { + /* XXX hard limits should be checked here */ int type = RNA_property_type(ptr, prop); int len = RNA_property_array_length(ptr, prop); @@ -240,7 +242,10 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value) switch (type) { case PROP_BOOLEAN: { - int *param_arr = MEM_mallocN(sizeof(char) * len, "pyrna bool array"); + int *param_arr; + if(data) param_arr= (int*)data; + else param_arr= MEM_mallocN(sizeof(char) * len, "pyrna bool array"); + /* collect the variables before assigning, incase one of them is incorrect */ for (i=0; iptr, ptype)) { - RNA_property_pointer_set(ptr, prop, param->ptr); - } else { + int raise_error= 0; + if(data) { + if(ptype == &RNA_AnyType) { + *((PointerRNA*)data)= param->ptr; + } + else if(RNA_struct_is_a(¶m->ptr, ptype)) { + *((void**)data)= param->ptr.data; + } else { + raise_error= 1; + } + } + else { + /* data==NULL, assign to RNA */ + if(RNA_struct_is_a(¶m->ptr, ptype)) { + RNA_property_pointer_set(ptr, prop, param->ptr); + } else { + PointerRNA tmp; + RNA_pointer_create(NULL, ptype, NULL, &tmp); + PyErr_Format(PyExc_TypeError, "expected a %s type", RNA_struct_identifier(&tmp)); + return -1; + } + } + + if(raise_error) { PointerRNA tmp; RNA_pointer_create(NULL, ptype, NULL, &tmp); PyErr_Format(PyExc_TypeError, "expected a %s type", RNA_struct_identifier(&tmp)); @@ -403,7 +444,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value) break; } case PROP_COLLECTION: - PyErr_SetString(PyExc_AttributeError, "cant assign to collections"); + PyErr_SetString(PyExc_AttributeError, "cant convert collections yet"); return -1; break; default: @@ -778,7 +819,7 @@ static int pyrna_struct_setattro( BPy_StructRNA * self, PyObject *pyname, PyObje } /* pyrna_py_to_prop sets its own exceptions */ - return pyrna_py_to_prop(&self->ptr, prop, value); + return pyrna_py_to_prop(&self->ptr, prop, NULL, value); } PyObject *pyrna_prop_keys(BPy_PropertyRNA *self) @@ -961,197 +1002,6 @@ static PyObject * pyrna_prop_new(PyTypeObject *type, PyObject *args, PyObject *k } } -int pyrna_py_to_param(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value) -{ - /* XXX hard limits should be checked here */ - int type = RNA_property_type(ptr, prop); - int len = RNA_property_array_length(ptr, prop); - - if (len > 0) { - PyObject *item; - int i; - - if (!PySequence_Check(value)) { - PyErr_SetString(PyExc_TypeError, "expected a python sequence type assigned to an RNA array."); - return -1; - } - - if ((int)PySequence_Length(value) != len) { - PyErr_SetString(PyExc_AttributeError, "python sequence length did not match the RNA array."); - return -1; - } - - /* for arrays we have a limited number of types */ - switch (type) { - case PROP_BOOLEAN: - { - int *param_arr = (int*)data; - - /* collect the variables before assigning, incase one of them is incorrect */ - for (i=0; iptr; - } - else if(RNA_struct_is_a(¶m->ptr, ptype)) { - *((void**)data)= param->ptr.data; - } else { - PointerRNA tmp; - RNA_pointer_create(NULL, ptype, NULL, &tmp); - PyErr_Format(PyExc_TypeError, "expected a %s type", RNA_struct_identifier(&tmp)); - return -1; - } - } - break; - } - case PROP_COLLECTION: - PyErr_SetString(PyExc_AttributeError, "cant pass collections yet"); - return -1; - break; - default: - PyErr_SetString(PyExc_AttributeError, "unknown property type (pyrna_py_to_param)"); - return -1; - break; - } - } - - return 0; -} - PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *data) { PyObject *ret; @@ -1305,7 +1155,7 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) continue; } - err= pyrna_py_to_param(&funcptr, parm, iter.data, item); + err= pyrna_py_to_prop(&funcptr, parm, iter.data, item); if(err!=0) break; diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h index e42ac8716ae..5ddaf991a51 100644 --- a/source/blender/python/intern/bpy_rna.h +++ b/source/blender/python/intern/bpy_rna.h @@ -68,7 +68,7 @@ PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr ); PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop ); /* operators also need this to set args */ -int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value); +int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value); PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop); /* functions for setting up new props - experemental */