diff options
-rw-r--r-- | fiv-io.c | 12 | ||||
-rw-r--r-- | fiv-io.h | 4 | ||||
-rw-r--r-- | fiv-thumbnail.c | 7 | ||||
-rw-r--r-- | fiv-view.c | 3 |
4 files changed, 17 insertions, 9 deletions
@@ -2310,11 +2310,11 @@ load_resvg_render_internal(FivIoRenderClosureResvg *self, } static FivIoImage * -load_resvg_render(FivIoRenderClosure *closure, double scale) +load_resvg_render( + FivIoRenderClosure *closure, FivIoProfile target, double scale) { FivIoRenderClosureResvg *self = (FivIoRenderClosureResvg *) closure; - // TODO(p): Somehow get the target colour management profile. - return load_resvg_render_internal(self, scale, NULL, NULL); + return load_resvg_render_internal(self, scale, target, NULL); } static const char * @@ -2434,11 +2434,11 @@ load_librsvg_render_internal(FivIoRenderClosureLibrsvg *self, double scale, } static FivIoImage * -load_librsvg_render(FivIoRenderClosure *closure, double scale) +load_librsvg_render( + FivIoRenderClosure *closure, FivIoProfile target, double scale) { FivIoRenderClosureLibrsvg *self = (FivIoRenderClosureLibrsvg *) closure; - // TODO(p): Somehow get the target colour management profile. - return load_librsvg_render_internal(self, scale, NULL, NULL); + return load_librsvg_render_internal(self, scale, target, NULL); } static FivIoImage * @@ -56,9 +56,11 @@ enum _FivIoOrientation { FivIoOrientation270 = 8 }; +// TODO(p): Maybe make FivIoProfile a referencable type, +// then loaders could store it in their closures. struct _FivIoRenderClosure { /// The rendering is allowed to fail, returning NULL. - FivIoImage *(*render)(FivIoRenderClosure *, double scale); + FivIoImage *(*render)(FivIoRenderClosure *, FivIoProfile, double scale); void (*destroy)(FivIoRenderClosure *); }; diff --git a/fiv-thumbnail.c b/fiv-thumbnail.c index 267daf7..cc0858c 100644 --- a/fiv-thumbnail.c +++ b/fiv-thumbnail.c @@ -139,6 +139,7 @@ render(GFile *target, GBytes *data, gboolean *color_managed, GError **error) { FivIoOpenContext ctx = { .uri = g_file_get_uri(target), + // Remember to synchronize changes with adjust_thumbnail(). .screen_profile = fiv_io_profile_new_sRGB(), .screen_dpi = 96, .first_frame_only = TRUE, @@ -180,8 +181,12 @@ adjust_thumbnail(FivIoImage *thumbnail, double row_height) // Vector images should not have orientation, this should handle them all. FivIoRenderClosure *closure = thumbnail->render; if (closure && orientation <= FivIoOrientation0) { + // Remember to synchronize changes with render(). + FivIoProfile screen_profile = fiv_io_profile_new_sRGB(); // This API doesn't accept non-uniform scaling; prefer a vertical fit. - FivIoImage *scaled = closure->render(closure, scale_y); + FivIoImage *scaled = closure->render(closure, screen_profile, scale_y); + if (screen_profile) + fiv_io_profile_free(screen_profile); if (scaled) return scaled; } @@ -409,7 +409,8 @@ prescale_page(FivView *self) // If it fails, the previous frame pointer may become invalid. g_clear_pointer(&self->page_scaled, fiv_io_image_unref); - self->frame = self->page_scaled = closure->render(closure, self->scale); + self->frame = self->page_scaled = closure->render(closure, + self->enable_cms ? self->screen_cms_profile : NULL, self->scale); if (!self->page_scaled) self->frame = self->page; } |