summaryrefslogtreecommitdiffstats
path: root/image.c
diff options
context:
space:
mode:
authorBert Münnich <ber.t@posteo.de>2015-01-05 20:53:04 +0100
committerBert Münnich <ber.t@posteo.de>2015-01-05 20:53:04 +0100
commit47e6cd066902ec6e6295c6ae55245f8f4e53a56a (patch)
treebdcaf1436ff6f47bad2d35bcce6a788261309fd7 /image.c
parent47af0dd7b5e154fb64d8b4d6c5302ba905055799 (diff)
downloadnsxiv-47e6cd066902ec6e6295c6ae55245f8f4e53a56a.tar.zst
Apply gamma value on thumbnails too; fixes issue #193
Diffstat (limited to 'image.c')
-rw-r--r--image.c41
1 files changed, 11 insertions, 30 deletions
diff --git a/image.c b/image.c
index 240054f..fe2c6e8 100644
--- a/image.c
+++ b/image.c
@@ -46,22 +46,6 @@ static int zoomdiff(float z1, float z2)
return (int) (z1 * 1000.0 - z2 * 1000.0);
}
-static void img_apply_gamma(img_t *img)
-{
- if (img == NULL || img->im == NULL || img->cmod == NULL)
- return;
-
- if (img->gamma == 0) {
- imlib_context_set_color_modifier(NULL);
- } else {
- double range = img->gamma <= 0 ? 1.0 : GAMMA_MAX - 1.0;
-
- imlib_context_set_color_modifier(img->cmod);
- imlib_reset_color_modifier();
- imlib_modify_color_modifier_gamma(1.0 + img->gamma * (range / GAMMA_RANGE));
- }
-}
-
void img_init(img_t *img, win_t *win)
{
zoom_min = zoom_levels[0] / 100.0;
@@ -89,8 +73,9 @@ void img_init(img_t *img, win_t *win)
img->multi.length = 0;
img->cmod = imlib_create_color_modifier();
+ imlib_context_set_color_modifier(img->cmod);
img->gamma = MIN(MAX(options->gamma, -GAMMA_RANGE), GAMMA_RANGE);
-
+
img->ss.on = options->slideshow > 0;
img->ss.delay = options->slideshow > 0 ? options->slideshow : SLIDESHOW_DELAY;
}
@@ -339,8 +324,6 @@ bool img_load(img_t *img, const fileinfo_t *file)
img_load_gif(img, file);
#endif
}
- img_apply_gamma(img);
-
img->w = imlib_image_get_width();
img->h = imlib_image_get_height();
img->checkpan = true;
@@ -371,9 +354,6 @@ void img_close(img_t *img, bool decache)
imlib_free_image();
img->im = NULL;
}
-
- if (img->cmod)
- imlib_context_set_color_modifier(NULL);
}
void img_check_pan(img_t *img, bool moved)
@@ -529,10 +509,8 @@ void img_render(img_t *img)
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);
-
imlib_free_image();
- if (img->gamma != 0)
- imlib_context_set_color_modifier(img->cmod);
+ imlib_context_set_color_modifier(img->cmod);
} else {
imlib_render_image_part_on_drawable_at_size(sx, sy, sw, sh, dx, dy, dw, dh);
}
@@ -771,20 +749,23 @@ bool img_change_gamma(img_t *img, int d)
* d > 0: increase gamma
*/
int gamma;
+ double range;
- if (img == NULL || img->im == NULL)
+ if (img == NULL)
return false;
if (d == 0)
gamma = 0;
- else if (d < 0)
- gamma = MAX(-GAMMA_RANGE, img->gamma - 1);
else
- gamma = MIN(+GAMMA_RANGE, img->gamma + 1);
+ gamma = MIN(MAX(img->gamma + d, -GAMMA_RANGE), GAMMA_RANGE);
if (img->gamma != gamma) {
+ imlib_reset_color_modifier();
+ if (gamma != 0) {
+ range = gamma <= 0 ? 1.0 : GAMMA_MAX - 1.0;
+ imlib_modify_color_modifier_gamma(1.0 + gamma * (range / GAMMA_RANGE));
+ }
img->gamma = gamma;
- img_apply_gamma(img);
img->dirty = true;
return true;
} else {