[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50037] trunk/blender/source/blender: Sequencer: Python API for sequence modifiers
Sergey Sharybin
sergey.vfx at gmail.com
Mon Aug 20 12:15:32 CEST 2012
Revision: 50037
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50037
Author: nazgul
Date: 2012-08-20 10:15:32 +0000 (Mon, 20 Aug 2012)
Log Message:
-----------
Sequencer: Python API for sequence modifiers
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_sequencer.h
trunk/blender/source/blender/blenkernel/intern/seqmodifier.c
trunk/blender/source/blender/blenkernel/intern/sequencer.c
trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c
trunk/blender/source/blender/makesrna/RNA_enum_types.h
trunk/blender/source/blender/makesrna/intern/rna_object.c
trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h 2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h 2012-08-20 10:15:32 UTC (rev 50037)
@@ -384,7 +384,9 @@
struct SequenceModifierTypeInfo *BKE_sequence_modifier_type_info_get(int type);
-void BKE_sequence_modifier_new(struct Sequence *seq, int type);
+struct SequenceModifierData *BKE_sequence_modifier_new(struct Sequence *seq, const char *name, int type);
+int BKE_sequence_modifier_remove(struct Sequence *seq, struct SequenceModifierData *smd);
+void BKE_sequence_modifier_clear(struct Sequence *seq);
void BKE_sequence_modifier_free(struct SequenceModifierData *smd);
void BKE_sequence_modifier_unique_name(struct Sequence *seq, struct SequenceModifierData *smd);
struct SequenceModifierData *BKE_sequence_modifier_find_by_name(struct Sequence *seq, char *name);
Modified: trunk/blender/source/blender/blenkernel/intern/seqmodifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/seqmodifier.c 2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/blenkernel/intern/seqmodifier.c 2012-08-20 10:15:32 UTC (rev 50037)
@@ -417,7 +417,7 @@
return modifiersTypes[type];
}
-void BKE_sequence_modifier_new(Sequence *seq, int type)
+SequenceModifierData *BKE_sequence_modifier_new(Sequence *seq, const char *name, int type)
{
SequenceModifierData *smd;
SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(type);
@@ -427,7 +427,10 @@
smd->type = type;
smd->flag |= SEQUENCE_MODIFIER_EXPANDED;
- BLI_strncpy(smd->name, smti->name, sizeof(smd->name));
+ if (!name || !name[0])
+ BLI_strncpy(smd->name, smti->name, sizeof(smd->name));
+ else
+ BLI_strncpy(smd->name, name, sizeof(smd->name));
BLI_addtail(&seq->modifiers, smd);
@@ -435,8 +438,33 @@
if (smti->init_data)
smti->init_data(smd);
+
+ return smd;
}
+int BKE_sequence_modifier_remove(Sequence *seq, SequenceModifierData *smd)
+{
+ if (BLI_findindex(&seq->modifiers, smd) == -1)
+ return FALSE;
+
+ BLI_remlink(&seq->modifiers, smd);
+ BKE_sequence_modifier_free(smd);
+
+ return TRUE;
+}
+
+void BKE_sequence_modifier_clear(Sequence *seq)
+{
+ SequenceModifierData *smd, *smd_next;
+
+ for (smd = seq->modifiers.first; smd; smd = smd_next) {
+ smd_next = smd->next;
+ BKE_sequence_modifier_free(smd);
+ }
+
+ seq->modifiers.first = seq->modifiers.last = NULL;
+}
+
void BKE_sequence_modifier_free(SequenceModifierData *smd)
{
SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type);
Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c 2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c 2012-08-20 10:15:32 UTC (rev 50037)
@@ -205,15 +205,8 @@
}
/* free modifiers */
- if (seq->modifiers.first) {
- SequenceModifierData *smd, *smd_next;
+ BKE_sequence_modifier_clear(seq);
- for (smd = seq->modifiers.first; smd; smd = smd_next) {
- smd_next = smd->next;
- BKE_sequence_modifier_free(smd);
- }
- }
-
BKE_sequencer_cache_cleanup_sequence(seq);
BKE_sequencer_preprocessed_cache_cleanup_sequence(seq);
Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c 2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c 2012-08-20 10:15:32 UTC (rev 50037)
@@ -84,7 +84,7 @@
Sequence *seq = BKE_sequencer_active_get(scene);
int type = RNA_enum_get(op->ptr, "type");
- BKE_sequence_modifier_new(seq, type);
+ BKE_sequence_modifier_new(seq, NULL, type);
BKE_sequence_invalidate_cache(scene, seq);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
@@ -96,14 +96,6 @@
{
PropertyRNA *prop;
- /* TODO: de-duplicate from RNA */
- static EnumPropertyItem sequence_modifier_type_items[] = {
- {seqModifierType_ColorBalance, "COLOR_BALANCE", ICON_NONE, "Color Balance", ""},
- {seqModifierType_Curves, "CURVES", ICON_NONE, "Curves", ""},
- {seqModifierType_HueCorrect,"HUE_CORRECT", ICON_NONE, "Hue Correct", ""},
- {0, NULL, 0, NULL, NULL}
- };
-
/* identifiers */
ot->name = "Add Strip Modifier";
ot->idname = "SEQUENCER_OT_strip_modifier_add";
Modified: trunk/blender/source/blender/makesrna/RNA_enum_types.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_enum_types.h 2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/makesrna/RNA_enum_types.h 2012-08-20 10:15:32 UTC (rev 50037)
@@ -52,6 +52,7 @@
extern EnumPropertyItem modifier_type_items[];
extern EnumPropertyItem constraint_type_items[];
extern EnumPropertyItem boidrule_type_items[];
+extern EnumPropertyItem sequence_modifier_type_items[];
extern EnumPropertyItem image_type_items[];
extern EnumPropertyItem image_color_mode_items[];
Modified: trunk/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object.c 2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/makesrna/intern/rna_object.c 2012-08-20 10:15:32 UTC (rev 50037)
@@ -1768,7 +1768,7 @@
func = RNA_def_function(srna, "new", "rna_Object_modifier_new");
RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Add a new modifier");
- parm = RNA_def_string(func, "name", "Name", 0, "", "New name for the bone");
+ parm = RNA_def_string(func, "name", "Name", 0, "", "New name for the modifier");
RNA_def_property_flag(parm, PROP_REQUIRED);
/* modifier to add */
parm = RNA_def_enum(func, "type", modifier_type_items, 1, "", "Modifier type to add");
Modified: trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequencer.c 2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequencer.c 2012-08-20 10:15:32 UTC (rev 50037)
@@ -30,6 +30,7 @@
#include "RNA_access.h"
#include "RNA_define.h"
+#include "RNA_enum_types.h"
#include "rna_internal.h"
@@ -58,8 +59,20 @@
int supports_mask;
} EffectInfo;
+EnumPropertyItem sequence_modifier_type_items[] = {
+ {seqModifierType_ColorBalance, "COLOR_BALANCE", ICON_NONE, "Color Balance", ""},
+ {seqModifierType_Curves, "CURVES", ICON_NONE, "Curves", ""},
+ {seqModifierType_HueCorrect,"HUE_CORRECT", ICON_NONE, "Hue Correct", ""},
+ {0, NULL, 0, NULL, NULL}
+};
+
#ifdef RNA_RUNTIME
+#include "BKE_report.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
typedef struct SequenceSearchData {
Sequence *seq;
void *data;
@@ -961,6 +974,52 @@
return TRUE;
}
+static SequenceModifierData *rna_Sequence_modifier_new(Sequence *seq, bContext *C, ReportList *reports, const char *name, int type)
+{
+ if (!BKE_sequence_supports_modifiers(seq)) {
+ BKE_report(reports, RPT_ERROR, "Sequence type does not support modifiers");
+
+ return NULL;
+ }
+ else {
+ Scene *scene = CTX_data_scene(C);
+ SequenceModifierData *smd;
+
+ smd = BKE_sequence_modifier_new(seq, name, type);
+
+ BKE_sequence_invalidate_cache_for_modifier(scene, seq);
+
+ WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
+
+ return smd;
+ }
+}
+
+static void rna_Sequence_modifier_remove(Sequence *seq, bContext *C, ReportList *reports, SequenceModifierData *smd)
+{
+ Scene *scene = CTX_data_scene(C);
+
+ if (BKE_sequence_modifier_remove(seq, smd)) {
+ BKE_sequence_invalidate_cache_for_modifier(scene, seq);
+
+ WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
+ }
+ else {
+ BKE_report(reports, RPT_ERROR, "Modifier was not found in the stack");
+ }
+}
+
+static void rna_Sequence_modifier_clear(Sequence *seq, bContext *C)
+{
+ Scene *scene = CTX_data_scene(C);
+
+ BKE_sequence_modifier_clear(seq);
+
+ BKE_sequence_invalidate_cache_for_modifier(scene, seq);
+
+ WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
+}
+
#else
static void rna_def_strip_element(BlenderRNA *brna)
@@ -1210,12 +1269,39 @@
{
StructRNA *srna;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
RNA_def_property_srna(cprop, "SequenceModifiers");
srna = RNA_def_struct(brna, "SequenceModifiers", NULL);
RNA_def_struct_sdna(srna, "Sequence");
RNA_def_struct_ui_text(srna, "Strip Modifiers", "Collection of strip modifiers");
- /* TODO: implement new/remove/clear methods for modifier stack */
+ /* add modifier */
+ func = RNA_def_function(srna, "new", "rna_Sequence_modifier_new");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ RNA_def_function_ui_description(func, "Add a new modifier");
+ parm = RNA_def_string(func, "name", "Name", 0, "", "New name for the modifier");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ /* modifier to add */
+ parm = RNA_def_enum(func, "type", sequence_modifier_type_items, seqModifierType_ColorBalance, "", "Modifier type to add");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ /* return type */
+ parm = RNA_def_pointer(func, "modifier", "SequenceModifier", "", "Newly created modifier");
+ RNA_def_function_return(func, parm);
+
+ /* remove modifier */
+ func = RNA_def_function(srna, "remove", "rna_Sequence_modifier_remove");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ RNA_def_function_ui_description(func, "Remove an existing modifier from the sequence");
+ /* modifier to remove */
+ parm = RNA_def_pointer(func, "modifier", "SequenceModifier", "", "Modifier to remove");
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
+
+ /* clear all modifiers */
+ func = RNA_def_function(srna, "clear", "rna_Sequence_modifier_clear");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ RNA_def_function_ui_description(func, "Remove all modifiers from the sequence");
}
static void rna_def_sequence(BlenderRNA *brna)
@@ -2130,13 +2216,6 @@
StructRNA *srna;
PropertyRNA *prop;
- static EnumPropertyItem sequence_modifier_type_items[] = {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list