diff options
author | Daniel Friesel <derf@finalrewind.org> | 2011-08-23 09:23:16 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2011-08-23 09:23:16 +0200 |
commit | a4794cb4196effcca4b3c7e1253a46f641c46107 (patch) | |
tree | 1006bcf081887df851ad49eb0ff1ae5518d329ab | |
parent | 4d205d73df95b78ed7517de755ba19e79d07c175 (diff) | |
download | feh-a4794cb4196effcca4b3c7e1253a46f641c46107.zip |
Add --draw-tinted option to draw overlay text on a semi-transparent background (closes #60, #61)
By default, feh draws white text with a black drop-shadow, which is well
readable in most, but not all cases. The --draw-tinted option draws a
semi-transparent black box around all texts. This improves readability, but
does not look as nice, so it won't become default behaviour.
It was suggested to use #7f7f7f7f for the background, but I decided that
for small images surrounded by a black border.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | man/feh.pre | 6 | ||||
-rw-r--r-- | src/feh.h | 4 | ||||
-rw-r--r-- | src/imlib.c | 60 | ||||
-rw-r--r-- | src/options.c | 4 | ||||
-rw-r--r-- | src/options.h | 4 |
6 files changed, 41 insertions, 40 deletions
@@ -2,6 +2,9 @@ git HEAD * Reload image after executing an action with the hold-action flag set <https://github.com/derf/feh/issues/59> + * Add --draw-tinted options to make overlay text (filename, caption etc.) + better readable + <https://github.com/derf/feh/issues/60> Tue, 16 Aug 2011 22:48:06 +0200 Daniel Friesel <derf@finalrewind.org> diff --git a/man/feh.pre b/man/feh.pre index d2c0c35..5e5235d 100644 --- a/man/feh.pre +++ b/man/feh.pre @@ -199,6 +199,12 @@ Draw the defined actions and what they do at the top-left of the image. . Draw the filename at the top-left of the image. . +.It Cm --draw-tinted +. +Show overlay texts +.Pq as created by Cm --draw-filename No et al +on a semi-transparent background to improve their readability +. .It Cm -f , --filelist Ar file . This option is similar to the playlists used by music software. If @@ -93,6 +93,10 @@ enum bgmode_type { BG_MODE_NONE = 0, BG_MODE_TILE, BG_MODE_CENTER, BG_MODE_SCALE, BG_MODE_FILL, BG_MODE_MAX }; +enum zoom_mode { ZOOM_MODE_FILL, ZOOM_MODE_MAX }; + +enum text_bg { TEXT_BG_CLEAR = 0, TEXT_BG_TINTED }; + enum slide_change { SLIDE_NEXT, SLIDE_PREV, SLIDE_RAND, SLIDE_FIRST, SLIDE_LAST, SLIDE_JUMP_FWD, SLIDE_JUMP_BACK diff --git a/src/imlib.c b/src/imlib.c index d12852c..3259e4d 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -319,13 +319,29 @@ char *feh_http_load_image(char *url) #endif /* HAVE_LIBCURL */ +void feh_imlib_image_fill_text_bg(Imlib_Image im, int w, int h) +{ + static DATA8 atab[256]; + memset(atab, 0, sizeof(atab)); + + gib_imlib_image_set_has_alpha(im, 1); + + gib_imlib_apply_color_modifier_to_rectangle(im, 0, 0, w, h, NULL, NULL, + NULL, atab); + + if (opt.text_bg == TEXT_BG_CLEAR) + gib_imlib_image_fill_rectangle(im, 0, 0, w, h, 0, 0, 0, 0); + else + gib_imlib_image_fill_rectangle(im, 0, 0, w, h, 0, 0, 0, 127); +} + + void feh_draw_zoom(winwidget w) { static Imlib_Font fn = NULL; int tw = 0, th = 0; Imlib_Image im = NULL; char buf[100]; - static DATA8 atab[256]; if (!w->im) return; @@ -342,8 +358,6 @@ void feh_draw_zoom(winwidget w) return; } - memset(atab, 0, sizeof(atab)); - snprintf(buf, sizeof(buf), "%.0f%%, %dx%d", w->zoom * 100, (int) (w->im_w * w->zoom), (int) (w->im_h * w->zoom)); @@ -356,9 +370,7 @@ void feh_draw_zoom(winwidget w) if (!im) eprintf("Couldn't create image. Out of memory?"); - gib_imlib_image_set_has_alpha(im, 1); - gib_imlib_apply_color_modifier_to_rectangle(im, 0, 0, tw, th, NULL, NULL, NULL, atab); - gib_imlib_image_fill_rectangle(im, 0, 0, tw, th, 0, 0, 0, 0); + feh_imlib_image_fill_text_bg(im, tw, th); gib_imlib_text_draw(im, fn, NULL, 2, 2, buf, IMLIB_TEXT_TO_RIGHT, 0, 0, 0, 255); gib_imlib_text_draw(im, fn, NULL, 1, 1, buf, IMLIB_TEXT_TO_RIGHT, 255, 255, 255, 255); @@ -394,7 +406,6 @@ void feh_draw_errstr(winwidget w) static Imlib_Font fn = NULL; int tw = 0, th = 0; Imlib_Image im = NULL; - static DATA8 atab[256]; if (!w->im) return; @@ -408,8 +419,6 @@ void feh_draw_errstr(winwidget w) if (!fn) eprintf("Unable to draw error message. Dying to be safe."); - memset(atab, 0, sizeof(atab)); - /* Work out how high the font is */ gib_imlib_get_text_size(fn, w->errstr, NULL, &tw, &th, IMLIB_TEXT_TO_RIGHT); @@ -419,9 +428,7 @@ void feh_draw_errstr(winwidget w) if (!im) eprintf("Couldn't create errstr image. Out of memory?"); - gib_imlib_image_set_has_alpha(im, 1); - gib_imlib_apply_color_modifier_to_rectangle(im, 0, 0, tw, th, NULL, NULL, NULL, atab); - gib_imlib_image_fill_rectangle(im, 0, 0, tw, th, 0, 0, 0, 0); + feh_imlib_image_fill_text_bg(im, tw, th); gib_imlib_text_draw(im, fn, NULL, 2, 2, w->errstr, IMLIB_TEXT_TO_RIGHT, 0, 0, 0, 255); gib_imlib_text_draw(im, fn, NULL, 1, 1, w->errstr, IMLIB_TEXT_TO_RIGHT, 255, 0, 0, 255); @@ -436,7 +443,6 @@ void feh_draw_filename(winwidget w) static Imlib_Font fn = NULL; int tw = 0, th = 0, nw = 0; Imlib_Image im = NULL; - static DATA8 atab[256]; char *s = NULL; int len = 0; @@ -459,8 +465,6 @@ void feh_draw_filename(winwidget w) return; } - memset(atab, 0, sizeof(atab)); - /* Work out how high the font is */ gib_imlib_get_text_size(fn, FEH_FILE(w->file->data)->filename, NULL, &tw, &th, IMLIB_TEXT_TO_RIGHT); @@ -484,10 +488,7 @@ void feh_draw_filename(winwidget w) if (!im) eprintf("Couldn't create image. Out of memory?"); - gib_imlib_image_set_has_alpha(im, 1); - gib_imlib_apply_color_modifier_to_rectangle(im, 0, 0, tw, 2 * th, NULL, - NULL, NULL, atab); - gib_imlib_image_fill_rectangle(im, 0, 0, tw, 2 * th, 0, 0, 0, 0); + feh_imlib_image_fill_text_bg(im, tw, 2 * th); gib_imlib_text_draw(im, fn, NULL, 2, 2, FEH_FILE(w->file->data)->filename, IMLIB_TEXT_TO_RIGHT, 0, 0, 0, 255); @@ -511,7 +512,6 @@ void feh_draw_info(winwidget w) static Imlib_Font fn = NULL; int tw = 0, th = 0; Imlib_Image im = NULL; - static DATA8 atab[256]; int no_lines = 0; char *info_cmd; char info_buf[256]; @@ -538,8 +538,6 @@ void feh_draw_info(winwidget w) info_cmd = feh_printf(opt.info_cmd, FEH_FILE(w->file->data)); - memset(atab, 0, sizeof(atab)); - gib_imlib_get_text_size(fn, "w", NULL, &tw, &th, IMLIB_TEXT_TO_RIGHT); info_pipe = popen(info_cmd, "r"); @@ -548,9 +546,7 @@ void feh_draw_info(winwidget w) if (!im) eprintf("Couldn't create image. Out of memory?"); - gib_imlib_image_set_has_alpha(im, 1); - gib_imlib_apply_color_modifier_to_rectangle(im, 0, 0, 290 * tw, 20 * th, NULL, NULL, NULL, atab); - gib_imlib_image_fill_rectangle(im, 0, 0, 290 * tw, 20 * th, 0, 0, 0, 0); + feh_imlib_image_fill_text_bg(im, 290 * tw, 20 * th); if (!info_pipe) { gib_imlib_text_draw(im, fn, NULL, 2, 2, @@ -622,7 +618,6 @@ void feh_draw_caption(winwidget w) int tw = 0, th = 0, ww, hh; int x, y; Imlib_Image im = NULL; - static DATA8 atab[256]; char *p; gib_list *lines, *l; static gib_style *caption_style = NULL; @@ -683,8 +678,6 @@ void feh_draw_caption(winwidget w) return; } - memset(atab, 0, sizeof(atab)); - if (*(file->caption) == '\0') { p = estrdup("Caption entry mode - Hit ESC to cancel"); lines = feh_wrap_string(p, w->w, fn, NULL); @@ -718,9 +711,7 @@ void feh_draw_caption(winwidget w) if (!im) eprintf("Couldn't create image. Out of memory?"); - gib_imlib_image_set_has_alpha(im, 1); - gib_imlib_apply_color_modifier_to_rectangle(im, 0, 0, tw, th, NULL, NULL, NULL, atab); - gib_imlib_image_fill_rectangle(im, 0, 0, tw, th, 0, 0, 0, 0); + feh_imlib_image_fill_text_bg(im, tw, th); l = lines; x = 0; @@ -973,7 +964,6 @@ void feh_draw_actions(winwidget w) int max_tw = 0; int line_th = 0; Imlib_Image im = NULL; - static DATA8 atab[256]; int i = 0; int num_actions = 0; int cur_action = 0; @@ -1011,8 +1001,6 @@ void feh_draw_actions(winwidget w) return; } - memset(atab, 0, sizeof(atab)); - gib_imlib_get_text_size(fn, "defined actions:", NULL, &tw, &th, IMLIB_TEXT_TO_RIGHT); /* Check for the widest line */ max_tw = tw; @@ -1045,9 +1033,7 @@ void feh_draw_actions(winwidget w) if (!im) eprintf("Couldn't create image. Out of memory?"); - gib_imlib_image_set_has_alpha(im, 1); - gib_imlib_apply_color_modifier_to_rectangle(im, 0, 0, tw, th, NULL, NULL, NULL, atab); - gib_imlib_image_fill_rectangle(im, 0, 0, tw, th, 0, 0, 0, 0); + feh_imlib_image_fill_text_bg(im, tw, th); gib_imlib_text_draw(im, fn, NULL, 2, 2, "defined actions:", IMLIB_TEXT_TO_RIGHT, 0, 0, 0, 255); gib_imlib_text_draw(im, fn, NULL, 1, 1, "defined actions:", IMLIB_TEXT_TO_RIGHT, 255, 255, 255, 255); diff --git a/src/options.c b/src/options.c index 4c832a0..13aaa95 100644 --- a/src/options.c +++ b/src/options.c @@ -362,6 +362,7 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun) {"no-rotate-ctrl-mask", 0, 0, 226}, {"no-blur-ctrl-mask", 0, 0, 227}, {"menu-ctrl-mask", 0, 0, 228}, + {"draw-tinted" , 0, 0, 229}, {"output" , 1, 0, 'o'}, {"output-only" , 1, 0, 'O'}, @@ -757,6 +758,9 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun) case 228: opt.menu_ctrl_mask = 1; break; + case 229: + opt.text_bg = TEXT_BG_TINTED; + break; case 230: opt.index_show_name = atoi(optarg); break; diff --git a/src/options.h b/src/options.h index bfcb94c..2ca655e 100644 --- a/src/options.h +++ b/src/options.h @@ -27,9 +27,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #ifndef OPTIONS_H #define OPTIONS_H -#define ZOOM_MODE_FILL 1 -#define ZOOM_MODE_MAX 2 - struct __fehoptions { unsigned char multiwindow; unsigned char montage; @@ -72,6 +69,7 @@ struct __fehoptions { unsigned char cache_thumbnails; unsigned char cycle_once; unsigned char hold_actions[10]; + unsigned char text_bg; char *output_file; char *output_dir; |