==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:
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user