==Sequencer==

Added patch by Matt Ebb, that enhances the sequencer GUI in several ways:
- It looks a lot better
- Strip colours are themeable.
- The drawing code is more readable.
- The background of the timeline makes now distinguishing the channels easier
  by alternating between different shades of gray.
- Handle-scaling is clamped to min and max-values, making it possible to
  grab strips at large zooming levels more easily.
- Preview-images can be panned by dragging it with the middle mouse button.
  Home-Key resets the position.
- Since some people can't grab the meaning of "C 0", it is renamed to "Chan: 0"
- Effect strips have slightly different colors to distinguish them better.

Additionally:
- fixed an off by one error in Matt's patch
- Scene-rendering saves CFRA to avoid jumping current-scene on scrub
  (might be academic fix, since most likely it only happens if you add
  the sequencer-scene to the timeline... But nevertheless it bugs you on
  testing the GUI ;-)
This commit is contained in:
2006-06-08 19:05:58 +00:00
parent f6854b4d8e
commit af3f454cd8
13 changed files with 688 additions and 362 deletions

View File

@@ -37,8 +37,9 @@ struct ScrArea;
struct Sequence;
void drawseqspace(struct ScrArea *sa, void *spacedata);
void drawseq(struct Sequence *seq, struct ScrArea *sa);
void set_special_seq_update(int val);
void seq_viewmove(SpaceSeq *sseq);
void seq_reset_imageofs(SpaceSeq *sseq);
#endif

View File

@@ -466,6 +466,15 @@ enum {
TH_NODE_GENERATOR,
TH_NODE_GROUP,
TH_SEQ_MOVIE,
TH_SEQ_IMAGE,
TH_SEQ_SCENE,
TH_SEQ_AUDIO,
TH_SEQ_EFFECT,
TH_SEQ_PLUGIN,
TH_SEQ_TRANSITION,
TH_SEQ_META,
};
/* XXX WARNING: previous is saved in file, so do not change order! */
@@ -507,6 +516,12 @@ void BIF_GetThemeColor4ubv(int colorid, char *col);
// get a theme color from specified space type
void BIF_GetThemeColorType4ubv(int colorid, int spacetype, char *col);
// blends and shades between two color pointers
void BIF_ColorPtrBlendShade3ubv(char *cp1, char *cp2, float fac, int offset);
// get a 3 byte color, blended and shaded between two other char color pointers
void BIF_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, int offset);
struct ScrArea;

View File

