diff options
author | András Mohari <andras.mohari@gmail.com> | 2013-11-13 20:54:09 +0100 |
---|---|---|
committer | András Mohari <andras.mohari@gmail.com> | 2013-11-13 20:54:09 +0100 |
commit | 0353e6eea265f5f6fa53eb75300529d9ffa6d4fa (patch) | |
tree | 8b1e30131ec3eb3edd4cd7df7d955db3270b0c17 /image.c | |
parent | 450c1ed9b54de4d374bff80735c874bb6f7a4a0f (diff) | |
download | nsxiv-0353e6eea265f5f6fa53eb75300529d9ffa6d4fa.tar.zst |
Add support for changing the gamma value
Diffstat (limited to 'image.c')
-rw-r--r-- | image.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -67,6 +67,9 @@ void img_init(img_t *img, win_t *win) img->alpha = !RENDER_WHITE_ALPHA; img->multi.cap = img->multi.cnt = 0; img->multi.animate = false; + + img->cmod = imlib_create_color_modifier(); + img_set_gamma(img, options->gamma); } void exif_auto_orientate(const fileinfo_t *file) @@ -303,6 +306,8 @@ bool img_load(img_t *img, const fileinfo_t *file) img_load_gif(img, file); #endif + img_set_gamma(img, img->gamma); + img->w = imlib_image_get_width(); img->h = imlib_image_get_height(); img->scalemode = options->scalemode; @@ -335,6 +340,9 @@ 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) @@ -706,6 +714,28 @@ void img_toggle_antialias(img_t *img) img->dirty = true; } +void img_set_gamma(img_t *img, int gamma) +{ + if (img == NULL) + return; + + img->gamma = MIN(MAX(gamma, -GAMMA_RANGE), GAMMA_RANGE); + + if (img->im && img->cmod) { + 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 + (double) img->gamma + * (range / (double) GAMMA_RANGE)); + } + img->dirty = true; + } +} + bool img_frame_goto(img_t *img, int n) { if (img == NULL || img->im == NULL) |