more select hacking

This commit is contained in:
Matthew Allum 2005-05-27 14:02:39 +00:00
parent 8f30e4e0c1
commit c936f265b0
9 changed files with 408 additions and 110 deletions

View File

@ -1,3 +1,26 @@
2005-05-27 mallum,,, <mallum@openedhand.com>
* clutter/cltr-animator.c: (cltr_animator_zoom_new),
(cltr_animator_move_new), (cltr_animator_fullzoom_new),
(cltr_animator_new), (cltr_animator_set_args),
(cltr_animator_wrapped_zoom_paint), (cltr_animator_reset),
(cltr_animator_timeout_cb), (cltr_animator_run):
* clutter/cltr-animator.h:
* clutter/cltr-button.c: (cltr_button_set_label),
(cltr_button_paint):
* clutter/cltr-label.c: (cltr_label_new), (cltr_label_set_text),
(cltr_label_get_text), (cltr_label_show),
(cltr_label_handle_xevent), (cltr_label_paint):
* clutter/cltr-label.h:
* clutter/cltr-list.c: (cltr_list_paint):
* clutter/cltr-widget.c:
* examples/select.c: (usage), (video_ctrl_hide),
(video_ctrl_stop_cb), (video_ctrl_play_cb),
(video_ctrl_seek_begin_cb), (init_video_ctrl), (show_video_ctrl),
(populate), (cell_to_item), (zoom_video_out), (init_show_controls),
(handle_xevent), (zoom_out_complete), (zoom_in_complete):
More select hacking ...
2005-05-23 mallum,,, <mallum@openedhand.com>
* clutter/cltr-button.c: (cltr_button_new_with_label),

View File

