diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2016-08-16 03:05:52 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2016-09-06 21:52:16 +0800 |
commit | d887bdc9c8a7133969eff97c2f9a96a84becb668 (patch) | |
tree | 3ba5ab54b7e3adfd72ebe9584faee4d62ea8d8f4 /source/fitz/list-device.c | |
parent | 2d3eca6dec6b8fc7a169b3fc357904069df6b6c4 (diff) | |
download | mupdf-d887bdc9c8a7133969eff97c2f9a96a84becb668.tar.xz |
Devices now handle colorspace being NULL as alpha-only.
Diffstat (limited to 'source/fitz/list-device.c')
-rw-r--r-- | source/fitz/list-device.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/source/fitz/list-device.c b/source/fitz/list-device.c index d5e13375..dc8b1f0b 100644 --- a/source/fitz/list-device.c +++ b/source/fitz/list-device.c @@ -257,12 +257,7 @@ fz_append_display_node( rect_off = size; size += SIZE_IN_NODES(sizeof(fz_rect)); } - if (color && !colorspace) - { - /* SoftMasks can omit a colorspace, but we know what they mean */ - colorspace = fz_device_gray(ctx); - } - if (colorspace) + if (color || colorspace) { if (colorspace != writer->colorspace) { @@ -307,7 +302,7 @@ fz_append_display_node( else { int i; - int n = colorspace->n; + int n = colorspace ? colorspace->n : 0; colorspace_off = size; size += SIZE_IN_NODES(sizeof(fz_colorspace *)); @@ -378,7 +373,7 @@ fz_append_display_node( else { int i; - int n = colorspace->n; + int n = colorspace ? colorspace->n : 0; for (i=0; i < n; i++) if (color[i] != 0.0f) break; @@ -394,7 +389,6 @@ fz_append_display_node( } if (color) { - int i, n; const float *wc = &writer->color[0]; @@ -569,7 +563,8 @@ fz_append_display_node( default: { fz_colorspace **out_colorspace = (fz_colorspace **)(void *)(&node_ptr[colorspace_off]); - int i, n = colorspace->n; + int i, n; + n = colorspace ? colorspace->n : 0; *out_colorspace = fz_keep_colorspace(ctx, colorspace); writer->colorspace = fz_keep_colorspace(ctx, colorspace); @@ -1296,7 +1291,9 @@ fz_drop_display_list_imp(fz_context *ctx, fz_storable *list_) cs_n = 4; break; case CS_OTHER_0: - cs_n = (*(fz_colorspace **)node)->n; + cs_n = 0; + if (*(fz_colorspace **)node) + cs_n = (*(fz_colorspace **)node)->n; fz_drop_colorspace(ctx, *(fz_colorspace **)node); node += SIZE_IN_NODES(sizeof(fz_colorspace *)); break; @@ -1442,7 +1439,7 @@ fz_run_display_list(fz_context *ctx, fz_display_list *list, fz_device *dev, cons } if (n.cs) { - int i; + int i, en; fz_drop_colorspace(ctx, colorspace); switch (n.cs) @@ -1485,7 +1482,8 @@ fz_run_display_list(fz_context *ctx, fz_display_list *list, fz_device *dev, cons case CS_OTHER_0: colorspace = fz_keep_colorspace(ctx, *(fz_colorspace **)(node)); node += SIZE_IN_NODES(sizeof(fz_colorspace *)); - for (i = 0; i < colorspace->n; i++) + en = colorspace ? colorspace->n : 0; + for (i = 0; i < en; i++) color[i] = 0.0f; break; } |