[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12238] trunk/blender/source/blender: Sequence editor,
Campbell Barton
cbarton at metavr.com
Tue Oct 9 01:38:51 CEST 2007
Revision: 12238
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12238
Author: campbellbarton
Date: 2007-10-09 01:38:50 +0200 (Tue, 09 Oct 2007)
Log Message:
-----------
Sequence editor,
rewrote the part that deals with moving the strips on the X axis - only user visible functionality is that you can move the seq bounds in one step now.
internally added macro's to make dealing with sequence's less touble.
Modified Paths:
--------------
trunk/blender/source/blender/include/BIF_editseq.h
trunk/blender/source/blender/src/drawseq.c
trunk/blender/source/blender/src/editseq.c
Modified: trunk/blender/source/blender/include/BIF_editseq.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editseq.h 2007-10-08 22:17:51 UTC (rev 12237)
+++ trunk/blender/source/blender/include/BIF_editseq.h 2007-10-08 23:38:50 UTC (rev 12238)
@@ -71,6 +71,40 @@
void select_neighbor_from_last(int lr);
struct Sequence* alloc_sequence(ListBase *lb, int cfra, int machine); /*used from python*/
+#define SEQ_DEBUG_INFO(seq) printf("seq into '%s' -- len:%i start:%i startstill:%i endstill:%i startofs:%i endofs:%i\n",\
+ seq->name, seq->len, seq->start, seq->startstill, seq->endstill, seq->startofs, seq->endofs)
+
+/* seq macro's for transform
+ notice the difference between start/end and left/right.
+
+ left and right are the bounds at which the setuence is rendered,
+start and end are from the start and fixed length of the sequence.
+*/
+
+#define SEQ_GET_START(seq) (seq->start)
+#define SEQ_GET_END(seq) (seq->start+seq->len)
+
+#define SEQ_GET_FINAL_LEFT(seq) ((seq->start - seq->startstill) + seq->startofs)
+#define SEQ_GET_FINAL_RIGHT(seq) (((seq->start+seq->len) + seq->endstill) - seq->endofs)
+
+#define SEQ_SET_FINAL_LEFT(seq, val) \
+ if (val < (seq)->start) { \
+ (seq)->startstill = -((seq)->start - val); \
+ (seq)->startofs = 0; \
+} else { \
+ (seq)->startofs = (val - (seq)->start); \
+ (seq)->startstill = 0; \
+}
+
+#define SEQ_SET_FINAL_RIGHT(seq, val) \
+ if (val > (seq)->start + (seq)->len) { \
+ (seq)->endstill = (val - ((seq)->start + (seq)->len)); \
+ (seq)->endofs = 0; \
+} else { \
+ (seq)->endofs = -(val - ((seq)->start + (seq)->len)); \
+ (seq)->endstill = 0; \
+}
+
/* drawseq.c */
void do_seqbuttons(short);
Modified: trunk/blender/source/blender/src/drawseq.c
===================================================================
--- trunk/blender/source/blender/src/drawseq.c 2007-10-08 22:17:51 UTC (rev 12237)
+++ trunk/blender/source/blender/src/drawseq.c 2007-10-08 23:38:50 UTC (rev 12238)
@@ -741,10 +741,10 @@
if(x2<G.v2d->cur.xmin) x2= G.v2d->cur.xmin;
else if(x2>G.v2d->cur.xmax) x2= G.v2d->cur.xmax;
+ /* nice text here would require changing the view matrix for texture text */
if(x1 != x2) {
draw_seq_text(seq, x1, x2, y1, y2);
}
-
}
static Sequence *special_seq_update= 0;
Modified: trunk/blender/source/blender/src/editseq.c
===================================================================
--- trunk/blender/source/blender/src/editseq.c 2007-10-08 22:17:51 UTC (rev 12237)
+++ trunk/blender/source/blender/src/editseq.c 2007-10-08 23:38:50 UTC (rev 12238)
@@ -137,12 +137,41 @@
_last_seq_init = 1;
}
-void clear_last_seq()
+void clear_last_seq(Sequence *seq)
{
_last_seq = NULL;
_last_seq_init = 0;
}
+/* used so we can do a quick check for single image seq
+ since they work a bit differently to normal image seq's (during transform) */
+static int check_single_image_seq(Sequence *seq)
+{
+ if (seq->type == SEQ_IMAGE && seq->len == 1 )
+ return 1;
+ else
+ return 0;
+}
+
+static void fix_single_image_seq(Sequence *seq)
+{
+ if (!check_single_image_seq(seq))
+ return;
+
+ /* locks image to the start */
+ if (seq->startstill != 0) {
+ seq->endstill += seq->startstill;
+ seq->start -= seq->startstill;
+ seq->startstill = 0;
+ }
+
+
+
+
+}
+
+
+
static void change_plugin_seq(char *str) /* called from fileselect */
{
struct SeqEffectHandle sh;
@@ -2515,57 +2544,43 @@
ix= floor(dvec[0]+0.5);
iy= floor(dvec[1]+0.5);
-
ts= transmain;
WHILE_SEQ(ed->seqbasep) {
if(seq->flag & SELECT) {
+ int myofs;
+ //SEQ_DEBUG_INFO(seq);
if(seq->flag & SEQ_LEFTSEL) {
- if(ts->startstill) {
- seq->startstill= ts->startstill-ix;
- if(seq->startstill<0) seq->startstill= 0;
+ myofs = (ts->startofs - ts->startstill);
+ SEQ_SET_FINAL_LEFT(seq, ts->start + (myofs + ix));
+ if (SEQ_GET_FINAL_LEFT(seq) >= SEQ_GET_FINAL_RIGHT(seq)) {
+ SEQ_SET_FINAL_LEFT(seq, SEQ_GET_FINAL_RIGHT(seq)-1);
}
- else if(ts->startofs) {
- seq->startofs= ts->startofs+ix;
- if(seq->startofs<0) seq->startofs= 0;
- }
- else {
- if(ix>0) {
- seq->startofs= ix;
- seq->startstill= 0;
+ //if (check_single_image_seq(seq)==0) {
+ if (SEQ_GET_FINAL_LEFT(seq) >= SEQ_GET_END(seq)) {
+ SEQ_SET_FINAL_LEFT(seq, SEQ_GET_END(seq)-1);
}
- else if (seq->type != SEQ_RAM_SOUND && seq->type != SEQ_HD_SOUND) {
- seq->startstill= -ix;
- seq->startofs= 0;
- }
- }
- if(seq->len <= seq->startofs+seq->endofs) {
- seq->startofs= seq->len-seq->endofs-1;
- }
+ //}
}
if(seq->flag & SEQ_RIGHTSEL) {
- if(ts->endstill) {
- seq->endstill= ts->endstill+ix;
- if(seq->endstill<0) seq->endstill= 0;
+ myofs = (ts->endstill - ts->endofs);
+ SEQ_SET_FINAL_RIGHT(seq, ts->start + seq->len + (myofs + ix));
+ if (SEQ_GET_FINAL_RIGHT(seq) <= SEQ_GET_FINAL_LEFT(seq)) {
+ SEQ_SET_FINAL_RIGHT(seq, SEQ_GET_FINAL_LEFT(seq)+1);
}
- else if(ts->endofs) {
- seq->endofs= ts->endofs-ix;
- if(seq->endofs<0) seq->endofs= 0;
- }
- else {
- if(ix<0) {
- seq->endofs= -ix;
- seq->endstill= 0;
+
+ //if (check_single_image_seq(seq)==0) {
+ if (SEQ_GET_FINAL_RIGHT(seq) <= SEQ_GET_START(seq)) {
+ SEQ_SET_FINAL_RIGHT(seq, SEQ_GET_START(seq)+1);
}
- else if (seq->type != SEQ_RAM_SOUND && seq->type != SEQ_HD_SOUND) {
- seq->endstill= ix;
- seq->endofs= 0;
- }
- }
- if(seq->len <= seq->startofs+seq->endofs) {
- seq->endofs= seq->len-seq->startofs-1;
- }
+ //}
}
+
+ if (seq->type == SEQ_RAM_SOUND || seq->type == SEQ_HD_SOUND) {
+ seq->startstill= 0;
+ seq->endstill= 0;
+ }
+
if( (seq->flag & (SEQ_LEFTSEL+SEQ_RIGHTSEL))==0 ) {
if(sequence_is_free_transformable(seq)) seq->start= ts->start+ ix;
@@ -2666,6 +2681,12 @@
/* images, effects and overlap */
WHILE_SEQ(ed->seqbasep) {
+
+ /* fixes single image strips - makes sure their start is not out of bounds
+ ideally this would be done during transform since data is rendered at that time
+ however it ends up being a lot messier! - Campbell */
+ //fix_single_image_seq(seq);
+
if(seq->type == SEQ_META) {
calc_sequence(seq);
seq->flag &= ~SEQ_OVERLAP;
More information about the Bf-blender-cvs
mailing list