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:
Ton Roosendaal
2005-05-08 11:24:46 +00:00
parent 74ec3d4f51
commit 744bb6f19a
7 changed files with 143 additions and 20 deletions

View File

@@ -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

View File

@@ -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");

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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, "");

View File

@@ -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;
}

View File

@@ -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;