@@ -145,8 +145,9 @@ typedef struct SpaceSeq {
View2D v2d;
float xof, yof; /* offset for drawing the image preview */
short mainb, zoom;
short chanshown;
short chanshown;
short pad2;
int flag;
int pad;

View File

@@ -94,7 +94,10 @@ typedef struct ThemeSpace {
char bpad[2];
char syntaxl[4], syntaxn[4], syntaxb[4]; // syntax for textwindow and nodes
char syntaxv[4], syntaxc[4];
char syntaxv[4], syntaxc[4];
char movie[4], image[4], scene[4], audio[4]; // for sequence editor
char effect[4], plugin[4], transition[4], meta[4];
} ThemeSpace;

View File

@@ -193,6 +193,14 @@ class ThemeSpace:
@ivar syntaxb: theme rgba var.
@ivar syntaxv: theme rgba var.
@ivar syntaxc: theme rgba var.
@ivar movie: theme rgba var.
@ivar image: theme rgba var.
@ivar scene: theme rgba var.
@ivar audio: theme rgba var.
@ivar effect: theme rgba var.
@ivar plugin: theme rgba var.
@ivar transition: theme rgba var.
@ivar meta: theme rgba var.
@type vertex_size: int
@ivar vertex_size: size of the vertices dots on screen in the range [1, 10].
@type facedot_size: int

View File

@@ -179,12 +179,20 @@ static PyObject *ThemeSpace_getAttr( BPy_ThemeSpace * self, char *name )
ELSEIF_TSP_RGBA( syntaxb )
ELSEIF_TSP_RGBA( syntaxv )
ELSEIF_TSP_RGBA( syntaxc )
ELSEIF_TSP_RGBA( movie )
ELSEIF_TSP_RGBA( image )
ELSEIF_TSP_RGBA( scene )
ELSEIF_TSP_RGBA( audio )
ELSEIF_TSP_RGBA( effect )
ELSEIF_TSP_RGBA( plugin )
ELSEIF_TSP_RGBA( transition )
ELSEIF_TSP_RGBA( meta )
else if( !strcmp( name, "vertex_size" ) )
attrib = Py_BuildValue( "i", tsp->vertex_size );
else if( !strcmp( name, "facedot_size" ) )
attrib = Py_BuildValue( "i", tsp->facedot_size );
else if( !strcmp( name, "__members__" ) )
attrib = Py_BuildValue("[sssssssssssssssssssssssssssssssssss]", "theme",
attrib = Py_BuildValue("[sssssssssssssssssssssssssssssssssssssssssss]", "theme",
"back", "text", "text_hi", "header",
"panel", "shade1", "shade2", "hilite",
"grid", "wire", "lamp", "select", "active",
@@ -194,6 +202,7 @@ static PyObject *ThemeSpace_getAttr( BPy_ThemeSpace * self, char *name )
"face_dot", "normal", "bone_solid", "bone_pose",
"strip", "strip_select",
"syntaxl", "syntaxn", "syntaxb", "syntaxv", "syntaxc",
"movie", "image", "scene", "audio", "effect", "plugin", "transition", "meta",
"vertex_size", "facedot_size" );
if( attrib != Py_None )
@@ -244,6 +253,14 @@ static int ThemeSpace_setAttr( BPy_ThemeSpace * self, char *name,
ELSEIF_TSP_RGBA( syntaxb )
ELSEIF_TSP_RGBA( syntaxv )
ELSEIF_TSP_RGBA( syntaxc )
ELSEIF_TSP_RGBA( movie )
ELSEIF_TSP_RGBA( image )
ELSEIF_TSP_RGBA( scene )
ELSEIF_TSP_RGBA( audio )
ELSEIF_TSP_RGBA( effect )
ELSEIF_TSP_RGBA( plugin )
ELSEIF_TSP_RGBA( transition )
ELSEIF_TSP_RGBA( meta )
else if( !strcmp( name, "vertex_size" ) ) {
int val;

File diff suppressed because it is too large Load Diff

View File

@@ -53,6 +53,7 @@
#include "DNA_space_types.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "BIF_drawseq.h"
#include "BIF_interface.h"
#include "BIF_resources.h"
#include "BIF_screen.h"
@@ -436,15 +437,20 @@ static uiBlock *seq_editmenu(void *arg_unused)
void do_seq_buttons(short event)
{
Editing *ed;
SpaceSeq *sseq= curarea->spacedata.first;
ed= G.scene->ed;
if(ed==0) return;
switch(event) {
case B_SEQHOME:
G.v2d->cur= G.v2d->tot;
test_view2d(G.v2d, curarea->winx, curarea->winy);
view2d_do_locks(curarea, V2D_LOCK_COPY);
if(sseq->mainb)
seq_reset_imageofs(sseq);
else {
G.v2d->cur= G.v2d->tot;
test_view2d(G.v2d, curarea->winx, curarea->winy);
view2d_do_locks(curarea, V2D_LOCK_COPY);
}
scrarea_queue_winredraw(curarea);
break;
case B_SEQCLEAR:
@@ -514,15 +520,6 @@ void seq_buttons()
uiBlockSetEmboss(block, UI_EMBOSS);
}
/* CHANNEL shown in 3D preview */
uiDefButS(block, NUM, B_REDR, "C",
xco += XIC, 0, 3.5 * XIC,YIC,
&sseq->chanshown, 0, MAXSEQ, 0, 0,
"Channel shown in 3D preview. Click to change.");
xco+= 8;
xco += 3.5*XIC;
/* IMAGE */
uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_SEQ_SEQUENCER,
"Image Preview: %t"
@@ -533,11 +530,24 @@ void seq_buttons()
xco,0,XIC+10,YIC, &sseq->mainb, 0.0, 3.0,
0, 0,
"Shows the sequence output image preview");
xco+=10;
xco+= 8 + XIC+10;
/* CHANNEL shown in 3D preview */
if(sseq->mainb) {
uiDefButS(block, NUM, B_REDR, "Chan:",
xco, 0, 3.5 * XIC,YIC,
&sseq->chanshown, 0, MAXSEQ, 0, 0,
"The channel number shown in the image preview. 0 is the result of all strips combined.");
xco+= 8 + XIC*3.5;
}
/* ZOOM and BORDER */
xco+= 16;
xco+= 8;
uiBlockBeginAlign(block);
uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM, xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view in and out (Ctrl MiddleMouse)");
uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM, xco,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view in and out (Ctrl MiddleMouse)");
uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to fit area");
uiBlockEndAlign(block);

View File

@@ -188,10 +188,10 @@ static void ui_draw_icon(uiBut *but, BIFIconID icon)
xs= but->x1+1.0;
}
else if ((but->type==ICONROW) || (but->type==ICONTEXTROW)) {
xs= but->x1+4.0;
xs= but->x1+3.0;
}
else {
xs= but->x1+6.0;
xs= but->x1+4.0;
}
ys= (but->y1+but->y2- height)/2.0;
}

View File

@@ -290,6 +290,23 @@ char *BIF_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case TH_NODE_GROUP:
cp= ts->syntaxc; break;
case TH_SEQ_MOVIE:
cp= ts->movie; break;
case TH_SEQ_IMAGE:
cp= ts->image; break;
case TH_SEQ_SCENE:
cp= ts->scene; break;
case TH_SEQ_AUDIO:
cp= ts->audio; break;
case TH_SEQ_EFFECT:
cp= ts->effect; break;
case TH_SEQ_PLUGIN:
cp= ts->plugin; break;
case TH_SEQ_TRANSITION:
cp= ts->transition; break;
case TH_SEQ_META:
cp= ts->meta; break;
}
}
@@ -437,7 +454,16 @@ void BIF_InitTheme(void)
/* space seq */
btheme->tseq= btheme->tv3d;
SETCOL(btheme->tnla.back, 116, 116, 116, 255);
SETCOL(btheme->tseq.back, 116, 116, 116, 255);
SETCOL(btheme->tseq.movie, 81, 105, 135, 255);
SETCOL(btheme->tseq.image, 109, 88, 129, 255);
SETCOL(btheme->tseq.scene, 78, 152, 62, 255);
SETCOL(btheme->tseq.audio, 46, 143, 143, 255);
SETCOL(btheme->tseq.effect, 169, 84, 124, 255);
SETCOL(btheme->tseq.plugin, 126, 126, 80, 255);
SETCOL(btheme->tseq.transition, 162, 95, 111, 255);
SETCOL(btheme->tseq.meta, 109, 145, 131, 255);
/* space image */
btheme->tima= btheme->tv3d;
@@ -598,6 +624,15 @@ char *BIF_ThemeColorsPup(int spacetype)
case SPACE_SEQ:
str += sprintf(str, "Grid %%x%d|", TH_GRID);
str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1);
str += sprintf(str, "%%l|");
str += sprintf(str, "Movie Strip %%x%d|", TH_SEQ_MOVIE);
str += sprintf(str, "Image Strip %%x%d|", TH_SEQ_IMAGE);
str += sprintf(str, "Scene Strip %%x%d|", TH_SEQ_SCENE);
str += sprintf(str, "Audio Strip %%x%d|", TH_SEQ_AUDIO);
str += sprintf(str, "Effect Strip %%x%d|", TH_SEQ_EFFECT);
str += sprintf(str, "Plugin Strip %%x%d|", TH_SEQ_PLUGIN);
str += sprintf(str, "Transition Strip %%x%d|", TH_SEQ_TRANSITION);
str += sprintf(str, "Meta Strip %%x%d|", TH_SEQ_META);
break;
case SPACE_SOUND:
str += sprintf(str, "Grid %%x%d|", TH_GRID);
@@ -743,7 +778,6 @@ void BIF_ThemeColorBlendShade(int colorid1, int colorid2, float fac, int offset)
glColor3ub(r, g, b);
}
// get individual values, not scaled
float BIF_GetThemeValuef(int colorid)
{
@@ -809,3 +843,39 @@ void BIF_GetThemeColorType4ubv(int colorid, int spacetype, char *col)
col[2]= cp[2];
col[3]= cp[3];
}
// blends and shades between two char color pointers
void BIF_ColorPtrBlendShade3ubv(char *cp1, char *cp2, float fac, int offset)
{
int r, g, b;
if(fac<0.0) fac=0.0; else if(fac>1.0) fac= 1.0;
r= offset+floor((1.0-fac)*cp1[0] + fac*cp2[0]);
g= offset+floor((1.0-fac)*cp1[1] + fac*cp2[1]);
b= offset+floor((1.0-fac)*cp1[2] + fac*cp2[2]);
r= r<0?0:(r>255?255:r);
g= g<0?0:(g>255?255:g);
b= b<0?0:(b>255?255:b);
glColor3ub(r, g, b);
}
// get a 3 byte color, blended and shaded between two other char color pointers
void BIF_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, int offset)
{
int r, g, b;
if(fac<0.0) fac=0.0; else if(fac>1.0) fac= 1.0;
r= offset+floor((1.0-fac)*cp1[0] + fac*cp2[0]);
g= offset+floor((1.0-fac)*cp1[1] + fac*cp2[1]);
b= offset+floor((1.0-fac)*cp1[2] + fac*cp2[2]);
r= r<0?0:(r>255?255:r);
g= g<0?0:(g>255?255:g);
b= b<0?0:(b>255?255:b);
col[0] = r;
col[1] = g;
col[2] = b;
}

