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/makesrna/intern/rna_key.c')
-rw-r--r--source/blender/makesrna/intern/rna_key.c59
1 files changed, 39 insertions, 20 deletions
diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c
index b53218b2d50..7e9aebeffa4 100644
--- a/source/blender/makesrna/intern/rna_key.c
+++ b/source/blender/makesrna/intern/rna_key.c
@@ -24,8 +24,8 @@
#include <stdlib.h>
+#include "RNA_access.h"
#include "RNA_define.h"
-#include "RNA_types.h"
#include "rna_internal.h"
@@ -64,10 +64,10 @@ static Key *rna_ShapeKey_find_key(ID *id)
void rna_ShapeKey_name_set(PointerRNA *ptr, const char *value)
{
KeyBlock *kb= ptr->data;
- char oldname[32];
+ char oldname[sizeof(kb->name)];
/* make a copy of the old name first */
- BLI_strncpy(oldname, kb->name, sizeof(oldname));
+ BLI_strncpy(oldname, kb->name, sizeof(kb->name));
/* copy the new name into the name slot */
BLI_strncpy(kb->name, value, sizeof(kb->name));
@@ -75,7 +75,7 @@ void rna_ShapeKey_name_set(PointerRNA *ptr, const char *value)
/* make sure the name is truly unique */
if (ptr->id.data) {
Key *key= rna_ShapeKey_find_key(ptr->id.data);
- BLI_uniquename(&key->block, kb, "Key", '.', offsetof(KeyBlock, name), 32);
+ BLI_uniquename(&key->block, kb, "Key", '.', offsetof(KeyBlock, name), sizeof(kb->name));
}
/* fix all the animation data which may link to this */
@@ -97,30 +97,49 @@ static void rna_ShapeKey_value_range(PointerRNA *ptr, float *min, float *max)
*max= data->slidermax;
}
-static PointerRNA rna_ShapeKey_relative_key_get(PointerRNA *ptr)
+PointerRNA rna_object_shapekey_index_get(ID *id, int value)
{
- Key *key= rna_ShapeKey_find_key(ptr->id.data);
- KeyBlock *kb= (KeyBlock*)ptr->data, *kbrel;
+ Key *key= rna_ShapeKey_find_key(id);
+ KeyBlock *kb= NULL;
+ PointerRNA ptr;
int a;
- if(key && kb->relative < key->totkey)
- for(a=0, kbrel=key->block.first; kbrel; kbrel=kbrel->next, a++)
- if(a == kb->relative)
- return rna_pointer_inherit_refine(ptr, &RNA_ShapeKey, kbrel);
+ if(key && value < key->totkey)
+ for(a=0, kb=key->block.first; kb; kb=kb->next, a++)
+ if(a == value)
+ break;
+
+ RNA_pointer_create(id, &RNA_ShapeKey, kb, &ptr);
- return rna_pointer_inherit_refine(ptr, NULL, NULL);
+ return ptr;
}
-static void rna_ShapeKey_relative_key_set(PointerRNA *ptr, PointerRNA value)
+int rna_object_shapekey_index_set(ID *id, PointerRNA value, int current)
{
- Key *key= rna_ShapeKey_find_key(ptr->id.data);
- KeyBlock *kb= (KeyBlock*)ptr->data, *kbrel;
+ Key *key= rna_ShapeKey_find_key(id);
+ KeyBlock *kb;
int a;
if(key)
- for(a=0, kbrel=key->block.first; kbrel; kbrel=kbrel->next, a++)
- if(kbrel == value.data)
- kb->relative= a;
+ for(a=0, kb=key->block.first; kb; kb=kb->next, a++)
+ if(kb == value.data)
+ return a;
+
+ return current;
+}
+
+static PointerRNA rna_ShapeKey_relative_key_get(PointerRNA *ptr)
+{
+ KeyBlock *kb= (KeyBlock*)ptr->data;
+
+ return rna_object_shapekey_index_get(ptr->id.data, kb->relative);
+}
+
+static void rna_ShapeKey_relative_key_set(PointerRNA *ptr, PointerRNA value)
+{
+ KeyBlock *kb= (KeyBlock*)ptr->data;
+
+ kb->relative= rna_object_shapekey_index_set(ptr->id.data, value, kb->relative);
}
static void rna_ShapeKeyPoint_co_get(PointerRNA *ptr, float *values)
@@ -227,7 +246,7 @@ static void rna_ShapeKey_data_begin(CollectionPropertyIterator *iter, PointerRNA
Nurb *nu;
int tot= kb->totelem, size= key->elemsize;
- if(GS(key->from->name) == ID_CU) {
+ if(GS(key->from->name) == ID_CU) {
cu= (Curve*)key->from;
nu= cu->nurb.first;
@@ -248,7 +267,7 @@ static int rna_ShapeKey_data_length(PointerRNA *ptr)
Nurb *nu;
int tot= kb->totelem;
- if(GS(key->from->name) == ID_CU) {
+ if(GS(key->from->name) == ID_CU) {
cu= (Curve*)key->from;
nu= cu->nurb.first;