diff options
| -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 c2a4cd1..90e6b20 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 c874832..03f5ae3 100644 --- a/src/options.c +++ b/src/options.c @@ -449,14 +449,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 c6959c8..fc9774e 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; @@ -79,6 +78,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 c9a3a05..5c50ad8 100644 --- a/src/wallpaper.c +++ b/src/wallpaper.c @@ -305,15 +305,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); @@ -337,10 +341,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); @@ -367,10 +368,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); @@ -393,10 +391,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); @@ -472,7 +467,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 d636a85..e0796fa 100644 --- a/src/winwidget.c +++ b/src/winwidget.c @@ -391,17 +391,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);  				}  			} @@ -700,14 +701,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); | 