View File

@@ -887,6 +887,7 @@ static void do_build_seq_ibuf(Sequence * seq, int cfra)
}
}
else if(seq->type==SEQ_SCENE && se->ibuf==0 && seq->scene) { // scene can be NULL after deletions
int oldcfra = CFRA;
Scene *sce= seq->scene, *oldsce= G.scene;
Render *re= RE_NewRender(sce->id.name);
RenderResult rres;
@@ -918,6 +919,7 @@ static void do_build_seq_ibuf(Sequence * seq, int cfra)
if((G.f & G_PLAYANIM)==0) /* bad, is set on do_render_seq */
waitcursor(0);
CFRA = oldcfra;
}
/* size test */

View File

@@ -3656,8 +3656,8 @@ static void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
break;
case MIDDLEMOUSE:
if(sseq->mainb) break;
view2dmove(event); /* in drawipo.c */
if(sseq->mainb) seq_viewmove(sseq);
else view2dmove(event); /* in drawipo.c */
break;
case RIGHTMOUSE:
if(sseq->mainb) break;

View File

@@ -291,6 +291,16 @@ static void init_userdef_file(void)
SETCOL(btheme->tv3d.group, 0x10, 0x40, 0x10, 255);
SETCOL(btheme->tv3d.group_active, 0x66, 0xFF, 0x66, 255);
}
if(btheme->tseq.movie[3]==0) {
SETCOL(btheme->tseq.movie, 81, 105, 135, 255);
SETCOL(btheme->tseq.image, 109, 88, 129, 255);
SETCOL(btheme->tseq.scene, 78, 152, 62, 255);
SETCOL(btheme->tseq.audio, 46, 143, 143, 255);
SETCOL(btheme->tseq.effect, 169, 84, 124, 255);
SETCOL(btheme->tseq.plugin, 126, 126, 80, 255);
SETCOL(btheme->tseq.transition, 162, 95, 111, 255);
SETCOL(btheme->tseq.meta, 109, 145, 131, 255);
}
}
/* set defaults for 3D View rotating axis indicator */