UI goodies & cleanup
- TimeLine: Marker grabbing works now. Use GKEY or select+drag, as usual Holding CTRL will step with 1 second (corrected for ntsc dudes yes!) Also added this in header pulldown - Time values and Time grid draw fixed for Seconds display. It used to draw steps of 2/5/10/20/50/100 etc. frames. Now does steps in seconds. Again corrected for "Frames/Sec" value. - "Frames/Sec" button redraws TimeLine, Secquencer, etc - Bug fixed in editing Theme for TimeLine (was editing Image Select...) - Added Grid color to Theme choices for Ipo, TimeLine, Sequencer, NLA, Action, Sound. Was missing!
This commit is contained in:
@@ -42,7 +42,7 @@ void select_timeline_markers(void);
|
||||
void timeline_frame_to_center(void);
|
||||
void nextprev_timeline_key(short dir);
|
||||
void nextprev_timeline_marker(short dir);
|
||||
|
||||
void timeline_grab(int mode, int smode);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1214,7 +1214,7 @@ static void render_panel_format(void)
|
||||
} else {
|
||||
uiDefButS(block, NUM,B_DIFF, "Quality:", 892,yofs,112,20, &G.scene->r.quality, 10.0, 100.0, 0, 0, "Quality setting for JPEG images, AVI Jpeg and SGI movies");
|
||||
}
|
||||
uiDefButS(block, NUM,REDRAWALL,"Frs/sec:", 1006,yofs,113,20, &G.scene->r.frs_sec, 1.0, 120.0, 100.0, 0, "Frames per second");
|
||||
uiDefButS(block, NUM,B_RTCHANGED,"Frs/sec:", 1006,yofs,113,20, &G.scene->r.frs_sec, 1.0, 120.0, 100.0, 0, "Frames per second");
|
||||
|
||||
|
||||
uiBlockBeginAlign(block);
|
||||
@@ -1405,7 +1405,7 @@ void anim_panels()
|
||||
uiDefButS(block, NUM,B_FRAMEMAP,"Map Old:", 320,69,93,22,&G.scene->r.framapto,1.0,900.0, 0, 0, "Specify old mapping value in frames");
|
||||
uiDefButS(block, NUM,B_FRAMEMAP,"Map New:", 416,69,95,22,&G.scene->r.images,1.0,900.0, 0, 0, "Specify how many frames the Map Old will last");
|
||||
|
||||
uiDefButS(block, NUM,REDRAWSEQ,"Frs/sec:", 320,47,93,19, &G.scene->r.frs_sec, 1.0, 120.0, 100.0, 0, "Frames per second");
|
||||
uiDefButS(block, NUM,B_RTCHANGED,"Frs/sec:", 320,47,93,19, &G.scene->r.frs_sec, 1.0, 120.0, 100.0, 0, "Frames per second");
|
||||
|
||||
uiDefButS(block, TOG|BIT|1, B_SOUND_CHANGED, "Sync", 416,47,95,19, &G.scene->audio.flag, 0, 0, 0, 0, "Use sample clock for syncing animation to audio");
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ static void scroll_prstr(float x, float y, float val, char dir, int disptype)
|
||||
else macht= ipomachtx;
|
||||
|
||||
if (macht<=0) sprintf(str, "%.*f", 1-macht, val);
|
||||
else sprintf(str, "%d", (int)val);
|
||||
else sprintf(str, "%d", (int)floor(val + 0.375));
|
||||
|
||||
len= strlen(str);
|
||||
if(dir=='h') x-= 4*len;
|
||||
@@ -136,7 +136,7 @@ static void step_to_grid(float *step, int *macht)
|
||||
|
||||
loga= log10(*step);
|
||||
*macht= (int)(loga);
|
||||
|
||||
|
||||
rem= loga- *macht;
|
||||
rem= pow(10.0, rem);
|
||||
|
||||
@@ -146,6 +146,8 @@ static void step_to_grid(float *step, int *macht)
|
||||
else rem= 1.0;
|
||||
|
||||
*step= rem*pow(10.0, (float)*macht);
|
||||
|
||||
if(rem==1.0) (*macht)++; // prevents printing 1.0 2.0 3.0 etc
|
||||
}
|
||||
else {
|
||||
if(rem < 2.0) rem= 2.0;
|
||||
@@ -155,24 +157,34 @@ static void step_to_grid(float *step, int *macht)
|
||||
*step= rem*pow(10.0, (float)*macht);
|
||||
|
||||
(*macht)++;
|
||||
if(rem==10.0) (*macht)++; // prevents printing 1.0 2.0 3.0 etc
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void calc_ipogrid()
|
||||
{
|
||||
float space, pixels;
|
||||
|
||||
float space, pixels, secondiv=1.0;
|
||||
int secondgrid= 0;
|
||||
/* rule: gridstep is minimal IPOSTEP pixels */
|
||||
/* how large is IPOSTEP pixels? */
|
||||
|
||||
if(G.v2d==0) return;
|
||||
|
||||
/* detect of we have seconds or frames, should become argument */
|
||||
if(curarea->spacetype==SPACE_TIME) {
|
||||
SpaceTime *stime= curarea->spacedata.first;
|
||||
if(!(stime->flag & TIME_DRAWFRAMES)) {
|
||||
secondgrid= 1;
|
||||
secondiv= 0.01 * (float)G.scene->r.frs_sec;
|
||||
}
|
||||
}
|
||||
|
||||
space= G.v2d->cur.xmax - G.v2d->cur.xmin;
|
||||
pixels= G.v2d->mask.xmax-G.v2d->mask.xmin;
|
||||
|
||||
ipogrid_dx= IPOSTEP*space/pixels;
|
||||
ipogrid_dx= IPOSTEP*space/(secondiv*pixels);
|
||||
step_to_grid(&ipogrid_dx, &ipomachtx);
|
||||
ipogrid_dx*= secondiv;
|
||||
|
||||
if ELEM3(curarea->spacetype, SPACE_SEQ, SPACE_SOUND, SPACE_TIME) {
|
||||
if(ipogrid_dx < 0.1) ipogrid_dx= 0.1;
|
||||
@@ -190,8 +202,9 @@ void calc_ipogrid()
|
||||
if(ipomachty<1) ipomachty= 1;
|
||||
}
|
||||
|
||||
ipogrid_startx= G.v2d->cur.xmin-fmod(G.v2d->cur.xmin, ipogrid_dx);
|
||||
ipogrid_startx= secondiv*(G.v2d->cur.xmin/secondiv - fmod(G.v2d->cur.xmin/secondiv, ipogrid_dx/secondiv));
|
||||
if(G.v2d->cur.xmin<0.0) ipogrid_startx-= ipogrid_dx;
|
||||
|
||||
ipogrid_starty= (G.v2d->cur.ymin-fmod(G.v2d->cur.ymin, ipogrid_dy));
|
||||
if(G.v2d->cur.ymin<0.0) ipogrid_starty-= ipogrid_dy;
|
||||
|
||||
@@ -208,8 +221,7 @@ void draw_ipogrid(void)
|
||||
|
||||
step= (G.v2d->mask.xmax-G.v2d->mask.xmin+1)/IPOSTEP;
|
||||
|
||||
if ELEM(curarea->spacetype, SPACE_SOUND, SPACE_TIME) glColor3ub(0x70, 0x70, 0x60);
|
||||
else BIF_ThemeColor(TH_GRID);
|
||||
BIF_ThemeColor(TH_GRID);
|
||||
|
||||
for(a=0; a<step; a++) {
|
||||
glBegin(GL_LINE_STRIP);
|
||||
@@ -220,8 +232,7 @@ void draw_ipogrid(void)
|
||||
|
||||
vec2[0]= vec1[0]-= 0.5*ipogrid_dx;
|
||||
|
||||
if ELEM(curarea->spacetype, SPACE_SOUND, SPACE_TIME) glColor3ub(0x80, 0x80, 0x70);
|
||||
else BIF_ThemeColorShade(TH_GRID, 16);
|
||||
BIF_ThemeColorShade(TH_GRID, 16);
|
||||
|
||||
step++;
|
||||
for(a=0; a<=step; a++) {
|
||||
@@ -661,6 +672,7 @@ void draw_view2d_numbers_horiz(int drawframes)
|
||||
float fac, fac2, dfac, val;
|
||||
|
||||
/* the numbers: convert ipogrid_startx and -dx to scroll coordinates */
|
||||
|
||||
fac= (ipogrid_startx- G.v2d->cur.xmin)/(G.v2d->cur.xmax-G.v2d->cur.xmin);
|
||||
fac= G.v2d->mask.xmin+fac*(G.v2d->mask.xmax-G.v2d->mask.xmin);
|
||||
|
||||
@@ -683,7 +695,6 @@ void draw_view2d_numbers_horiz(int drawframes)
|
||||
fac+= dfac;
|
||||
val+= ipogrid_dx;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -69,6 +69,8 @@
|
||||
#include "BSE_headerbuttons.h"
|
||||
#include "BSE_time.h"
|
||||
|
||||
#include "BDR_editobject.h"
|
||||
|
||||
#include "blendef.h"
|
||||
|
||||
#include "mydevice.h"
|
||||
@@ -328,6 +330,101 @@ void timeline_frame_to_center(void)
|
||||
scrarea_queue_winredraw(curarea);
|
||||
}
|
||||
|
||||
void timeline_grab(int mode, int smode) // mode and smode unused here, for callback
|
||||
{
|
||||
SpaceTime *stime= curarea->spacedata.first;
|
||||
TimeMarker *marker, *selmarker=NULL;
|
||||
float dx, fac;
|
||||
int a, ret_val= 0, totmark=0, *oldframe, offs, firsttime=1;
|
||||
unsigned short event;
|
||||
short val, pmval[2], mval[2];
|
||||
char str[32];
|
||||
|
||||
for(marker= G.scene->markers.first; marker; marker= marker->next) {
|
||||
if(marker->flag & SELECT) totmark++;
|
||||
}
|
||||
if(totmark==0) return;
|
||||
|
||||
oldframe= MEM_mallocN(totmark*sizeof(int), "marker array");
|
||||
for(a=0, marker= G.scene->markers.first; marker; marker= marker->next) {
|
||||
if(marker->flag & SELECT) {
|
||||
oldframe[a]= marker->frame;
|
||||
selmarker= marker; // used for hederprint
|
||||
a++;
|
||||
}
|
||||
}
|
||||
|
||||
dx= G.v2d->mask.xmax-G.v2d->mask.xmin;
|
||||
dx= (G.v2d->cur.xmax-G.v2d->cur.xmin)/dx;
|
||||
|
||||
getmouseco_areawin(pmval);
|
||||
|
||||
while(ret_val == 0) {
|
||||
|
||||
getmouseco_areawin(mval);
|
||||
|
||||
if (mval[0] != pmval[0] || firsttime) {
|
||||
firsttime= 0;
|
||||
|
||||
fac= (((float)(mval[0] - pmval[0]))*dx);
|
||||
|
||||
apply_keyb_grid(&fac, 0.0, (float)G.scene->r.frs_sec, 0.1*(float)G.scene->r.frs_sec, 0);
|
||||
offs= (int)fac;
|
||||
|
||||
for(a=0, marker= G.scene->markers.first; marker; marker= marker->next) {
|
||||
if(marker->flag & SELECT) {
|
||||
marker->frame= oldframe[a] + offs;
|
||||
a++;
|
||||
}
|
||||
}
|
||||
|
||||
if(totmark==1) { // we print current marker value
|
||||
if(stime->flag & TIME_DRAWFRAMES)
|
||||
sprintf(str, "Marker %d offset %d", selmarker->frame, offs);
|
||||
else
|
||||
sprintf(str, "Marker %.2f offset %.2f", (selmarker->frame/(float)G.scene->r.frs_sec), (offs/(float)G.scene->r.frs_sec));
|
||||
}
|
||||
else {
|
||||
if(stime->flag & TIME_DRAWFRAMES)
|
||||
sprintf(str, "Marker offset %d ", offs);
|
||||
else
|
||||
sprintf(str, "Marker offset %.2f ", (offs/(float)G.scene->r.frs_sec));
|
||||
}
|
||||
headerprint(str);
|
||||
|
||||
force_draw(0); // areas identical to this, 0 = no header
|
||||
}
|
||||
|
||||
/* essential for idling subloop */
|
||||
if( qtest()==0) PIL_sleep_ms(2);
|
||||
|
||||
/* emptying queue and reading events */
|
||||
while( qtest() ) {
|
||||
event= extern_qread(&val);
|
||||
|
||||
if(val) {
|
||||
if(event==ESCKEY || event==RIGHTMOUSE) ret_val= 2;
|
||||
else if(event==LEFTMOUSE || event==RETKEY || event==SPACEKEY) ret_val= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* restore? */
|
||||
if(ret_val==2) {
|
||||
for(a=0, marker= G.scene->markers.first; marker; marker= marker->next) {
|
||||
if(marker->flag & SELECT) {
|
||||
marker->frame= oldframe[a];
|
||||
a++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
BIF_undo_push("Move Markers");
|
||||
}
|
||||
MEM_freeN(oldframe);
|
||||
allqueue(REDRAWTIME, 0);
|
||||
}
|
||||
|
||||
/* ***************************** */
|
||||
|
||||
/* Right. Now for some implementation: */
|
||||
@@ -396,8 +493,9 @@ void winqreadtimespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
||||
select_timeline_marker_frame(cfra, 1);
|
||||
else
|
||||
select_timeline_marker_frame(cfra, 0);
|
||||
|
||||
doredraw= 1;
|
||||
|
||||
force_draw(0);
|
||||
std_rmouse_transform(timeline_grab);
|
||||
|
||||
break;
|
||||
case MIDDLEMOUSE:
|
||||
@@ -450,7 +548,8 @@ void winqreadtimespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
||||
case CKEY:
|
||||
timeline_frame_to_center();
|
||||
break;
|
||||
case GKEY: /* move marker ... not yet implemented */
|
||||
case GKEY: /* move marker */
|
||||
timeline_grab('g', 0);
|
||||
break;
|
||||
case EKEY: /* set end frame */
|
||||
G.scene->r.efra = CFRA;
|
||||
|
||||
@@ -211,6 +211,9 @@ static void do_time_framemenu(void *arg, int event)
|
||||
case 5: /* Rename Marker */
|
||||
rename_timeline_marker();
|
||||
break;
|
||||
case 6: /* Grab Marker */
|
||||
timeline_grab('g', 0);
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWTIME, 0);
|
||||
}
|
||||
@@ -230,6 +233,8 @@ static uiBlock *time_framemenu(void *arg_unused)
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Name Marker|Ctrl M", 0, yco-=20,
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/move Marker|G", 0, yco-=20,
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
|
||||
@@ -750,6 +750,7 @@ char *BIF_ThemeColorsPup(int spacetype)
|
||||
else if(spacetype==SPACE_IPO) {
|
||||
sprintf(str, "Panel %%x%d|", TH_PANEL); strcat(cp, str);
|
||||
strcat(cp,"%l|");
|
||||
sprintf(str, "Grid %%x%d|", TH_GRID); strcat(cp, str);
|
||||
sprintf(str, "Window Sliders %%x%d|", TH_SHADE1); strcat(cp, str);
|
||||
sprintf(str, "Ipo Channels %%x%d|", TH_SHADE2); strcat(cp, str);
|
||||
sprintf(str, "Vertex %%x%d|", TH_VERTEX); strcat(cp, str);
|
||||
@@ -761,6 +762,7 @@ char *BIF_ThemeColorsPup(int spacetype)
|
||||
else if(spacetype==SPACE_NLA) {
|
||||
//sprintf(str, "Panel %%x%d|", TH_PANEL); strcat(cp, str);
|
||||
strcat(cp,"%l|");
|
||||
sprintf(str, "Grid %%x%d|", TH_GRID); strcat(cp, str);
|
||||
sprintf(str, "View Sliders %%x%d|", TH_SHADE1); strcat(cp, str);
|
||||
sprintf(str, "Bars %%x%d|", TH_SHADE2); strcat(cp, str);
|
||||
sprintf(str, "Bars selected %%x%d|", TH_HILITE); strcat(cp, str);
|
||||
@@ -768,6 +770,7 @@ char *BIF_ThemeColorsPup(int spacetype)
|
||||
else if(spacetype==SPACE_ACTION) {
|
||||
//sprintf(str, "Panel %%x%d|", TH_PANEL); strcat(cp, str);
|
||||
strcat(cp,"%l|");
|
||||
sprintf(str, "Grid %%x%d|", TH_GRID); strcat(cp, str);
|
||||
sprintf(str, "RVK Sliders %%x%d|", TH_FACE); strcat(cp, str);
|
||||
sprintf(str, "View Sliders %%x%d|", TH_SHADE1); strcat(cp, str);
|
||||
sprintf(str, "Channels %%x%d|", TH_SHADE2); strcat(cp, str);
|
||||
@@ -782,9 +785,11 @@ char *BIF_ThemeColorsPup(int spacetype)
|
||||
sprintf(str, "Face Selected %%x%d", TH_FACE_SELECT); strcat(cp, str);
|
||||
}
|
||||
else if(spacetype==SPACE_SEQ) {
|
||||
sprintf(str, "Grid %%x%d|", TH_GRID); strcat(cp, str);
|
||||
sprintf(str, "Window Sliders %%x%d|", TH_SHADE1); strcat(cp, str);
|
||||
}
|
||||
else if(spacetype==SPACE_SOUND) {
|
||||
sprintf(str, "Grid %%x%d|", TH_GRID); strcat(cp, str);
|
||||
sprintf(str, "Window Slider %%x%d|", TH_SHADE1); strcat(cp, str);
|
||||
}
|
||||
else if(spacetype==SPACE_BUTS) {
|
||||
@@ -800,6 +805,9 @@ char *BIF_ThemeColorsPup(int spacetype)
|
||||
strcat(cp,"%l|");
|
||||
sprintf(str, "Bracket Matching %%x%d|", TH_BRACKET); strcat(cp, str);
|
||||
}
|
||||
else if(spacetype==SPACE_TIME) {
|
||||
sprintf(str, "Grid %%x%d|", TH_GRID); strcat(cp, str);
|
||||
}
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
@@ -2177,7 +2177,7 @@ static void info_user_themebuts(uiBlock *block, short y1, short y2, short y3)
|
||||
else if(curmain==12) spacetype= SPACE_BUTS;
|
||||
else if(curmain==13) spacetype= SPACE_FILE;
|
||||
else if(curmain==14) spacetype= SPACE_IMASEL;
|
||||
else if(curmain==15) spacetype= SPACE_IMASEL;
|
||||
else if(curmain==15) spacetype= SPACE_TIME;
|
||||
else return; // only needed while coding... when adding themes for more windows
|
||||
|
||||
/* color choices pup */
|
||||
@@ -4796,7 +4796,7 @@ void allspace(unsigned short event, short val)
|
||||
/* if header==1, then draw header for curarea too. Excepption for headerprint()... */
|
||||
void force_draw(int header)
|
||||
{
|
||||
/* draws alle areas that something identical to curarea */
|
||||
/* draws all areas that show something identical to curarea */
|
||||
extern int afterqtest(short win, unsigned short evt); //editscreen.c
|
||||
ScrArea *tempsa, *sa;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user