diff options
| author | Daniel Friesel <derf@derf.homelinux.org> | 2010-08-27 07:50:15 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@derf.homelinux.org> | 2010-08-27 07:50:15 +0200 | 
| commit | f68ec64888a2e14dc77aa1f38c30a97922ae1a7a (patch) | |
| tree | 699fc811d1ee758d1f525de51c5d1cbb4b9685b8 | |
| parent | d37e6dad501b68b2d538d2792f65193f38539f3d (diff) | |
Patch by Stefan Mark: Add --bg-max wallpaper mode
| -rw-r--r-- | ChangeLog | 4 | ||||
| -rw-r--r-- | man/feh.pre | 5 | ||||
| -rw-r--r-- | src/feh.h | 2 | ||||
| -rw-r--r-- | src/options.c | 5 | ||||
| -rw-r--r-- | src/support.c | 42 | 
5 files changed, 56 insertions, 2 deletions
| @@ -1,3 +1,7 @@ +git HEAD + +    * Patch yb Stefan Mark: Add --bg-max (scaled with borders) +  Tue, 24 Aug 2010 19:23:36 +0200  Daniel Friesel <derf@chaosdorf.de>  * Release v1.9 diff --git a/man/feh.pre b/man/feh.pre index 0dbb631..08b9b33 100644 --- a/man/feh.pre +++ b/man/feh.pre @@ -551,6 +551,11 @@ Like  but preserves aspect ratio by zooming the image until it fits.  Either a  horizontal or a vertical part of the image will be cut off  . +.It Cm --bg-max +Like +.Cm --bg-fill , +but scale the image to the maximum size that fits the screen with black borders on one side. +.  .It Cm --bg-scale  Fit the file into the background without repeating it, cutting off stuff or  using borders.  But the aspect ratio is not preserved either @@ -89,7 +89,7 @@ enum mode_type { MODE_NORMAL = 0, MODE_PAN, MODE_ZOOM, MODE_ROTATE, MODE_BLUR, M  };  enum bgmode_type { BG_MODE_NONE = 0, BG_MODE_TILE, BG_MODE_CENTER, -	BG_MODE_SEAMLESS, BG_MODE_SCALE, BG_MODE_FILL +	BG_MODE_SEAMLESS, BG_MODE_SCALE, BG_MODE_FILL, BG_MODE_MAX  };  enum slide_change { SLIDE_NEXT, SLIDE_PREV, SLIDE_RAND, SLIDE_FIRST, SLIDE_LAST, diff --git a/src/options.c b/src/options.c index 606e2ee..f7381a7 100644 --- a/src/options.c +++ b/src/options.c @@ -411,6 +411,7 @@ static void feh_parse_option_array(int argc, char **argv)  		{"action8"       , 1, 0, 216},  		{"action9"       , 1, 0, 217},  		{"bg-fill"       , 1, 0, 218}, +		{"bg-max"        , 1, 0, 219},  		{"index-name"    , 1, 0, 230},  		{"index-size"    , 1, 0, 231},  		{"index-dim"     , 1, 0, 232}, @@ -682,6 +683,10 @@ static void feh_parse_option_array(int argc, char **argv)  			opt.bgmode = BG_MODE_FILL;  			opt.output_file = estrdup(optarg);  			break; +		case 219: +			opt.bgmode = BG_MODE_MAX; +			opt.output_file = estrdup(optarg); +			break;  		case 204:  			free(opt.menu_style);  			opt.menu_style = estrdup(optarg); diff --git a/src/support.c b/src/support.c index 3e80828..3b13416 100644 --- a/src/support.c +++ b/src/support.c @@ -63,6 +63,8 @@ void feh_wm_set_bg_file(char *file, unsigned char bgmode)  			break;  		case BG_MODE_FILL:  			feh_wm_set_bg(file, im, 0, 0, 1, 0, 1); +		case BG_MODE_MAX: +			feh_wm_set_bg(file, im, 0, 0, 2, 0, 1);  			break;  		default:  			feh_wm_set_bg(file, im, 1, 0, 0, 0, 1); @@ -205,7 +207,7 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,  			gib_imlib_render_image_on_drawable(pmap_d1, im, x, y, 1, 0, 0);  			XFreeGC(disp, gc);  			fehbg = estrjoin(" ", "feh --bg-center", filbuf, NULL); -		} else if (filled) { +		} else if (filled == 1) {  			int x = scr->width;  			int y = scr->height;  			int u = gib_imlib_image_get_width(im); @@ -226,6 +228,44 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,  			gib_imlib_render_image_on_drawable_at_size(pmap_d1, im, s, t,  					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; +			XGCValues gcval; + +			if(u>v) { +				w = x; +				h = (((x * 10) / u) * v) / 10; +				t = (y - h) / 2; +				if(h>y) { +					h = y; +					w = (((y * 10) / h) * w) / 10; +					s = (x - w) / 2; +					t = 0; +				} +			} else { +				h = y; +				w = (((y * 10) / v) * u) / 10; +				s = (x - w) / 2; +				if(w>x) { +					w = x; +					h = (((x * 10) / w) * h) / 10; +					s = 0; +					t = (y - h) / 2; +				} +			} + +			pmap_d1 = XCreatePixmap(disp, root, x, y, 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); +			XFreeGC(disp, gc); +			fehbg = estrjoin(" ", "feh --bg-max", filbuf, NULL);  		} else {  			w = gib_imlib_image_get_width(im);  			h = gib_imlib_image_get_height(im); | 
