Use a checkerboard background for alpha layer; fixes issue #138
This commit is contained in:
		
							parent
							
								
									6d7acac3d1
								
							
						
					
					
						commit
						e685859a30
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,4 +1,4 @@ | ||||
| VERSION = git-20140317 | ||||
| VERSION = git-20140406 | ||||
| 
 | ||||
| PREFIX    = /usr/local | ||||
| MANPREFIX = $(PREFIX)/share/man | ||||
|  | ||||
| @ -102,7 +102,6 @@ of small previews is displayed, making it easy to choose an image to open. | ||||
|     f            Toggle fullscreen mode (requires an EWMH/NetWM compliant | ||||
|                  window manager) | ||||
|     b            Toggle visibility of info bar on bottom of window | ||||
|     A            Toggle visibility of alpha-channel, i.e. transparency | ||||
| 
 | ||||
|     r            Reload image | ||||
|     R            Reload all thumbnails | ||||
| @ -149,6 +148,7 @@ of small previews is displayed, making it easy to choose an image to open. | ||||
|     Ctrl-g       Reset gamma | ||||
| 
 | ||||
|     a            Toggle anti-aliasing | ||||
|     A            Toggle visibility of alpha-channel, i.e. transparency | ||||
| 
 | ||||
|     s            Toggle slideshow or set delay to [count] seconds | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										17
									
								
								commands.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								commands.c
									
									
									
									
									
								
							| @ -75,10 +75,8 @@ cmdreturn_t it_quit(arg_t a) | ||||