@ -4,7 +4,10 @@
struct CltrAnimator
{
CltrWidget *widget;
CltrWidget *widget;
CltrAnimatorType type;
gint fps;
int n_steps, step;
@ -15,8 +18,11 @@ struct CltrAnimator
int zoom_end_x1, zoom_end_y1, zoom_end_x2, zoom_end_y2;
int zoom_start_x1, zoom_start_y1, zoom_start_x2, zoom_start_y2;
int move_start_x1, move_start_y1, move_end_x1, move_end_y1;
};
static void
cltr_animator_wrapped_paint(CltrWidget *widget);
@ -33,6 +39,8 @@ cltr_animator_zoom_new(CltrWidget *widget,
{
CltrAnimator *anim = g_malloc0(sizeof(CltrAnimator));
anim->type = CltrAnimatorZoom;
anim->zoom_end_x1 = dst_x1;
anim->zoom_end_x2 = dst_x2;
anim->zoom_end_y1 = dst_y1;
@ -55,6 +63,34 @@ cltr_animator_zoom_new(CltrWidget *widget,
return anim;
}
CltrAnimator*
cltr_animator_move_new(CltrWidget *widget,
int src_x1,
int src_y1,
int dst_x1,
int dst_y1)
{
CltrAnimator *anim = g_malloc0(sizeof(CltrAnimator));
anim->type = CltrAnimatorMove;
anim->move_start_x1 = src_x1;
anim->move_start_y1 = src_y1;
anim->move_end_x1 = dst_x1;
anim->move_end_y1 = dst_y1;
anim->wrapped_paint_func = widget->paint;
anim->widget = widget;
widget->anim = anim;
anim->n_steps = 10;
anim->step = 0;
anim->fps = 50;
return anim;
}
CltrAnimator*
cltr_animator_fullzoom_new(CltrWidget *widget,
@ -65,6 +101,8 @@ cltr_animator_fullzoom_new(CltrWidget *widget,
{
CltrAnimator *anim = g_malloc0(sizeof(CltrAnimator));
anim->type = CltrAnimatorFullZoom;
anim->zoom_end_x1 = x1;
anim->zoom_end_x2 = x2;
anim->zoom_end_y1 = y1;
@ -101,7 +139,27 @@ cltr_animator_set_args(CltrAnimator *anim)
}
static void
cltr_animator_wrapped_paint(CltrWidget *widget)
cltr_animator_wrapped_move_paint(CltrWidget *widget)
{
CltrAnimator *anim = widget->anim;
int orig_x, orig_y;
float f = (float)anim->step/anim->n_steps;
orig_x = widget->x;
orig_y = widget->y;
widget->x = anim->move_start_x1 + ( (anim->move_end_x1 - anim->move_start_x1) * f );
widget->x = anim->move_start_y1 + ( (anim->move_end_y1 - anim->move_start_y1) * f );
anim->wrapped_paint_func(widget);
widget->x = orig_x;
widget->y = orig_y;
}
static void
cltr_animator_wrapped_zoom_paint(CltrWidget *widget)
{
CltrAnimator *anim = widget->anim;
float tx = 0.0, ty = 0.0;
@ -222,7 +280,19 @@ cltr_animator_run(CltrAnimator *anim,
anim->anim_finish_cb = finish_callback;
anim->anim_finish_data = finish_data;
anim->widget->paint = cltr_animator_wrapped_paint;
switch (anim->type)
{
case CltrAnimatorZoom:
anim->widget->paint = cltr_animator_wrapped_zoom_paint;
break;
case CltrAnimatorFullZoom:
/* anim->widget->paint = cltr_animator_wrapped_fullzoom_paint; */
break;
case CltrAnimatorMove:
anim->widget->paint = cltr_animator_wrapped_move_paint;
break;
}
anim->step = 0;

View File

@ -7,7 +7,9 @@ typedef struct CltrAnimator CltrAnimator;
typedef enum CltrAnimatorType
{
CltrAnimatorFullZoom
CltrAnimatorZoom,
CltrAnimatorFullZoom,
CltrAnimatorMove
}
CltrAnimatorType;

View File

@ -98,22 +98,20 @@ cltr_button_set_label(CltrButton *button,
if (button->label)
{
cltr_widget_remove_child(CLTR_WIDGET(button),
CLTR_WIDGET(button->label));
cltr_widget_unref(CLTR_WIDGET(button));
/* XXX free up pre-existing label */
cltr_label_set_text(button->label, text);
}
else
{
button->label = CLTR_LABEL(cltr_label_new(text, font, col));
button->label = CLTR_LABEL(cltr_label_new(text, font, col));
x = (cltr_widget_width(CLTR_WIDGET(button)) - cltr_widget_width(CLTR_WIDGET(button->label)))/2;
x = (cltr_widget_width(CLTR_WIDGET(button)) - cltr_widget_width(CLTR_WIDGET(button->label)))/2;
y = (cltr_widget_height(CLTR_WIDGET(button)) - cltr_widget_height(CLTR_WIDGET(button->label)))/2;
y = (cltr_widget_height(CLTR_WIDGET(button)) - cltr_widget_height(CLTR_WIDGET(button->label)))/2;
cltr_widget_add_child(CLTR_WIDGET(button),
CLTR_WIDGET(button->label),
x, y);
cltr_widget_add_child(CLTR_WIDGET(button),
CLTR_WIDGET(button->label),
x, y);
}
}
CltrWidget*
@ -259,6 +257,10 @@ cltr_button_handle_xevent (CltrWidget *widget, XEvent *xev)
static void
cltr_button_paint(CltrWidget *widget)
{
PixbufPixel bgcol = { 0xe7, 0xe7, 0xe7, 0xff };
PixbufPixel boxcol = { 0xd7, 0xd7, 0xd7, 0xff };
PixbufPixel hlfontcol = { 0xe6, 0x99, 0x99, 0xff };
CltrButton *button = CLTR_BUTTON(widget);
CLTR_MARK();
@ -270,20 +272,20 @@ cltr_button_paint(CltrWidget *widget)
switch (button->state)
{
case CltrButtonStateFocused:
glColor4f(1.0, 1.0, 0.0, 1.0);
cltr_glu_set_color(&hlfontcol);
break;
case CltrButtonStateActive:
glColor4f(1.0, 0.0, 0.0, 1.0);
glColor4f(1.0, 1.0, 1.0, 1.0);
break;
default:
glColor4f(1.0, 1.0, 1.0, 1.0);
cltr_glu_set_color(&bgcol);
}
cltr_glu_rounded_rect(cltr_widget_abs_x(widget),
cltr_widget_abs_y(widget),
cltr_widget_abs_x2(widget),
cltr_widget_abs_y2(widget),
2, 5,
1, 2,
NULL);
glDisable(GL_BLEND);

View File

@ -7,7 +7,7 @@ struct CltrLabel
char *text;
Pixbuf *pixb;
PixbufPixel *col;
PixbufPixel col;
CltrFont *font;
CltrTexture *texture;
};
@ -54,7 +54,8 @@ cltr_label_new(const char *text,
}
label->font = font; /* XXX Ref The font XXX*/
label->col = col; /* XXX Ref The Col XXX*/
memcpy(&label->col, col, sizeof(PixbufPixel));
label->widget.width = width;
label->widget.height = height;
@ -68,8 +69,10 @@ cltr_label_new(const char *text,
}
void
cltr_label_set_text(CltrLabel *label)
cltr_label_set_text(CltrLabel *label, char *text)
{
int width,height;
if (label->texture)
cltr_texture_unref(label->texture);
@ -79,7 +82,34 @@ cltr_label_set_text(CltrLabel *label)
if (label->text)
free(label->text);
/* XXX TODO */
font_get_pixel_size (label->font, text, &width, &height);
if (width && height)
{
PixbufPixel bg = { 0x00, 0x00, 0x00, 0x00 };
PixbufPixel col = { 0xff, 0xff, 0xff, 0xff };
label->widget.width = width;
label->widget.height = height;
CLTR_DBG("** setting label to %s ***", text);
label->text = strdup(text);
label->pixb = pixbuf_new(width, height);
pixbuf_fill_rect(label->pixb, 0, 0, -1, -1, &bg);
font_draw(label->font,
label->pixb,
label->text,
0,
0,
&label->col);
label->texture = cltr_texture_new(label->pixb);
}
}
const char*
@ -109,6 +139,7 @@ cltr_label_paint(CltrWidget *widget)
if (label->text)
{
glPushMatrix();
glEnable(GL_TEXTURE_2D);
@ -117,7 +148,7 @@ cltr_label_paint(CltrWidget *widget)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1.0, 1.0, 1.0, 1.0);
/* glColor4f(1.0, 1.0, 1.0, 1.0); */
cltr_texture_render_to_gl_quad(label->texture,
cltr_widget_abs_x(widget),

View File

@ -12,5 +12,7 @@ cltr_label_new(const char *text,
CltrFont *font,
PixbufPixel *col);
void
cltr_label_set_text(CltrLabel *label, char *text);
#endif

View File

@ -386,7 +386,7 @@ cltr_list_paint(CltrWidget *widget)
PixbufPixel col = { 0xff, 0, 0, 0xff };
PixbufPixel bgcol = { 0xe7, 0xe7, 0xe7, 0xff };
PixbufPixel boxcol = { 0xd7, 0xd7, 0xd7, 0xff };
PixbufPixel hlfontcol = { 0xff, 0x33, 0x66, 0xff };
PixbufPixel hlfontcol = { 0xe6, 0x99, 0x99, 0xff };
CLTR_MARK();
@ -471,12 +471,12 @@ cltr_list_paint(CltrWidget *widget)
cltr_glu_set_color(&hlfontcol);
else
glColor4f(0.4, 0.4, 0.4, 1.0);
cltr_texture_render_to_gl_quad(cell->text_texture,
vx2 + PAD,
vy1,
cltr_rect_x2(cell->rect) - PAD,
vy1 + (list->cell_height/2) - PAD);
cltr_rect_x2(cell->rect) - (2*PAD),
vy1 + (list->cell_height/2) - (2*PAD));
}

View File

@ -189,7 +189,7 @@ cltr_widget_add_child(CltrWidget *widget, CltrWidget *child, int x, int y)
void
cltr_widget_remove_child(CltrWidget *widget, CltrWidget *child)
{
g_list_remove(widget->children, child);
widget->children = g_list_remove(widget->children, child);
child->parent = NULL;
child->x = 0;

View File

@ -9,10 +9,16 @@ typedef struct DemoApp
CltrWidget *list;
CltrWidget *video;
CltrWidget *win;
VideoCtrls *video_ctrls;
GList *items;
/* video stuff */
gboolean paused;
VideoCtrls *video_ctrls;
gboolean ignore_next_xevent_hack;
} DemoApp;
struct ItemEntry
@ -29,6 +35,9 @@ enum {
VIDEO_STOP_BTN,
VIDEO_REWND_BTN,
VIDEO_FFWD_BTN,
VIDEO_VOLUP_BTN,
VIDEO_VOLDOWN_BTN,
VIDEO_BEGIN_BTN,
N_VIDEO_BTNS
};
@ -44,6 +53,12 @@ struct VideoCtrls
static void
zoom_out_complete (CltrAnimator *anim, void *userdata);
static void
zoom_video_out(DemoApp *app);
void
handle_xevent(CltrWidget *win, XEvent *xev, void *cookie);
int
usage(char *progname)
{
@ -53,6 +68,71 @@ usage(char *progname)
/* video control buttons */
void
video_ctrl_hide(DemoApp *app)
{
cltr_widget_hide(app->video_ctrls->container);
cltr_window_focus_widget(CLTR_WINDOW(app->win), app->video);
app->ignore_next_xevent_hack = TRUE; /* urg */
cltr_window_on_xevent(CLTR_WINDOW(app->win), handle_xevent, app);
}
void
video_ctrl_stop_cb(CltrButton *button, void *cookie)
{
DemoApp *app = (DemoApp*)cookie;
cltr_widget_hide(app->video_ctrls->container);
cltr_window_focus_widget(CLTR_WINDOW(app->win), app->list);
zoom_video_out(app);
}
void
video_ctrl_play_cb(CltrButton *button, void *cookie)
{
DemoApp *app = (DemoApp*)cookie;
VideoCtrls *v = app->video_ctrls;
PixbufPixel col = { 0xff, 0xff, 0xff, 0xff };
if (app->paused)
{
cltr_video_play (CLTR_VIDEO(app->video), NULL);
cltr_button_set_label(CLTR_BUTTON(v->buttons[VIDEO_PLAY_BTN]),
"PAUSE", v->font, &col);
app->paused = FALSE;
video_ctrl_hide(app);
}
else
{
cltr_button_set_label(CLTR_BUTTON(v->buttons[VIDEO_PLAY_BTN]),
"PLAY", v->font, &col);
cltr_video_pause (CLTR_VIDEO(app->video));
app->paused = TRUE;
cltr_widget_queue_paint(v->buttons[VIDEO_PLAY_BTN]);
}
}
void
video_ctrl_seek_begin_cb(CltrButton *button, void *cookie)
{
DemoApp *app = (DemoApp*)cookie;
video_ctrl_hide(app);
cltr_video_seek (CLTR_VIDEO(app->video), 0.0, NULL);
}
void
init_video_ctrl(DemoApp *app)
{
@ -68,55 +148,68 @@ init_video_ctrl(DemoApp *app)
height += 6;
v->container = cltr_overlay_new(width, height * N_VIDEO_BTNS);
v->container = cltr_overlay_new(width, height * 3 /*N_VIDEO_BTNS*/);
v->buttons[VIDEO_PLAY_BTN] = cltr_button_new(width, height);
v->buttons[VIDEO_PLAY_BTN] = cltr_button_new(width, height-1);
cltr_button_set_label(v->buttons[VIDEO_PLAY_BTN],
"PlAY", v->font, &col);
cltr_button_set_label(CLTR_BUTTON(v->buttons[VIDEO_PLAY_BTN]),
"PAUSE", v->font, &col);
cltr_button_on_activate(CLTR_BUTTON(v->buttons[VIDEO_PLAY_BTN]),
video_ctrl_play_cb, (void *)app);
cltr_widget_add_child(v->container,
v->buttons[VIDEO_PLAY_BTN],
x, y);
y += height;
v->buttons[VIDEO_STOP_BTN] = cltr_button_new(width, height);
v->buttons[VIDEO_STOP_BTN] = cltr_button_new(width, height-1);
cltr_button_set_label(v->buttons[VIDEO_STOP_BTN],
cltr_button_set_label(CLTR_BUTTON(v->buttons[VIDEO_STOP_BTN]),
"STOP",
v->font, &col);
cltr_button_on_activate(CLTR_BUTTON(v->buttons[VIDEO_STOP_BTN]),
video_ctrl_stop_cb, (void *)app);
cltr_widget_add_child(v->container,
v->buttons[VIDEO_STOP_BTN],
x, y);
y += height;
v->buttons[VIDEO_REWND_BTN] = cltr_button_new(width, height);
v->buttons[VIDEO_REWND_BTN] = cltr_button_new(width, height-1);
cltr_button_set_label(v->buttons[VIDEO_REWND_BTN],
"RWND",
cltr_button_set_label(CLTR_BUTTON(v->buttons[VIDEO_REWND_BTN]),
"BEGIN",
v->font, &col);
cltr_button_on_activate(CLTR_BUTTON(v->buttons[VIDEO_REWND_BTN]),
video_ctrl_seek_begin_cb, (void *)app);
cltr_widget_add_child(v->container,
v->buttons[VIDEO_REWND_BTN],
x, y);
y += height;
v->buttons[VIDEO_FFWD_BTN] = cltr_button_new(width, height);
/*
v->buttons[VIDEO_FFWD_BTN] = cltr_button_new(width, height-1);
cltr_button_set_label(v->buttons[VIDEO_FFWD_BTN],
cltr_button_set_label(CLTR_BUTTON(v->buttons[VIDEO_FFWD_BTN]),
"FFWD",
v->font, &col);
cltr_widget_add_child(v->container,
v->buttons[VIDEO_FFWD_BTN],
x, y);
y += height;
*/
cltr_widget_add_child(app->video, v->container, 100, 100);
/* focus */
/* focus - URG !*/
cltr_widget_set_focus_next(v->buttons[VIDEO_PLAY_BTN],
v->buttons[VIDEO_STOP_BTN],
@ -126,6 +219,18 @@ init_video_ctrl(DemoApp *app)
v->buttons[VIDEO_PLAY_BTN],
CLTR_NORTH);
cltr_widget_set_focus_next(v->buttons[VIDEO_STOP_BTN],
v->buttons[VIDEO_REWND_BTN],
CLTR_SOUTH);
cltr_widget_set_focus_next(v->buttons[VIDEO_REWND_BTN],
v->buttons[VIDEO_STOP_BTN],
CLTR_NORTH);
cltr_widget_set_focus_next(v->buttons[VIDEO_REWND_BTN],
v->buttons[VIDEO_PLAY_BTN],
CLTR_SOUTH);
}
void
@ -168,6 +273,8 @@ populate(DemoApp *app, char *path)
gint i = 0;
ItemEntry *new_item;
char *img_path;
char *seek_path, *seek_data = NULL;
gint64 seek_time = 0;
/* Eeek! */
if (!(g_str_has_suffix (entry, ".mpg") ||
@ -193,6 +300,13 @@ populate(DemoApp *app, char *path)
if (i > 0)
new_item->nice_name[i] = '\0';
seek_path = g_strconcat(path, "/", new_item->nice_name, ".seek", NULL);
if (g_file_get_contents (seek_path, &seek_data, NULL, NULL))
{
seek_time = atol(seek_data);
}
img_path = g_strconcat(path, "/", new_item->nice_name, ".png", NULL);
pixb = pixbuf_new_from_file(img_path);
@ -207,6 +321,8 @@ populate(DemoApp *app, char *path)
new_item->uri = g_strconcat("file://", path, "/", entry, NULL);
new_item->path = g_strdup(path);
new_item->stoptime = seek_time;
app->items = g_list_append(app->items, new_item);
g_free(img_path);
@ -242,6 +358,108 @@ cell_to_item(DemoApp *app, CltrListCell *cell)
}
void
zoom_video_out(DemoApp *app)
{
ItemEntry *item;
char filename[1024];
Pixbuf *spixb, *dpixb;
int dstx, dsty, dstw, dsth;
PixbufPixel col = { 0, 0, 0, 0xff };
int x1, y1, x2, y2;
FILE *fp;
cltr_video_pause (CLTR_VIDEO(app->video));
item = cell_to_item(app, cltr_list_get_active_cell(CLTR_LIST(app->list)));
item->stoptime = cltr_video_get_time (CLTR_VIDEO(app->video));
snprintf(filename, 1024, "%s/%s.png", item->path, item->nice_name);
spixb = cltr_video_get_pixbuf (CLTR_VIDEO(app->video));
/* fixup pixbuf so scaled like video
*
*/
/* XXX wrongly assume width > height */
dstw = spixb->width;
dsth = (spixb->width * cltr_widget_height(app->win))
/ cltr_widget_width(app->win) ;
printf("dsth %i, spixb h %i\n", dsth, spixb->height);
dsty = (dsth - spixb->height)/2; dstx = 0;
dpixb = pixbuf_new(dstw, dsth);
pixbuf_fill_rect(dpixb, 0, 0, -1, -1, &col);
pixbuf_copy(spixb, dpixb, 0, 0,
spixb->width, spixb->height, dstx, dsty);
cltr_list_cell_set_pixbuf(cltr_list_get_active_cell(app->list),
dpixb);
pixbuf_write_png(dpixb, filename);
/* reset the viewing pixbuf */
pixbuf_unref(dpixb);
/* write out the seektime too */
snprintf(filename, 1024, "%s/%s.seek", item->path, item->nice_name);
fp = fopen(filename, "w");
if (fp)
{
fprintf(fp, "%li", item->stoptime);
fclose(fp);
}
cltr_list_get_active_cell_video_box_co_ords(CLTR_LIST(app->list),
&x1, &y1, &x2, &y2);
cltr_video_stop (CLTR_VIDEO(app->video));
/* zoom out, XXX old anim needs freeing */
app->anim = cltr_animator_zoom_new(app->list,
x1, y1, x2, y2,
0,0,800,600);
printf("got return, seek time %li, %i, %i \n",
cltr_video_get_time (CLTR_VIDEO(app->video)),
x1, y1);
cltr_widget_show(app->list);
cltr_animator_run(app->anim, zoom_out_complete, app);
return;
}
void
init_show_controls(DemoApp *app)
{
/*
app->anim = cltr_animator_move_new(app->video_ctrls->container,
-100, 200,
100, 200);
cltr_widget_show_all(app->video_ctrls->container);
cltr_animator_run(app->anim, NULL, app);
*/
cltr_widget_show_all(app->video_ctrls->container);
cltr_window_focus_widget(CLTR_WINDOW(app->win),
app->video_ctrls->buttons[VIDEO_PLAY_BTN]);
cltr_window_on_xevent(CLTR_WINDOW(app->win), NULL, NULL);
}
void
handle_xevent(CltrWidget *win, XEvent *xev, void *cookie)
@ -249,6 +467,16 @@ handle_xevent(CltrWidget *win, XEvent *xev, void *cookie)
KeySym kc;
DemoApp *app = (DemoApp*)cookie;
/*
* XXX really need to think about not queuing xevents in
* the current queue or something :/
*/
if (app->ignore_next_xevent_hack)
{
app->ignore_next_xevent_hack = FALSE;
return;
}
if (xev->type == KeyPress)
{
XKeyEvent *xkeyev = &xev->xkey;
@ -259,71 +487,8 @@ handle_xevent(CltrWidget *win, XEvent *xev, void *cookie)
{
case XK_Return:
{
ItemEntry *item;
char filename[1024];
Pixbuf *spixb, *dpixb;
int dstx, dsty, dstw, dsth;
PixbufPixel col = { 0, 0, 0, 0xff };
int x1, y1, x2, y2;
cltr_video_pause (CLTR_VIDEO(app->video));
item = cell_to_item(app, cltr_list_get_active_cell(app->list));
item->stoptime = cltr_video_get_time (app->video);
snprintf(filename, 1024, "%s/%s.png", item->path, item->nice_name);
spixb = cltr_video_get_pixbuf (app->video);
/* fixup pixbuf so scaled like video
*
*/
/* XXX wrongly assume width > height */
dstw = spixb->width;
dsth = (spixb->width * cltr_widget_height(win))
/ cltr_widget_width(win) ;
printf("dsth %i, spixb h %i\n", dsth, spixb->height);
dsty = (dsth - spixb->height)/2; dstx = 0;
dpixb = pixbuf_new(dstw, dsth);
pixbuf_fill_rect(dpixb, 0, 0, -1, -1, &col);
pixbuf_copy(spixb, dpixb, 0, 0,
spixb->width, spixb->height, dstx, dsty);
cltr_list_cell_set_pixbuf(cltr_list_get_active_cell(app->list),
dpixb);
pixbuf_write_png(dpixb, filename);
/* reset the viewing pixbuf */
pixbuf_unref(dpixb);
cltr_list_get_active_cell_video_box_co_ords(CLTR_LIST(app->list),
&x1, &y1, &x2, &y2);
cltr_video_stop (CLTR_VIDEO(app->video));
/* zoom out, XXX old anim needs freeing */
app->anim = cltr_animator_zoom_new(app->list,
x1, y1, x2, y2,
0,0,800,600);
printf("got return, seek time %li, %i, %i \n",
cltr_video_get_time (CLTR_VIDEO(app->video)),
x1, y1);
cltr_widget_show(app->list);
cltr_animator_run(app->anim, zoom_out_complete, app);
init_show_controls(app);
/* zoom_video_out(app); */
}
break;
}
@ -355,6 +520,8 @@ zoom_in_complete (CltrAnimator *anim, void *userdata)
item = cell_to_item(app, cltr_list_get_active_cell(app->list));
app->paused = FALSE;
cltr_video_set_source(CLTR_VIDEO(app->video), item->uri);
if (item->stoptime)
@ -371,11 +538,12 @@ zoom_in_complete (CltrAnimator *anim, void *userdata)
cltr_video_seek_time (CLTR_VIDEO(app->video), item->stoptime, NULL);
}
cltr_widget_show(app->video);
cltr_widget_hide(CLTR_WIDGET(app->list));
show_video_ctrl(app);
cltr_window_on_xevent(CLTR_WINDOW(app->win), handle_xevent, app);
}