diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/support.c | 85 |
1 files changed, 43 insertions, 42 deletions
diff --git a/src/support.c b/src/support.c index 220b73e..afb941b 100644 --- a/src/support.c +++ b/src/support.c @@ -205,62 +205,63 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled, XFreeGC(disp, gc); fehbg = estrjoin(" ", "feh --bg-center", filbuf, NULL); } else if (filled == 1) { - int x = scr->width; - int y = scr->height; - int u = gib_imlib_image_get_width(im); - int v = gib_imlib_image_get_height(im); - int s = 0; - int t = 0; - - if ((u * y) > (x * v)) { - h = y; - w = (y * u) / v; - s = (x - w) / 2; + int scr_w = scr->width; + int scr_h = scr->height; + int img_w = gib_imlib_image_get_width(im); + int img_h = gib_imlib_image_get_height(im); + int render_x = 0; + int render_y = 0; + + if ((img_w * scr_h) > (scr_w * img_h)) { + h = scr_h; + w = (scr_h * img_w) / img_h; + render_x = (scr_w - w) / 2; } else { - h = (x * v) / u; - w = x; - t = (y - h) / 2; + h = (scr_w * img_h) / img_w; + w = scr_w; + render_y = (scr_h - h) / 2; } pmap_d1 = XCreatePixmap(disp, root, w, h, depth); - gib_imlib_render_image_on_drawable_at_size(pmap_d1, im, s, t, - w, h, 1, 0, 1); + gib_imlib_render_image_on_drawable_at_size(pmap_d1, im, + render_x, render_y, w, h, 1, 0, 1); fehbg = estrjoin(" ", "feh --bg-fill", filbuf, NULL); } else if (filled == 2) { - int x = scr->width; - int y = scr->height; - int u = gib_imlib_image_get_width(im); - int v = gib_imlib_image_get_height(im); - int s = 0; - int t = 0; + int scr_w = scr->width; + int scr_h = scr->height; + int img_w = gib_imlib_image_get_width(im); + int img_h = gib_imlib_image_get_height(im); + int render_x = 0; + int render_y = 0; XGCValues gcval; - if(u>v) { - w = x; - h = (((x * 100) / u) * v) / 100; - t = (y - h) / 2; - if(h>y) { - w = (((y * 100) / h) * w) / 100; - h = y; - s = (x - w) / 2; - t = 0; + if (img_w > img_h) { + w = scr_w; + h = (((scr_w * 100) / img_w) * img_h) / 100; + render_y = (scr_h - h) / 2; + if (h > scr_h) { + w = (((scr_h * 100) / h) * w) / 100; + h = scr_h; + render_x = (scr_w - w) / 2; + render_y = 0; } } else { - h = y; - w = (((y * 100) / v) * u) / 100; - s = (x - w) / 2; - if(w>x) { - h = (((x * 100) / w) * h) / 100; - w = x; - s = 0; - t = (y - h) / 2; + h = scr_h; + w = (((scr_h * 100) / img_h) * img_w) / 100; + render_x = (scr_w - w) / 2; + if (w > scr_w) { + h = (((scr_w * 100) / w) * h) / 100; + w = scr_w; + render_x = 0; + render_y = (scr_h - h) / 2; } } - pmap_d1 = XCreatePixmap(disp, root, x, y, depth); + pmap_d1 = XCreatePixmap(disp, root, scr_w, scr_h, depth); gcval.foreground = BlackPixel(disp, DefaultScreen(disp)); gc = XCreateGC(disp, root, GCForeground, &gcval); - XFillRectangle(disp, pmap_d1, gc, 0, 0, x, y); - gib_imlib_render_image_on_drawable_at_size(pmap_d1, im, s, t, w, h, 1, 0, 1); + XFillRectangle(disp, pmap_d1, gc, 0, 0, scr_w, scr_h); + gib_imlib_render_image_on_drawable_at_size(pmap_d1, im, + render_x, render_y, w, h, 1, 0, 1); XFreeGC(disp, gc); fehbg = estrjoin(" ", "feh --bg-max", filbuf, NULL); } else { |