diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2013-05-16 22:29:27 +0200 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2013-05-16 23:47:14 +0100 |
commit | 93bd1ff05bf315ed11b305d32eb510bd9a9a7e92 (patch) | |
tree | 10c2d846ed1193624a5119853bbc2ef9651e197c /pdf | |
parent | 558ad511446cfa1d70891d9e7c9fb1ba942d3d9a (diff) | |
download | mupdf-93bd1ff05bf315ed11b305d32eb510bd9a9a7e92.tar.xz |
Add colorspace context.
To prepare for color management, we have to make the device colorspaces
per-context and able to be overridden by users.
Diffstat (limited to 'pdf')
-rw-r--r-- | pdf/pdf_annot.c | 16 | ||||
-rw-r--r-- | pdf/pdf_colorspace.c | 40 | ||||
-rw-r--r-- | pdf/pdf_device.c | 12 | ||||
-rw-r--r-- | pdf/pdf_interpret.c | 24 |
4 files changed, 46 insertions, 46 deletions
diff --git a/pdf/pdf_annot.c b/pdf/pdf_annot.c index 0c2128a7..25ffd494 100644 --- a/pdf/pdf_annot.c +++ b/pdf/pdf_annot.c @@ -768,16 +768,16 @@ pdf_delete_annot(pdf_document *doc, pdf_page *page, pdf_annot *annot) doc->dirty = 1; } -static fz_colorspace *pdf_to_color(pdf_obj *col, float color[4]) +static fz_colorspace *pdf_to_color(pdf_document *doc, pdf_obj *col, float color[4]) { fz_colorspace *cs; int i, ncol = pdf_array_len(col); switch (ncol) { - case 1: cs = fz_device_gray; break; - case 3: cs = fz_device_rgb; break; - case 4: cs = fz_device_cmyk; break; + case 1: cs = fz_device_gray(doc->ctx); break; + case 3: cs = fz_device_rgb(doc->ctx); break; + case 4: cs = fz_device_cmyk(doc->ctx); break; default: return NULL; } @@ -1031,7 +1031,7 @@ pdf_set_markup_obj_appearance(pdf_document *doc, pdf_obj *annot, float color[3], if (stroke) { // assert(path) - fz_stroke_path(dev, path, stroke, &fz_identity, fz_device_rgb, color, alpha); + fz_stroke_path(dev, path, stroke, &fz_identity, fz_device_rgb(ctx), color, alpha); fz_drop_stroke_state(ctx, stroke); stroke = NULL; fz_free_path(ctx, path); @@ -1049,7 +1049,7 @@ pdf_set_markup_obj_appearance(pdf_document *doc, pdf_obj *annot, float color[3], if (stroke) { - fz_stroke_path(dev, path, stroke, &fz_identity, fz_device_rgb, color, alpha); + fz_stroke_path(dev, path, stroke, &fz_identity, fz_device_rgb(ctx), color, alpha); } pdf_set_annot_obj_appearance(doc, annot, &fz_identity, &rect, strike_list); @@ -1090,10 +1090,10 @@ pdf_set_ink_obj_appearance(pdf_document *doc, pdf_obj *annot) pdf_obj *list; int n, m, i, j; - cs = pdf_to_color(pdf_dict_gets(annot, "C"), color); + cs = pdf_to_color(doc, pdf_dict_gets(annot, "C"), color); if (!cs) { - cs = fz_device_rgb; + cs = fz_device_rgb(ctx); color[0] = 1.0f; color[1] = 0.0f; color[2] = 0.0f; diff --git a/pdf/pdf_colorspace.c b/pdf/pdf_colorspace.c index a398b44f..21d67eeb 100644 --- a/pdf/pdf_colorspace.c +++ b/pdf/pdf_colorspace.c @@ -12,9 +12,9 @@ load_icc_based(pdf_document *xref, pdf_obj *dict) switch (n) { - case 1: return fz_device_gray; - case 3: return fz_device_rgb; - case 4: return fz_device_cmyk; + case 1: return fz_device_gray(xref->ctx); + case 3: return fz_device_rgb(xref->ctx); + case 4: return fz_device_cmyk(xref->ctx); } fz_throw(xref->ctx, "syntaxerror: ICCBased must have 1, 3 or 4 components"); @@ -224,19 +224,19 @@ pdf_load_colorspace_imp(pdf_document *xref, pdf_obj *obj) { const char *str = pdf_to_name(obj); if (!strcmp(str, "Pattern")) - return fz_device_gray; + return fz_device_gray(ctx); else if (!strcmp(str, "G")) - return fz_device_gray; + return fz_device_gray(ctx); else if (!strcmp(str, "RGB")) - return fz_device_rgb; + return fz_device_rgb(ctx); else if (!strcmp(str, "CMYK")) - return fz_device_cmyk; + return fz_device_cmyk(ctx); else if (!strcmp(str, "DeviceGray")) - return fz_device_gray; + return fz_device_gray(ctx); else if (!strcmp(str, "DeviceRGB")) - return fz_device_rgb; + return fz_device_rgb(ctx); else if (!strcmp(str, "DeviceCMYK")) - return fz_device_cmyk; + return fz_device_cmyk(ctx); else fz_throw(ctx, "unknown colorspace: %s", pdf_to_name(obj)); } @@ -250,23 +250,23 @@ pdf_load_colorspace_imp(pdf_document *xref, pdf_obj *obj) { /* load base colorspace instead */ if (!strcmp(str, "G")) - return fz_device_gray; + return fz_device_gray(ctx); else if (!strcmp(str, "RGB")) - return fz_device_rgb; + return fz_device_rgb(ctx); else if (!strcmp(str, "CMYK")) - return fz_device_cmyk; + return fz_device_cmyk(ctx); else if (!strcmp(str, "DeviceGray")) - return fz_device_gray; + return fz_device_gray(ctx); else if (!strcmp(str, "DeviceRGB")) - return fz_device_rgb; + return fz_device_rgb(ctx); else if (!strcmp(str, "DeviceCMYK")) - return fz_device_cmyk; + return fz_device_cmyk(ctx); else if (!strcmp(str, "CalGray")) - return fz_device_gray; + return fz_device_gray(ctx); else if (!strcmp(str, "CalRGB")) - return fz_device_rgb; + return fz_device_rgb(ctx); else if (!strcmp(str, "CalCMYK")) - return fz_device_cmyk; + return fz_device_cmyk(ctx); else if (!strcmp(str, "Lab")) return fz_device_lab; else @@ -295,7 +295,7 @@ pdf_load_colorspace_imp(pdf_document *xref, pdf_obj *obj) pobj = pdf_array_get(obj, 1); if (!pobj) { - cs = fz_device_gray; + cs = fz_device_gray(ctx); break; } diff --git a/pdf/pdf_device.c b/pdf/pdf_device.c index dd21fb4b..37256316 100644 --- a/pdf/pdf_device.c +++ b/pdf/pdf_device.c @@ -420,11 +420,11 @@ pdf_dev_color(pdf_device *pdev, fz_colorspace *colorspace, float *color, int str float rgb[FZ_MAX_COLORS]; gstate *gs = CURRENT_GSTATE(pdev); - if (colorspace == fz_device_gray) + if (colorspace == fz_device_gray(ctx)) cspace = 1; - else if (colorspace == fz_device_rgb) + else if (colorspace == fz_device_rgb(ctx)) cspace = 3; - else if (colorspace == fz_device_cmyk) + else if (colorspace == fz_device_cmyk(ctx)) cspace = 4; if (cspace == 0) @@ -432,7 +432,7 @@ pdf_dev_color(pdf_device *pdev, fz_colorspace *colorspace, float *color, int str /* If it's an unknown colorspace, fallback to rgb */ colorspace->to_rgb(ctx, colorspace, color, rgb); color = rgb; - colorspace = fz_device_rgb; + colorspace = fz_device_rgb(ctx); } if (gs->colorspace[stroke] != colorspace) @@ -1208,8 +1208,8 @@ fz_device *pdf_new_pdf_device(pdf_document *doc, pdf_obj *contents, pdf_obj *res pdev->gstates = fz_malloc_struct(ctx, gstate); pdev->gstates[0].buf = fz_new_buffer(ctx, 256); pdev->gstates[0].ctm = *ctm; - pdev->gstates[0].colorspace[0] = fz_device_gray; - pdev->gstates[0].colorspace[1] = fz_device_gray; + pdev->gstates[0].colorspace[0] = fz_device_gray(ctx); + pdev->gstates[0].colorspace[1] = fz_device_gray(ctx); pdev->gstates[0].color[0][0] = 1; pdev->gstates[0].color[1][0] = 1; pdev->gstates[0].alpha[0] = 1.0; diff --git a/pdf/pdf_interpret.c b/pdf/pdf_interpret.c index 2a50116e..b6821d27 100644 --- a/pdf/pdf_interpret.c +++ b/pdf/pdf_interpret.c @@ -969,7 +969,7 @@ pdf_init_gstate(fz_context *ctx, pdf_gstate *gs, const fz_matrix *ctm) gs->stroke_state = fz_new_stroke_state(ctx); gs->stroke.kind = PDF_MAT_COLOR; - gs->stroke.colorspace = fz_device_gray; /* No fz_keep_colorspace as static */ + gs->stroke.colorspace = fz_device_gray(ctx); /* No fz_keep_colorspace as static */ gs->stroke.v[0] = 0; gs->stroke.pattern = NULL; gs->stroke.shade = NULL; @@ -977,7 +977,7 @@ pdf_init_gstate(fz_context *ctx, pdf_gstate *gs, const fz_matrix *ctm) gs->stroke.gstate_num = -1; gs->fill.kind = PDF_MAT_COLOR; - gs->fill.colorspace = fz_device_gray; /* No fz_keep_colorspace as static */ + gs->fill.colorspace = fz_device_gray(ctx); /* No fz_keep_colorspace as static */ gs->fill.v[0] = 0; gs->fill.pattern = NULL; gs->fill.shade = NULL; @@ -1697,7 +1697,7 @@ pdf_run_extgstate(pdf_csi *csi, pdf_obj *rdb, pdf_obj *extgstate) colorspace = xobj->colorspace; if (!colorspace) - colorspace = fz_device_gray; + colorspace = fz_device_gray(ctx); /* The softmask_ctm no longer has the softmask matrix rolled into it, as this * causes the softmask matrix to be applied twice. */ @@ -1869,11 +1869,11 @@ static void pdf_run_cs_imp(pdf_csi *csi, pdf_obj *rdb, int what) else { if (!strcmp(csi->name, "DeviceGray")) - colorspace = fz_device_gray; /* No fz_keep_colorspace as static */ + colorspace = fz_device_gray(ctx); /* No fz_keep_colorspace as static */ else if (!strcmp(csi->name, "DeviceRGB")) - colorspace = fz_device_rgb; /* No fz_keep_colorspace as static */ + colorspace = fz_device_rgb(ctx); /* No fz_keep_colorspace as static */ else if (!strcmp(csi->name, "DeviceCMYK")) - colorspace = fz_device_cmyk; /* No fz_keep_colorspace as static */ + colorspace = fz_device_cmyk(ctx); /* No fz_keep_colorspace as static */ else { dict = pdf_dict_gets(rdb, "ColorSpace"); @@ -2016,7 +2016,7 @@ static void pdf_run_F(pdf_csi *csi) static void pdf_run_G(pdf_csi *csi) { csi->dev->flags &= ~FZ_DEVFLAG_STROKECOLOR_UNDEFINED; - pdf_set_colorspace(csi, PDF_STROKE, fz_device_gray); + pdf_set_colorspace(csi, PDF_STROKE, fz_device_gray(csi->dev->ctx)); pdf_set_color(csi, PDF_STROKE, csi->stack); } @@ -2033,7 +2033,7 @@ static void pdf_run_J(pdf_csi *csi) static void pdf_run_K(pdf_csi *csi) { csi->dev->flags &= ~FZ_DEVFLAG_STROKECOLOR_UNDEFINED; - pdf_set_colorspace(csi, PDF_STROKE, fz_device_cmyk); + pdf_set_colorspace(csi, PDF_STROKE, fz_device_cmyk(csi->dev->ctx)); pdf_set_color(csi, PDF_STROKE, csi->stack); } @@ -2057,7 +2057,7 @@ static void pdf_run_Q(pdf_csi *csi) static void pdf_run_RG(pdf_csi *csi) { csi->dev->flags &= ~FZ_DEVFLAG_STROKECOLOR_UNDEFINED; - pdf_set_colorspace(csi, PDF_STROKE, fz_device_rgb); + pdf_set_colorspace(csi, PDF_STROKE, fz_device_rgb(csi->dev->ctx)); pdf_set_color(csi, PDF_STROKE, csi->stack); } @@ -2348,7 +2348,7 @@ static void pdf_run_fstar(pdf_csi *csi) static void pdf_run_g(pdf_csi *csi) { csi->dev->flags &= ~FZ_DEVFLAG_FILLCOLOR_UNDEFINED; - pdf_set_colorspace(csi, PDF_FILL, fz_device_gray); + pdf_set_colorspace(csi, PDF_FILL, fz_device_gray(csi->dev->ctx)); pdf_set_color(csi, PDF_FILL, csi->stack); } @@ -2389,7 +2389,7 @@ static void pdf_run_j(pdf_csi *csi) static void pdf_run_k(pdf_csi *csi) { csi->dev->flags &= ~FZ_DEVFLAG_FILLCOLOR_UNDEFINED; - pdf_set_colorspace(csi, PDF_FILL, fz_device_cmyk); + pdf_set_colorspace(csi, PDF_FILL, fz_device_cmyk(csi->dev->ctx)); pdf_set_color(csi, PDF_FILL, csi->stack); } @@ -2439,7 +2439,7 @@ static void pdf_run_re(pdf_csi *csi) static void pdf_run_rg(pdf_csi *csi) { csi->dev->flags &= ~FZ_DEVFLAG_FILLCOLOR_UNDEFINED; - pdf_set_colorspace(csi, PDF_FILL, fz_device_rgb); + pdf_set_colorspace(csi, PDF_FILL, fz_device_rgb(csi->dev->ctx)); pdf_set_color(csi, PDF_FILL, csi->stack); } |