diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2018-02-27 17:07:08 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2018-02-27 17:07:08 +0100 | 
| commit | 89aeb953f6b8ce3c7d6974ddd82b51edc2641488 (patch) | |
| tree | f01673c61f398676ed5274aefaeffe7bc7802c0c | |
| parent | 4b01c25946d0ec14d80a3ef2077ac40b78ab68d6 (diff) | |
| parent | 5965739a0aa6e1f91989a011746c2709cb4e92dc (diff) | |
Merge branch 'custom-background-color' of https://github.com/ulteq/feh into ulteq-custom-background-color
| -rw-r--r-- | man/feh.pre | 2 | ||||
| -rw-r--r-- | src/feh.h | 2 | ||||
| -rw-r--r-- | src/help.raw | 2 | ||||
| -rw-r--r-- | src/options.c | 9 | ||||
| -rw-r--r-- | src/options.h | 2 | ||||
| -rw-r--r-- | src/wallpaper.c | 29 | ||||
| -rw-r--r-- | src/winwidget.c | 26 | 
7 files changed, 30 insertions, 42 deletions
| diff --git a/man/feh.pre b/man/feh.pre index f5d9b9c..6a022dc 100644 --- a/man/feh.pre +++ b/man/feh.pre @@ -379,7 +379,7 @@ Hide the pointer  .It Cm -B , --image-bg Ar style  .  Use style as background for transparent image parts and the like. -Accepted values: checks, white, black. +Accepted values: default, checks, or a XColor (eg. #428bdd).  .  The default for windowed mode is checks, while fullscreen defaults to black.  . @@ -107,8 +107,6 @@ enum slide_change { SLIDE_NEXT, SLIDE_PREV, SLIDE_RAND, SLIDE_FIRST, SLIDE_LAST,  	SLIDE_JUMP_PREV_DIR  }; -enum image_bg { IMAGE_BG_CHECKS = 1, IMAGE_BG_BLACK, IMAGE_BG_WHITE }; -  #define INPLACE_EDIT_FLIP   -1  #define INPLACE_EDIT_MIRROR -2 diff --git a/src/help.raw b/src/help.raw index 37e0e71..8b244c1 100644 --- a/src/help.raw +++ b/src/help.raw @@ -84,7 +84,7 @@ OPTIONS                             can be used multiple times to add multiple paths.   -M, --menu-font FONT      Use FONT for the font in menus.   -B, --image-bg STYLE      Set background for transparent images and the like. -                           Accepted values: white, black, default +                           Accepted values: default, checks, or a XColor (eg. #428bdd)   -N, --no-menus            Don't load or show any menus.       --no-xinerama         Disable Xinerama support       --no-screen-clip      Do not limit window size to screen size diff --git a/src/options.c b/src/options.c index 76d70c5..0ad7c74 100644 --- a/src/options.c +++ b/src/options.c @@ -454,14 +454,7 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  			opt.actions[0] = estrdup(optarg);  			break;  		case 'B': -			if (!strcmp(optarg, "checks")) -				opt.image_bg = IMAGE_BG_CHECKS; -			else if (!strcmp(optarg, "white")) -				opt.image_bg = IMAGE_BG_WHITE; -			else if (!strcmp(optarg, "black")) -				opt.image_bg = IMAGE_BG_BLACK; -			else -				weprintf("Unknown argument to --image-bg: %s", optarg); +			opt.image_bg = estrdup(optarg);  			break;  		case 'C':  			D(("adding fontpath %s\n", optarg)); diff --git a/src/options.h b/src/options.h index 9bf2763..33b2bd3 100644 --- a/src/options.h +++ b/src/options.h @@ -71,7 +71,6 @@ struct __fehoptions {  	unsigned char cycle_once;  	unsigned char hold_actions[10];  	unsigned char text_bg; -	unsigned char image_bg;  	unsigned char no_fehbg;  	unsigned char keep_zoom_vp;  	unsigned char insecure_ssl; @@ -80,6 +79,7 @@ struct __fehoptions {  	char *output_file;  	char *output_dir;  	char *bg_file; +	char *image_bg;  	char *font;  	char *title_font;  	char *title; diff --git a/src/wallpaper.c b/src/wallpaper.c index 34694ae..cfefb8f 100644 --- a/src/wallpaper.c +++ b/src/wallpaper.c @@ -307,15 +307,19 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,  		D(("Falling back to XSetRootWindowPixmap\n")); +		XColor color; +		Colormap cmap = DefaultColormap(disp, DefaultScreen(disp)); +		if (opt.image_bg) +			XAllocNamedColor(disp, cmap, (char*) opt.image_bg, &color, &color); +		else +			XAllocNamedColor(disp, cmap, "black", &color, &color); +  		if (scaled) {  			pmap_d1 = XCreatePixmap(disp, root, scr->width, scr->height, depth);  #ifdef HAVE_LIBXINERAMA  			if (opt.xinerama_index >= 0) { -				if (opt.image_bg == IMAGE_BG_WHITE) -					gcval.foreground = WhitePixel(disp, DefaultScreen(disp)); -				else -					gcval.foreground = BlackPixel(disp, DefaultScreen(disp)); +				gcval.foreground = color.pixel;  				gc = XCreateGC(disp, root, GCForeground, &gcval);  				XFillRectangle(disp, pmap_d1, gc, 0, 0, scr->width, scr->height);  				XFreeGC(disp, gc); @@ -339,10 +343,7 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,  			D(("centering\n"));  			pmap_d1 = XCreatePixmap(disp, root, scr->width, scr->height, depth); -			if (opt.image_bg == IMAGE_BG_WHITE) -				gcval.foreground = WhitePixel(disp, DefaultScreen(disp)); -			else -				gcval.foreground = BlackPixel(disp, DefaultScreen(disp)); +			gcval.foreground = color.pixel;  			gc = XCreateGC(disp, root, GCForeground, &gcval);  			XFillRectangle(disp, pmap_d1, gc, 0, 0, scr->width, scr->height); @@ -369,10 +370,7 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,  #ifdef HAVE_LIBXINERAMA  			if (opt.xinerama_index >= 0) { -				if (opt.image_bg == IMAGE_BG_WHITE) -					gcval.foreground = WhitePixel(disp, DefaultScreen(disp)); -				else -					gcval.foreground = BlackPixel(disp, DefaultScreen(disp)); +				gcval.foreground = color.pixel;  				gc = XCreateGC(disp, root, GCForeground, &gcval);  				XFillRectangle(disp, pmap_d1, gc, 0, 0, scr->width, scr->height);  				XFreeGC(disp, gc); @@ -395,10 +393,7 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,  		} else if (filled == 2) {  			pmap_d1 = XCreatePixmap(disp, root, scr->width, scr->height, depth); -			if (opt.image_bg == IMAGE_BG_WHITE) -				gcval.foreground = WhitePixel(disp, DefaultScreen(disp)); -			else -				gcval.foreground = BlackPixel(disp, DefaultScreen(disp)); +			gcval.foreground = color.pixel;  			gc = XCreateGC(disp, root, GCForeground, &gcval);  			XFillRectangle(disp, pmap_d1, gc, 0, 0, scr->width, scr->height); @@ -474,7 +469,7 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,  				free(path);  			}  		} -		 +  		/* create new display, copy pixmap to new display */  		disp2 = XOpenDisplay(NULL);  		if (!disp2) diff --git a/src/winwidget.c b/src/winwidget.c index 9600465..bb6181a 100644 --- a/src/winwidget.c +++ b/src/winwidget.c @@ -382,17 +382,18 @@ void winwidget_setup_pixmaps(winwidget winwid)  			if (winwid->gc == None) {  				XGCValues gcval; -				if (opt.image_bg == IMAGE_BG_WHITE) { -					gcval.foreground = WhitePixel(disp, DefaultScreen(disp)); +				if (!opt.image_bg || !strcmp(opt.image_bg, "default")) { +					gcval.foreground = BlackPixel(disp, DefaultScreen(disp));  					winwid->gc = XCreateGC(disp, winwid->win, GCForeground, &gcval); -				} -				else if (opt.image_bg == IMAGE_BG_CHECKS) { +				} else if (!strcmp(opt.image_bg, "checks")) {  					gcval.tile = feh_create_checks();  					gcval.fill_style = FillTiled;  					winwid->gc = XCreateGC(disp, winwid->win, GCTile | GCFillStyle, &gcval); -				} -				else { -					gcval.foreground = BlackPixel(disp, DefaultScreen(disp)); +				} else { +					XColor color; +					Colormap cmap = DefaultColormap(disp, DefaultScreen(disp)); +					XAllocNamedColor(disp, cmap, (char*) opt.image_bg, &color, &color); +					gcval.foreground = color.pixel;  					winwid->gc = XCreateGC(disp, winwid->win, GCForeground, &gcval);  				}  			} @@ -687,14 +688,15 @@ Pixmap feh_create_checks(void)  		if (!checks)  			eprintf("Unable to create a teeny weeny imlib image. I detect problems"); -		if (opt.image_bg == IMAGE_BG_WHITE) -			gib_imlib_image_fill_rectangle(checks, 0, 0, 16, 16, 255, 255, 255, 255); -		else if (opt.image_bg == IMAGE_BG_BLACK) -			gib_imlib_image_fill_rectangle(checks, 0, 0, 16, 16, 0, 0, 0, 255); -		else { +		if (!opt.image_bg || !strcmp(opt.image_bg, "default") || !strcmp(opt.image_bg, "checks")) {  			gib_imlib_image_fill_rectangle(checks, 0, 0, 16, 16, 144, 144, 144, 255);  			gib_imlib_image_fill_rectangle(checks, 0, 0,  8,  8, 100, 100, 100, 255);  			gib_imlib_image_fill_rectangle(checks, 8, 8,  8,  8, 100, 100, 100, 255); +		} else { +			XColor color; +			Colormap cmap = DefaultColormap(disp, DefaultScreen(disp)); +			XAllocNamedColor(disp, cmap, (char*) opt.image_bg, &color, &color); +			gib_imlib_image_fill_rectangle(checks, 0, 0, 16, 16, color.red, color.green, color.blue, 255);  		}  		checks_pmap = XCreatePixmap(disp, root, 16, 16, depth); | 