| cmdreturn_t it_switch_mode(arg_t a) | ||||
| { | ||||
| 	if (mode == MODE_IMAGE) { | ||||
| 		if (tns.thumbs == NULL) { | ||||
| 		if (tns.thumbs == NULL) | ||||
| 			tns_init(&tns, filecnt, &win); | ||||
| 			tns.alpha = img.alpha; | ||||
| 		} | ||||
| 		img_close(&img, false); | ||||
| 		reset_timeout(reset_cursor); | ||||
| 		if (img.ss.on) { | ||||
| @ -494,14 +492,15 @@ cmdreturn_t i_toggle_antialias(arg_t a) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| cmdreturn_t it_toggle_alpha(arg_t a) | ||||
| cmdreturn_t i_toggle_alpha(arg_t a) | ||||
| { | ||||
| 	img.alpha = tns.alpha = !img.alpha; | ||||
| 	if (mode == MODE_IMAGE) | ||||
| 	if (mode == MODE_IMAGE) { | ||||
| 		img.alpha = !img.alpha; | ||||
| 		img.dirty = true; | ||||
| 	else | ||||
| 		tns.dirty = true; | ||||
| 	return CMD_DIRTY; | ||||
| 		return CMD_DIRTY; | ||||
| 	} else { | ||||
| 		return CMD_INVALID; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| cmdreturn_t i_change_gamma(arg_t a) | ||||
|  | ||||
| @ -74,7 +74,7 @@ cmdreturn_t i_rotate(arg_t); | ||||
| cmdreturn_t i_flip(arg_t); | ||||
| cmdreturn_t i_slideshow(arg_t); | ||||
| cmdreturn_t i_toggle_antialias(arg_t); | ||||
| cmdreturn_t it_toggle_alpha(arg_t); | ||||
| cmdreturn_t i_toggle_alpha(arg_t); | ||||
| cmdreturn_t i_change_gamma(arg_t); | ||||
| 
 | ||||
| #endif /* COMMANDS_H */ | ||||
|  | ||||
							
								
								
									
										25
									
								
								config.def.h
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								config.def.h
									
									
									
									
									
								
							| @ -47,25 +47,22 @@ enum { | ||||
| static const double GAMMA_MAX   = 10.0; | ||||
| static const int    GAMMA_RANGE = 32; | ||||
| 
 | ||||
| /* if false, pixelate images at zoom level != 100%,
 | ||||
|  * toggled with 'a' key binding | ||||
|  */ | ||||
| static const bool ANTI_ALIAS = true; | ||||
| 
 | ||||
| /* if true, use a checkerboard background for alpha layer,
 | ||||
|  * toggled with 'A' key binding | ||||
|  */ | ||||
| static const bool ALPHA_LAYER = false; | ||||
| 
 | ||||
| #endif | ||||
| #ifdef _THUMBS_CONFIG | ||||
| 
 | ||||
| /* default dimension of thumbnails (width == height): */ | ||||
| enum { THUMB_SIZE = 60 }; | ||||
| 
 | ||||
| #endif | ||||
| #ifdef _RENDER_CONFIG | ||||
| 
 | ||||
| /* if false, pixelate images at zoom level != 100%,
 | ||||
|  * toggled with 'a' key binding | ||||
|  */ | ||||
| static const bool RENDER_ANTI_ALIAS = true; | ||||
| 
 | ||||
| /* if true, use white background for alpha layer,
 | ||||
|  * toggled with 'A' key binding | ||||
|  */ | ||||
| static const bool RENDER_WHITE_ALPHA = false; | ||||
| 
 | ||||
| #endif | ||||
| #ifdef _MAPPINGS_CONFIG | ||||
| 
 | ||||
| @ -145,7 +142,7 @@ static const keymap_t keys[] = { | ||||
| 	{ 0,            XK_s,             i_slideshow,          (arg_t) None }, | ||||
| 
 | ||||
| 	{ 0,            XK_a,             i_toggle_antialias,   (arg_t) None }, | ||||
| 	{ 0,            XK_A,             it_toggle_alpha,      (arg_t) None }, | ||||
| 	{ 0,            XK_A,             i_toggle_alpha,       (arg_t) None }, | ||||
| 
 | ||||
| 	{ 0,            XK_braceleft,     i_change_gamma,       (arg_t) -1 }, | ||||
| 	{ 0,            XK_braceright,    i_change_gamma,       (arg_t) +1 }, | ||||
|  | ||||
							
								
								
									
										30
									
								
								image.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								image.c
									
									
									
									
									
								
							| @ -18,7 +18,6 @@ | ||||
| 
 | ||||
| #define _POSIX_C_SOURCE 200112L | ||||
| #define _IMAGE_CONFIG | ||||
| #define _RENDER_CONFIG | ||||
| 
 | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| @ -80,8 +79,8 @@ void img_init(img_t *img, win_t *win) | ||||
| 	img->zoom = MIN(img->zoom, zoom_max); | ||||
| 	img->checkpan = false; | ||||
| 	img->dirty = false; | ||||
| 	img->aa = RENDER_ANTI_ALIAS; | ||||
| 	img->alpha = !RENDER_WHITE_ALPHA; | ||||
| 	img->aa = ANTI_ALIAS; | ||||
| 	img->alpha = ALPHA_LAYER; | ||||
| 	img->multi.cap = img->multi.cnt = 0; | ||||
| 	img->multi.animate = false; | ||||
| 	img->multi.length = img->multi.repeat = 0; | ||||
| @ -497,13 +496,26 @@ void img_render(img_t *img) | ||||
| 		imlib_context_set_image(bg); | ||||
| 		imlib_image_set_has_alpha(0); | ||||
| 
 | ||||
| 		if (img->alpha) | ||||
| 			c = win->fullscreen ? win->fscol : win->bgcol; | ||||
| 		else | ||||
| 			c = win->white; | ||||
| 		imlib_context_set_color(c >> 16 & 0xFF, c >> 8 & 0xFF, c & 0xFF, 0xFF); | ||||
| 		imlib_image_fill_rectangle(0, 0, dw, dh); | ||||
| 		if (img->alpha) { | ||||
| 			int i, c, r; | ||||
| 			DATA32 col[2] = { 0xFF666666, 0xFF999999 }; | ||||
| 			DATA32 * data = imlib_image_get_data(); | ||||
| 
 | ||||
| 			for (r = 0; r < dh; r++) { | ||||
| 				i = r * dw; | ||||
| 				if (r == 0 || r == 8) { | ||||
| 					for (c = 0; c < dw; c++) | ||||
| 						data[i++] = col[!(c & 8) ^ !r]; | ||||
| 				} else { | ||||
| 					memcpy(&data[i], &data[(r & 8) * dw], dw * sizeof(data[0])); | ||||
| 				} | ||||
| 			} | ||||
| 			imlib_image_put_back_data(data); | ||||
| 		} else { | ||||
| 			c = win->fullscreen ? win->fscol : win->bgcol; | ||||
| 			imlib_context_set_color(c >> 16 & 0xFF, c >> 8 & 0xFF, c & 0xFF, 0xFF); | ||||
| 			imlib_image_fill_rectangle(0, 0, dw, dh); | ||||
| 		} | ||||
| 		imlib_blend_image_onto_image(img->im, 0, sx, sy, sw, sh, 0, 0, dw, dh); | ||||
| 		imlib_context_set_color_modifier(NULL); | ||||
| 		imlib_render_image_on_drawable(dx, dy); | ||||
|  | ||||
							
								
								
									
										6
									
								
								sxiv.1
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								sxiv.1
									
									
									
									
									
								
							| @ -121,9 +121,6 @@ Toggle visibility of info bar on bottom of window. | ||||
| .B Ctrl-x | ||||
| Send the next key to the external key-handler. | ||||
| .TP | ||||
| .B A | ||||
| Toggle visibility of alpha-channel, i.e. image transparency. | ||||
| .TP | ||||
| .B r | ||||
| Reload image. | ||||
| .TP | ||||
| @ -309,6 +306,9 @@ Reset gamma. | ||||
| .B a | ||||
| Toggle anti-aliasing. | ||||
| .TP | ||||
| .B A | ||||
| Toggle visibility of alpha-channel, i.e. image transparency. | ||||
| .TP | ||||
| .B s | ||||
| Toggle slideshow mode and/or set the delay between images to | ||||
| .I count | ||||
|  | ||||
							
								
								
									
										6
									
								
								thumbs.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								thumbs.c
									
									
									
									
									
								
							| @ -18,7 +18,6 @@ | ||||
| 
 | ||||
| #define _POSIX_C_SOURCE 200112L | ||||
| #define _THUMBS_CONFIG | ||||
| #define _RENDER_CONFIG | ||||
| 
 | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| @ -177,7 +176,6 @@ void tns_init(tns_t *tns, int cnt, win_t *win) | ||||
| 	tns->cap = cnt; | ||||
| 	tns->cnt = tns->first = tns->sel = 0; | ||||
| 	tns->win = win; | ||||
| 	tns->alpha = !RENDER_WHITE_ALPHA; | ||||
| 	tns->dirty = false; | ||||
| 
 | ||||
| 	if ((homedir = getenv("XDG_CACHE_HOME")) == NULL || homedir[0] == '\0') { | ||||
| @ -360,10 +358,6 @@ void tns_render(tns_t *tns) | ||||
| 		t->x = x + (THUMB_SIZE - t->w) / 2; | ||||
| 		t->y = y + (THUMB_SIZE - t->h) / 2; | ||||
| 		imlib_context_set_image(t->im); | ||||
| 
 | ||||
| 		if (!tns->alpha && imlib_image_has_alpha()) | ||||
| 			win_draw_rect(win, win->pm, t->x, t->y, t->w, t->h, true, 0, win->white); | ||||
| 
 | ||||
| 		imlib_render_image_part_on_drawable_at_size(0, 0, t->w, t->h, | ||||
| 		                                            t->x, t->y, t->w, t->h); | ||||
| 		if (t->file->marked) | ||||
|  | ||||
							
								
								
									
										1
									
								
								thumbs.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								thumbs.h
									
									
									
									
									
								
							| @ -47,7 +47,6 @@ typedef struct { | ||||
| 	int cols; | ||||
| 	int rows; | ||||
| 
 | ||||
| 	bool alpha; | ||||
| 	bool dirty; | ||||
| } tns_t; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										1
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								window.c
									
									
									
									
									
								
							| @ -163,7 +163,6 @@ void win_init(win_t *win) | ||||
| 
 | ||||
| 	win_init_font(e->dpy, BAR_FONT); | ||||
| 
 | ||||
| 	win->white     = WhitePixel(e->dpy, e->scr); | ||||
| 	win->bgcol     = win_alloc_color(win, WIN_BG_COLOR); | ||||
| 	win->fscol     = win_alloc_color(win, WIN_FS_COLOR); | ||||
| 	win->selcol    = win_alloc_color(win, SEL_COLOR); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Bert Münnich
						Bert Münnich