diff options
-rw-r--r-- | src/events.c | 49 | ||||
-rw-r--r-- | src/thumbnail.c | 51 | ||||
-rw-r--r-- | src/thumbnail.h | 2 |
3 files changed, 58 insertions, 44 deletions
diff --git a/src/events.c b/src/events.c index 7c56b96..fe87513 100644 --- a/src/events.c +++ b/src/events.c @@ -195,9 +195,7 @@ static void feh_event_handle_ButtonRelease(XEvent * ev) } else if ((winwid != NULL) && (winwid->type == WIN_TYPE_THUMBNAIL)) { feh_file *thumbfile; - winwidget thumbwin = NULL; int x, y; - char *s; x = ev->xbutton.x; y = ev->xbutton.y; @@ -206,25 +204,8 @@ static void feh_event_handle_ButtonRelease(XEvent * ev) x /= winwid->zoom; y /= winwid->zoom; thumbfile = feh_thumbnail_get_file_from_coords(x, y); - if (thumbfile) { - if (!opt.thumb_title) - s = thumbfile->name; - else - s = feh_printf(opt.thumb_title, thumbfile); - thumbwin = winwidget_get_first_window_of_type(WIN_TYPE_THUMBNAIL_VIEWER); - if (!thumbwin) { - thumbwin = winwidget_create_from_file( - gib_list_add_front(NULL, thumbfile), - s, WIN_TYPE_THUMBNAIL_VIEWER); - if (thumbwin) - winwidget_show(thumbwin); - } else if (FEH_FILE(thumbwin->file->data) != thumbfile) { - free(thumbwin->file); - thumbwin->file = gib_list_add_front(NULL, thumbfile); - winwidget_rename(thumbwin, s); - feh_reload_image(thumbwin, 1, 0); - } - } + if (thumbfile) + feh_thumbnail_show_fullsize(thumbfile); } } else { if (winwid != NULL) { @@ -519,29 +500,9 @@ static void feh_event_handle_MotionNotify(XEvent * ev) y = (ev->xbutton.y - winwid->im_y) / winwid->zoom; thumbnail = feh_thumbnail_get_thumbnail_from_coords(x, y); if (thumbnail != last_thumb) { - if (thumbnail) { - Imlib_Image origwin; - - origwin = winwid->im; - winwid->im = gib_imlib_clone_image(origwin); - gib_imlib_image_fill_rectangle(winwid->im, - thumbnail->x, thumbnail->y, thumbnail->w, - thumbnail->h, 50, 50, 255, 100); - gib_imlib_image_draw_rectangle(winwid->im, - thumbnail->x, thumbnail->y, thumbnail->w, - thumbnail->h, 255, 255, 255, 255); - gib_imlib_image_draw_rectangle(winwid->im, - thumbnail->x + 1, thumbnail->y + 1, - thumbnail->w - 2, thumbnail->h - 2, - 0, 0, 0, 255); - gib_imlib_image_draw_rectangle(winwid->im, - thumbnail->x + 2, thumbnail->y + 2, - thumbnail->w - 4, thumbnail->h - 4, - 255, 255, 255, 255); - winwidget_render_image(winwid, 0, 0); - gib_imlib_free_image_and_decache(winwid->im); - winwid->im = origwin; - } else + if (thumbnail) + feh_thumbnail_mark_selected(winwid, thumbnail); + else winwidget_render_image(winwid, 0, 0); } last_thumb = thumbnail; diff --git a/src/thumbnail.c b/src/thumbnail.c index 0e93447..4dbc76f 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -901,6 +901,57 @@ int feh_thumbnail_get_generated(Imlib_Image * image, feh_file * file, return (0); } +void feh_thumbnail_show_fullsize(feh_file *thumbfile) +{ + winwidget thumbwin = NULL; + char *s; + + if (!opt.thumb_title) + s = thumbfile->name; + else + s = feh_printf(opt.thumb_title, thumbfile); + + thumbwin = winwidget_get_first_window_of_type(WIN_TYPE_THUMBNAIL_VIEWER); + if (!thumbwin) { + thumbwin = winwidget_create_from_file( + gib_list_add_front(NULL, thumbfile), + s, WIN_TYPE_THUMBNAIL_VIEWER); + if (thumbwin) + winwidget_show(thumbwin); + } else if (FEH_FILE(thumbwin->file->data) != thumbfile) { + free(thumbwin->file); + thumbwin->file = gib_list_add_front(NULL, thumbfile); + winwidget_rename(thumbwin, s); + feh_reload_image(thumbwin, 1, 0); + } +} + +void feh_thumbnail_mark_selected(winwidget winwid, feh_thumbnail *thumbnail) +{ + Imlib_Image origwin; + origwin = winwid->im; + winwid->im = gib_imlib_clone_image(origwin); + gib_imlib_image_fill_rectangle(winwid->im, + thumbnail->x, thumbnail->y, thumbnail->w, + thumbnail->h, 50, 50, 255, 100); + gib_imlib_image_draw_rectangle(winwid->im, + thumbnail->x, thumbnail->y, thumbnail->w, + thumbnail->h, 255, 255, 255, 255); + gib_imlib_image_draw_rectangle(winwid->im, + thumbnail->x + 1, thumbnail->y + 1, + thumbnail->w - 2, thumbnail->h - 2, + 0, 0, 0, 255); + gib_imlib_image_draw_rectangle(winwid->im, + thumbnail->x + 2, thumbnail->y + 2, + thumbnail->w - 4, thumbnail->h - 4, + 255, 255, 255, 255); + winwidget_render_image(winwid, 0, 0); + gib_imlib_free_image_and_decache(winwid->im); + winwid->im = origwin; +} + + + int feh_thumbnail_setup_thumbnail_dir(void) { int status = 0; diff --git a/src/thumbnail.h b/src/thumbnail.h index 6d2dc77..e9c3f09 100644 --- a/src/thumbnail.h +++ b/src/thumbnail.h @@ -80,6 +80,8 @@ int feh_thumbnail_get_generated(Imlib_Image * image, feh_file * file, char * thu char *feh_thumbnail_get_name(char *uri); char *feh_thumbnail_get_name_uri(char *name); char *feh_thumbnail_get_name_md5(char *uri); +void feh_thumbnail_show_fullsize(feh_file *thumbfile); +void feh_thumbnail_mark_selected(winwidget winwid, feh_thumbnail *thumbnail); int feh_thumbnail_setup_thumbnail_dir(void); |