Krolyxon
Commit 47e6cd0

Branches

Refs →

nsxiv47e6cd0

Apply gamma value on thumbnails too; fixes issue #193

Author
Bert Münnich
Date
2015-01-05 20:53 +0100
Parent
47af0dd
Commit
47e6cd066902ec6e6295c6ae55245f8f4e53a56a

+27 −40

5 files changed

  1. M Makefile +1 −1
  2. M commands.c +11 −5
  3. M commands.lst +1 −1
  4. M config.def.h +3 −3
  5. M image.c +11 −30
M Makefile View
@@ -1,4 +1,4 @@
1−VERSION := git-20150104
1+VERSION := git-20150105
22
33 PREFIX := /usr/local
44 MANPREFIX := $(PREFIX)/share/man
M commands.c View
@@ -260,6 +260,17 @@ bool cg_navigate_marked(arg_t a)
260260 }
261261 }
262262
263+bool cg_change_gamma(arg_t a)
264+{
265+ if (img_change_gamma(&img, (long) a * (prefix > 0 ? prefix : 1))) {
266+ if (mode == MODE_THUMB)
267+ tns.dirty = true;
268+ return true;
269+ } else {
270+ return false;
271+ }
272+}
273+
263274 bool ci_navigate(arg_t a)
264275 {
265276 long n = (long) a;
@@ -419,11 +430,6 @@ bool ci_flip(arg_t a)
419430 return true;
420431 }
421432
422−bool ci_change_gamma(arg_t a)
423−{
424− return img_change_gamma(&img, (long) a);
425−}
426−
427433 bool ci_toggle_antialias(arg_t a)
428434 {
429435 img_toggle_antialias(&img);
M commands.lst View
@@ -13,6 +13,7 @@ G_CMD(toggle_image_mark)
1313 G_CMD(reverse_marks)
1414 G_CMD(unmark_all)
1515 G_CMD(navigate_marked)
16+G_CMD(change_gamma)
1617
1718 I_CMD(navigate)
1819 I_CMD(alternate)
@@ -25,7 +26,6 @@ I_CMD(set_zoom)
2526 I_CMD(fit_to_win)
2627 I_CMD(rotate)
2728 I_CMD(flip)
28−I_CMD(change_gamma)
2929 I_CMD(toggle_antialias)
3030 I_CMD(toggle_alpha)
3131 I_CMD(slideshow)
M config.def.h View
@@ -88,6 +88,9 @@ static const keymap_t keys[] = {
8888 { ControlMask, XK_m, g_unmark_all, (arg_t) None },
8989 { 0, XK_N, g_navigate_marked, (arg_t) +1 },
9090 { 0, XK_P, g_navigate_marked, (arg_t) -1 },
91+ { 0, XK_braceleft, g_change_gamma, (arg_t) -1 },
92+ { 0, XK_braceright, g_change_gamma, (arg_t) +1 },
93+ { ControlMask, XK_g, g_change_gamma, (arg_t) 0 },
9194
9295 { 0, XK_h, t_move_sel, (arg_t) DIR_LEFT },
9396 { 0, XK_Left, t_move_sel, (arg_t) DIR_LEFT },
@@ -133,9 +136,6 @@ static const keymap_t keys[] = {
133136 { 0, XK_question, i_rotate, (arg_t) DEGREE_180 },
134137 { 0, XK_bar, i_flip, (arg_t) FLIP_HORIZONTAL },
135138 { 0, XK_underscore, i_flip, (arg_t) FLIP_VERTICAL },
136− { 0, XK_braceleft, i_change_gamma, (arg_t) -1 },
137− { 0, XK_braceright, i_change_gamma, (arg_t) +1 },
138− { ControlMask, XK_g, i_change_gamma, (arg_t) 0 },
139139 { 0, XK_a, i_toggle_antialias, (arg_t) None },
140140 { 0, XK_A, i_toggle_alpha, (arg_t) None },
141141 { 0, XK_s, i_slideshow, (arg_t) None },
M image.c View
@@ -46,22 +46,6 @@ static int zoomdiff(float z1, float z2)
4646 return (int) (z1 * 1000.0 - z2 * 1000.0);
4747 }
4848
49−static void img_apply_gamma(img_t *img)
50−{
51− if (img == NULL || img->im == NULL || img->cmod == NULL)
52− return;
53−
54− if (img->gamma == 0) {
55− imlib_context_set_color_modifier(NULL);
56− } else {
57− double range = img->gamma <= 0 ? 1.0 : GAMMA_MAX - 1.0;
58−
59− imlib_context_set_color_modifier(img->cmod);
60− imlib_reset_color_modifier();
61− imlib_modify_color_modifier_gamma(1.0 + img->gamma * (range / GAMMA_RANGE));
62− }
63−}
64−
6549 void img_init(img_t *img, win_t *win)
6650 {
6751 zoom_min = zoom_levels[0] / 100.0;
@@ -89,8 +73,9 @@ void img_init(img_t *img, win_t *win)
8973 img->multi.length = 0;
9074
9175 img->cmod = imlib_create_color_modifier();
76+ imlib_context_set_color_modifier(img->cmod);
9277 img->gamma = MIN(MAX(options->gamma, -GAMMA_RANGE), GAMMA_RANGE);
93−
78+
9479 img->ss.on = options->slideshow > 0;
9580 img->ss.delay = options->slideshow > 0 ? options->slideshow : SLIDESHOW_DELAY;
9681 }
@@ -339,8 +324,6 @@ bool img_load(img_t *img, const fileinfo_t *file)
339324 img_load_gif(img, file);
340325 #endif
341326 }
342− img_apply_gamma(img);
343−
344327 img->w = imlib_image_get_width();
345328 img->h = imlib_image_get_height();
346329 img->checkpan = true;
@@ -371,9 +354,6 @@ void img_close(img_t *img, bool decache)
371354 imlib_free_image();
372355 img->im = NULL;
373356 }
374−
375− if (img->cmod)
376− imlib_context_set_color_modifier(NULL);
377357 }
378358
379359 void img_check_pan(img_t *img, bool moved)
@@ -529,10 +509,8 @@ void img_render(img_t *img)
529509 imlib_blend_image_onto_image(img->im, 0, sx, sy, sw, sh, 0, 0, dw, dh);
530510 imlib_context_set_color_modifier(NULL);
531511 imlib_render_image_on_drawable(dx, dy);
532−
533512 imlib_free_image();
534− if (img->gamma != 0)
535− imlib_context_set_color_modifier(img->cmod);
513+ imlib_context_set_color_modifier(img->cmod);
536514 } else {
537515 imlib_render_image_part_on_drawable_at_size(sx, sy, sw, sh, dx, dy, dw, dh);
538516 }
@@ -771,20 +749,23 @@ bool img_change_gamma(img_t *img, int d)
771749 * d > 0: increase gamma
772750 */
773751 int gamma;
752+ double range;
774753
775− if (img == NULL || img->im == NULL)
754+ if (img == NULL)
776755 return false;
777756
778757 if (d == 0)
779758 gamma = 0;
780− else if (d < 0)
781− gamma = MAX(-GAMMA_RANGE, img->gamma - 1);
782759 else
783− gamma = MIN(+GAMMA_RANGE, img->gamma + 1);
760+ gamma = MIN(MAX(img->gamma + d, -GAMMA_RANGE), GAMMA_RANGE);
784761
785762 if (img->gamma != gamma) {
763+ imlib_reset_color_modifier();
764+ if (gamma != 0) {
765+ range = gamma <= 0 ? 1.0 : GAMMA_MAX - 1.0;
766+ imlib_modify_color_modifier_gamma(1.0 + gamma * (range / GAMMA_RANGE));
767+ }
786768 img->gamma = gamma;
787− img_apply_gamma(img);
788769 img->dirty = true;
789770 return true;
790771 } else {