add support for scrubbing with the mouse

This commit is contained in:
Campbell Barton
2012-07-03 22:58:43 +00:00
parent c1493432a3
commit e505ab8ad2

View File

@@ -239,17 +239,23 @@ static void toscreen(PlayAnimPict *picture, struct ImBuf *ibuf, int fontid)
pupdate_time();
if (picture && (qualN & (SHIFT | LMOUSE)) && (fontid != -1)) {
int sizex, sizey;
float fsizex_inv, fsizey_inv;
char str[32 + FILE_MAX];
cpack(-1);
// glRasterPos2f(0.02f, 0.03f);
BLI_snprintf(str, sizeof(str), "%s | %.2f frames/s", picture->name, fstep / swaptime);
// BMF_DrawString(font, str);
playanim_window_get_size(&sizex, &sizey);
fsizex_inv = 1.0f / sizex;
fsizey_inv = 1.0f / sizey;
BLF_enable(fontid, BLF_ASPECT);
BLF_aspect(fontid, 1.0f / ibuf->x, 1.0f / ibuf->y, 1.0f);
BLF_position(fontid, 0.02f, 0.03f, 0.0f);
BLF_aspect(fontid, fsizex_inv, fsizey_inv, 1.0f);
BLF_position(fontid, 10.0f * fsizex_inv, 10.0f * fsizey_inv, 0.0f);
BLF_draw(fontid, str, 256); // XXX
printf("Drawing text '%s'\n", str);
// printf("Drawing text '%s'\n", str);
}
GHOST_SwapWindowBuffers(g_window);
@@ -279,7 +285,7 @@ static void build_pict_list(char *first, int totframes, int fstep, int fontid)
picture->anim = anim;
picture->frame = pic;
picture->IB_flags = IB_rect;
BLI_snprintf(str, sizeof(str), "%s : %d", first, pic + 1);
BLI_snprintf(str, sizeof(str), "%s : %4.d", first, pic + 1);
picture->name = strdup(str);
BLI_addtail(picsbase, picture);
}
@@ -515,31 +521,6 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr ps_void)
}
}
break;
#if 0
case LEFTMOUSE:
case MOUSEX:
if (qualN & LMOUSE) {
int sizex, sizey;
int i;
playanim_window_get_size(&sizex, &sizey);
ps->picture = picsbase->first;
i = 0;
while (ps->picture) {
i++;
ps->picture = ps->picture->next;
}
i = (i * val) / sizex;
ps->picture = picsbase->first;
for (; i > 0; i--) {
if (ps->picture->next == NULL) break;
ps->picture = ps->picture->next;
}
ps->sstep = TRUE;
ps->wait2 = FALSE;
ps->next = 0;
}
break;
#endif
case GHOST_kKeyEqual:
if (val) {
if (qualN & SHIFT) {
@@ -622,6 +603,37 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr ps_void)
}
break;
}
case GHOST_kEventCursorMove:
{
if (qualN & LMOUSE) {
int sizex, sizey;
int i;
GHOST_TEventCursorData *cd = GHOST_GetEventData(evt);
int cx, cy;
GHOST_ScreenToClient(g_window, cd->x, cd->y, &cx, &cy);
playanim_window_get_size(&sizex, &sizey);
ps->picture = picsbase->first;
/* TODO - store in ps direct? */
i = 0;
while (ps->picture) {
i++;
ps->picture = ps->picture->next;
}
i = (i * cx) / sizex;
ps->picture = picsbase->first;
for (; i > 0; i--) {
if (ps->picture->next == NULL) break;
ps->picture = ps->picture->next;
}
ps->sstep = TRUE;
ps->wait2 = FALSE;
ps->next = 0;
}
break;
}
case GHOST_kEventWindowSize:
case GHOST_kEventWindowMove:
{
@@ -988,6 +1000,11 @@ void playanim(int argc, const char **argv)
}
}
/* XXX25 - we should not have to do this, but it makes scrubbing functional! */
if (qualN & LMOUSE) {
ps.next = 0;
}
ps.wait2 = ps.sstep;
if (ps.wait2 == 0 && ps.stopped == 0) {