[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25505] trunk/blender/source/blender/ editors/transform: Sequence Slide transformation ( easier to do special sequence code there than in a generic transform)
Martin Poirier
theeth at yahoo.com
Mon Dec 21 18:23:44 CET 2009
Revision: 25505
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25505
Author: theeth
Date: 2009-12-21 18:23:44 +0100 (Mon, 21 Dec 2009)
Log Message:
-----------
Sequence Slide transformation (easier to do special sequence code there than in a generic transform)
Also make the transform operator creation a bit more automagic (I always forget either operator registration or modal keymap registration, this is all automatic now).
Modified Paths:
--------------
trunk/blender/source/blender/editors/transform/transform.c
trunk/blender/source/blender/editors/transform/transform.h
trunk/blender/source/blender/editors/transform/transform_ops.c
Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c 2009-12-21 16:57:39 UTC (rev 25504)
+++ trunk/blender/source/blender/editors/transform/transform.c 2009-12-21 17:23:44 UTC (rev 25505)
@@ -450,55 +450,6 @@
#endif
}
-#if 0
-static char *transform_to_undostr(TransInfo *t)
-{
- switch (t->mode) {
- case TFM_TRANSLATION:
- return "Translate";
- case TFM_ROTATION:
- return "Rotate";
- case TFM_RESIZE:
- return "Scale";
- case TFM_TOSPHERE:
- return "To Sphere";
- case TFM_SHEAR:
- return "Shear";
- case TFM_WARP:
- return "Warp";
- case TFM_SHRINKFATTEN:
- return "Shrink/Fatten";
- case TFM_TILT:
- return "Tilt";
- case TFM_TRACKBALL:
- return "Trackball";
- case TFM_PUSHPULL:
- return "Push/Pull";
- case TFM_BEVEL:
- return "Bevel";
- case TFM_BWEIGHT:
- return "Bevel Weight";
- case TFM_CREASE:
- return "Crease";
- case TFM_BONESIZE:
- return "Bone Width";
- case TFM_BONE_ENVELOPE:
- return "Bone Envelope";
- case TFM_TIME_TRANSLATE:
- return "Translate Anim. Data";
- case TFM_TIME_SCALE:
- return "Scale Anim. Data";
- case TFM_TIME_SLIDE:
- return "Time Slide";
- case TFM_BAKE_TIME:
- return "Key Time";
- case TFM_MIRROR:
- return "Mirror";
- }
- return "Transform";
-}
-#endif
-
/* ************************************************* */
/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
@@ -521,7 +472,7 @@
#define TFM_MODAL_REMOVE_SNAP 17
/* called in transform_ops.c, on each regeneration of keymaps */
-void transform_modal_keymap(wmKeyConfig *keyconf)
+wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
{TFM_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
@@ -546,7 +497,7 @@
wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map");
/* this function is called for each spacetype, only needs to add map once */
- if(keymap) return;
+ if(keymap) return NULL;
keymap= WM_modalkeymap_add(keyconf, "Transform Modal Map", modal_items);
@@ -568,19 +519,7 @@
WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, TFM_MODAL_ADD_SNAP);
WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, KM_ALT, 0, TFM_MODAL_REMOVE_SNAP);
- /* assign map to operators */
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_transform");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_translate");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_rotate");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_tosphere");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_resize");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_shear");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_warp");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_shrink_fatten");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_tilt");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_trackball");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_mirror");
- WM_modalkeymap_assign(keymap, "TRANSFORM_OT_edge_slide");
+ return keymap;
}
@@ -1620,6 +1559,9 @@
case TFM_ALIGN:
initAlign(t);
break;
+ case TFM_SEQ_SLIDE:
+ initSeqSlide(t);
+ break;
}
/* overwrite initial values if operator supplied a non-null vector */
@@ -3290,11 +3232,11 @@
/* uses t->vec to store actual translation in */
int Translation(TransInfo *t, short mval[2])
{
- float tvec[3];
char str[250];
if (t->con.mode & CON_APPLY) {
float pvec[3] = {0.0f, 0.0f, 0.0f};
+ float tvec[3];
applySnapping(t, t->values);
t->con.applyVec(t, NULL, t->values, tvec, pvec);
VECCOPY(t->values, tvec);
@@ -5018,6 +4960,90 @@
return 1;
}
+/* ************************** SEQ SLIDE *************************** */
+
+void initSeqSlide(TransInfo *t)
+{
+ t->transform = SeqSlide;
+
+ initMouseInputMode(t, &t->mouse, INPUT_VECTOR);
+
+ t->idx_max = 1;
+ t->num.flag = 0;
+ t->num.idx_max = t->idx_max;
+
+ t->ndof.axis = 1|2;
+
+ t->snap[0] = 0.0f;
+ t->snap[1] = floor(t->scene->r.frs_sec / t->scene->r.frs_sec_base);
+ t->snap[2] = 10.0f;
+}
+
+static void headerSeqSlide(TransInfo *t, float val[2], char *str)
+{
+ char tvec[60];
+
+ if (hasNumInput(&t->num)) {
+ outputNumInput(&(t->num), tvec);
+ }
+ else {
+ sprintf(&tvec[0], "%.0f, %.0f", val[0], val[1]);
+ }
+
+ sprintf(str, "Sequence Slide: %s%s", &tvec[0], t->con.text);
+}
+
+static void applySeqSlide(TransInfo *t, float val[2]) {
+ TransData *td = t->data;
+ int i;
+
+ for(i = 0 ; i < t->total; i++, td++) {
+ float tvec[2];
+
+ if (td->flag & TD_NOACTION)
+ break;
+
+ if (td->flag & TD_SKIP)
+ continue;
+
+ copy_v2_v2(tvec, val);
+
+ mul_v2_fl(tvec, td->factor);
+
+ td->loc[0] = td->iloc[0] + tvec[0];
+ td->loc[1] = td->iloc[1] + tvec[1];
+ }
+}
+
+int SeqSlide(TransInfo *t, short mval[2])
+{
+ char str[200];
+
+ if (t->con.mode & CON_APPLY) {
+ float pvec[3] = {0.0f, 0.0f, 0.0f};
+ float tvec[3];
+ t->con.applyVec(t, NULL, t->values, tvec, pvec);
+ VECCOPY(t->values, tvec);
+ }
+ else {
+ applyNDofInput(&t->ndof, t->values);
+ snapGrid(t, t->values);
+ applyNumInput(&t->num, t->values);
+ }
+
+ t->values[0] = floor(t->values[0] + 0.5);
+ t->values[1] = floor(t->values[1] + 0.5);
+
+ headerSeqSlide(t, t->values, str);
+ applySeqSlide(t, t->values);
+
+ recalcData(t);
+
+ ED_area_headerprint(t->sa, str);
+
+ return 1;
+}
+
/* ************************** ANIM EDITORS - TRANSFORM TOOLS *************************** */
/* ---------------- Special Helpers for Various Settings ------------- */
Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h 2009-12-21 16:57:39 UTC (rev 25504)
+++ trunk/blender/source/blender/editors/transform/transform.h 2009-12-21 17:23:44 UTC (rev 25505)
@@ -53,6 +53,8 @@
struct wmOperatorType;
struct wmOperator;
struct wmWindowManager;
+struct wmKeyMap;
+struct wmKeyConfig;
struct bContext;
struct wmEvent;
struct wmTimer;
@@ -522,9 +524,12 @@
void initAlign(TransInfo *t);
int Align(TransInfo *t, short mval[2]);
+void initSeqSlide(TransInfo *t);
+int SeqSlide(TransInfo *t, short mval[2]);
+
void drawPropCircle(const struct bContext *C, TransInfo *t);
-void transform_modal_keymap(struct wmKeyConfig *keyconf);
+struct wmKeyMap *transform_modal_keymap(struct wmKeyConfig *keyconf);
/*********************** transform_conversions.c ********** */
Modified: trunk/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_ops.c 2009-12-21 16:57:39 UTC (rev 25504)
+++ trunk/blender/source/blender/editors/transform/transform_ops.c 2009-12-21 17:23:44 UTC (rev 25505)
@@ -51,6 +51,7 @@
{
char *idname;
int mode;
+ void (*opfunc)(wmOperatorType*);
} TransformModeItem;
static float VecOne[3] = {1, 1, 1};
@@ -66,21 +67,35 @@
char OP_TRACKBALL[] = "TRANSFORM_OT_trackball";
char OP_MIRROR[] = "TRANSFORM_OT_mirror";
char OP_EDGE_SLIDE[] = "TRANSFORM_OT_edge_slide";
+char OP_SEQ_SLIDE[] = "TRANSFORM_OT_seq_slide";
+void TRANSFORM_OT_translate(struct wmOperatorType *ot);
+void TRANSFORM_OT_rotate(struct wmOperatorType *ot);
+void TRANSFORM_OT_tosphere(struct wmOperatorType *ot);
+void TRANSFORM_OT_resize(struct wmOperatorType *ot);
+void TRANSFORM_OT_shear(struct wmOperatorType *ot);
+void TRANSFORM_OT_warp(struct wmOperatorType *ot);
+void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot);
+void TRANSFORM_OT_tilt(struct wmOperatorType *ot);
+void TRANSFORM_OT_trackball(struct wmOperatorType *ot);
+void TRANSFORM_OT_mirror(struct wmOperatorType *ot);
+void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot);
+void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot);
TransformModeItem transform_modes[] =
{
- {OP_TRANSLATION, TFM_TRANSLATION},
- {OP_ROTATION, TFM_ROTATION},
- {OP_TOSPHERE, TFM_TOSPHERE},
- {OP_RESIZE, TFM_RESIZE},
- {OP_SHEAR, TFM_SHEAR},
- {OP_WARP, TFM_WARP},
- {OP_SHRINK_FATTEN, TFM_SHRINKFATTEN},
- {OP_TILT, TFM_TILT},
- {OP_TRACKBALL, TFM_TRACKBALL},
- {OP_MIRROR, TFM_MIRROR},
- {OP_EDGE_SLIDE, TFM_EDGE_SLIDE},
+ {OP_TRANSLATION, TFM_TRANSLATION, TRANSFORM_OT_translate},
+ {OP_ROTATION, TFM_ROTATION, TRANSFORM_OT_rotate},
+ {OP_TOSPHERE, TFM_TOSPHERE, TRANSFORM_OT_tosphere},
+ {OP_RESIZE, TFM_RESIZE, TRANSFORM_OT_resize},
+ {OP_SHEAR, TFM_SHEAR, TRANSFORM_OT_shear},
+ {OP_WARP, TFM_WARP, TRANSFORM_OT_warp},
+ {OP_SHRINK_FATTEN, TFM_SHRINKFATTEN, TRANSFORM_OT_shrink_fatten},
+ {OP_TILT, TFM_TILT, TRANSFORM_OT_tilt},
+ {OP_TRACKBALL, TFM_TRACKBALL, TRANSFORM_OT_trackball},
+ {OP_MIRROR, TFM_MIRROR, TRANSFORM_OT_mirror},
+ {OP_EDGE_SLIDE, TFM_EDGE_SLIDE, TRANSFORM_OT_edge_slide},
+ {OP_SEQ_SLIDE, TFM_SEQ_SLIDE, TRANSFORM_OT_seq_slide},
{NULL, 0}
};
@@ -671,6 +686,26 @@
Properties_Snapping(ot, 0, 0);
}
+void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Sequence Slide";
+ ot->description= "Slide a sequence strip in time.";
+ ot->idname = OP_SEQ_SLIDE;
+ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
+
+ /* api callbacks */
+ ot->invoke = transform_invoke;
+ ot->exec = transform_exec;
+ ot->modal = transform_modal;
+ ot->cancel = transform_cancel;
+ ot->poll = ED_operator_sequencer_active;
+
+ RNA_def_float_vector(ot->srna, "value", 2, VecOne, -FLT_MAX, FLT_MAX, "angle", "", -FLT_MAX, FLT_MAX);
+
+ Properties_Snapping(ot, 0, 0);
+}
+
void TRANSFORM_OT_transform(struct wmOperatorType *ot)
{
static EnumPropertyItem transform_mode_types[] = {
@@ -701,6 +736,7 @@
{TFM_BWEIGHT, "BWEIGHT", 0, "Bweight", ""},
{TFM_ALIGN, "ALIGN", 0, "Align", ""},
{TFM_EDGE_SLIDE, "EDGESLIDE", 0, "Edge Slide", ""},
+ {TFM_SEQ_SLIDE, "SEQSLIDE", 0, "Sequence Slide", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -729,18 +765,14 @@
void transform_operatortypes(void)
{
+ TransformModeItem *tmode;
+
+ for (tmode = transform_modes; tmode->idname; tmode++)
+ {
+ WM_operatortype_append(tmode->opfunc);
+ }
+
WM_operatortype_append(TRANSFORM_OT_transform);
- WM_operatortype_append(TRANSFORM_OT_translate);
- WM_operatortype_append(TRANSFORM_OT_rotate);
- WM_operatortype_append(TRANSFORM_OT_tosphere);
- WM_operatortype_append(TRANSFORM_OT_resize);
- WM_operatortype_append(TRANSFORM_OT_shear);
- WM_operatortype_append(TRANSFORM_OT_warp);
- WM_operatortype_append(TRANSFORM_OT_shrink_fatten);
- WM_operatortype_append(TRANSFORM_OT_tilt);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list