summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2011-05-31 09:47:27 +0200
committerDaniel Friesel <derf@finalrewind.org>2011-05-31 09:47:27 +0200
commit3d0806ca24bd8ae3c5547f4a03ee06b95f56cfdd (patch)
treeb850ce53ef9b5e49e749d67fb7a678e774b73cc7
parent0ac290a646ff5a50b6f48f8cff4868b42021d6f1 (diff)
Fix --draw-filename "x of y" being cut off by short filenames (closes #45)
-rw-r--r--ChangeLog4
-rw-r--r--src/imlib.c32
2 files changed, 24 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 69c80d2..5a88eca 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+git HEAD
+
+ * Fix --draw-filename "x of y" being cut off by short filenames
+
Thu, 19 May 2011 22:32:42 +0200 Daniel Friesel <derf@finalrewind.org>
* Release v1.14.1
diff --git a/src/imlib.c b/src/imlib.c
index cdd4f7c..2b6f200 100644
--- a/src/imlib.c
+++ b/src/imlib.c
@@ -434,7 +434,7 @@ void feh_draw_errstr(winwidget w)
void feh_draw_filename(winwidget w)
{
static Imlib_Font fn = NULL;
- int tw = 0, th = 0;
+ int tw = 0, th = 0, nw = 0;
Imlib_Image im = NULL;
static DATA8 atab[256];
char *s = NULL;
@@ -462,10 +462,22 @@ void feh_draw_filename(winwidget w)
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);
+ gib_imlib_get_text_size(fn, FEH_FILE(w->file->data)->filename, NULL, &tw,
+ &th, IMLIB_TEXT_TO_RIGHT);
+
+ if (gib_list_length(filelist) > 1) {
+ len = snprintf(NULL, 0, "%d of %d", gib_list_length(filelist),
+ gib_list_length(filelist)) + 1;
+ s = emalloc(len);
+ snprintf(s, len, "%d of %d", gib_list_num(filelist, current_file) +
+ 1, gib_list_length(filelist));
+
+ gib_imlib_get_text_size(fn, s, NULL, &nw, NULL, IMLIB_TEXT_TO_RIGHT);
+
+ if (nw > tw)
+ tw = nw;
+ }
- /* tw is no longer correct, if the filename is shorter than
- * the string "%d of %d" used below in fullscreen mode */
tw += 3;
th += 3;
im = imlib_create_image(tw, 2 * th);
@@ -473,20 +485,16 @@ void feh_draw_filename(winwidget w)
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_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);
gib_imlib_text_draw(im, fn, NULL, 2, 2, FEH_FILE(w->file->data)->filename,
IMLIB_TEXT_TO_RIGHT, 0, 0, 0, 255);
gib_imlib_text_draw(im, fn, NULL, 1, 1, FEH_FILE(w->file->data)->filename,
IMLIB_TEXT_TO_RIGHT, 255, 255, 255, 255);
- /* Print the position in the filelist, if we have >=2 files */
- if (gib_list_length(filelist) > 1) {
- /* sic! */
- len = snprintf(NULL, 0, "%d of %d", gib_list_length(filelist), gib_list_length(filelist)) + 1;
- s = emalloc(len);
- snprintf(s, len, "%d of %d", gib_list_num(filelist, current_file) + 1, gib_list_length(filelist));
- /* This should somehow be right-aligned */
+
+ if (s) {
gib_imlib_text_draw(im, fn, NULL, 2, th + 1, s, IMLIB_TEXT_TO_RIGHT, 0, 0, 0, 255);
gib_imlib_text_draw(im, fn, NULL, 1, th, s, IMLIB_TEXT_TO_RIGHT, 255, 255, 255, 255);
free(s);