diff --git a/libspectre/spectre-device.c b/libspectre/spectre-device.c index a527d86..8f8a8df 100644 --- a/libspectre/spectre-device.c +++ b/libspectre/spectre-device.c @@ -177,6 +177,7 @@ spectre_device_render (SpectreDevice *device, char **args; int n_args = 13; int arg = 0; + int image_format; int success; char *fmt; char *text_alpha, *graph_alpha; @@ -211,7 +212,29 @@ spectre_device_render (SpectreDevice *device, n_args++; if (rc->width != -1 && rc->height != -1) n_args += 3; - + + switch (rc->image_format) { + case SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_4: + image_format = DISPLAY_ROW_ALIGN_4; + break; + case SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_8: + image_format = DISPLAY_ROW_ALIGN_8; + break; + case SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_16: + image_format = DISPLAY_ROW_ALIGN_16; + break; + case SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_32: + image_format = DISPLAY_ROW_ALIGN_32; + break; + case SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_64: + image_format = DISPLAY_ROW_ALIGN_64; + break; + case SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_DEFAULT: + default: + image_format = DISPLAY_ROW_ALIGN_DEFAULT; + break; + } + args = calloc (sizeof (char *), n_args); args[arg++] = "libspectre"; /* This value doesn't really matter */ args[arg++] = "-dMaxBitmap=10000000"; @@ -231,7 +254,7 @@ spectre_device_render (SpectreDevice *device, args[arg++] = dsp_format = _spectre_strdup_printf ("-dDisplayFormat=%d", DISPLAY_COLORS_RGB | DISPLAY_DEPTH_8 | - DISPLAY_ROW_ALIGN_32 | + image_format | #ifdef WORDS_BIGENDIAN DISPLAY_UNUSED_FIRST | DISPLAY_BIGENDIAN | diff --git a/libspectre/spectre-private.h b/libspectre/spectre-private.h index c868067..cf1cf04 100644 --- a/libspectre/spectre-private.h +++ b/libspectre/spectre-private.h @@ -42,6 +42,7 @@ struct SpectreRenderContext { int text_alpha_bits; int graphic_alpha_bits; int use_platform_fonts; + int image_format; }; struct SpectreExporter { diff --git a/libspectre/spectre-render-context.c b/libspectre/spectre-render-context.c index 8a0d224..81a070c 100644 --- a/libspectre/spectre-render-context.c +++ b/libspectre/spectre-render-context.c @@ -44,7 +44,7 @@ spectre_render_context_new (void) rc->text_alpha_bits = 4; rc->graphic_alpha_bits = 2; rc->use_platform_fonts = TRUE; - + rc->image_format = SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_32; return rc; } @@ -207,3 +207,20 @@ spectre_render_context_get_antialias_bits (SpectreRenderContext *rc, if (text_bits) *text_bits = rc->text_alpha_bits; } + +void +spectre_render_context_set_image_format (SpectreRenderContext *rc, + SpectreRenderContextImageFormat image_format) +{ + _spectre_return_if_fail (rc != NULL); + + rc->image_format = image_format; +} + +SpectreRenderContextImageFormat +spectre_render_context_get_image_format (SpectreRenderContext *rc) +{ + _spectre_return_val_if_fail (rc != NULL, SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_DEFAULT); + + return rc->image_format; +} diff --git a/libspectre/spectre-render-context.h b/libspectre/spectre-render-context.h index e1e7750..09291fa 100644 --- a/libspectre/spectre-render-context.h +++ b/libspectre/spectre-render-context.h @@ -25,6 +25,15 @@ SPECTRE_BEGIN_DECLS +typedef enum _SpectreRenderContextImageFormat { + SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_DEFAULT, + SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_4, + SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_8, + SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_16, + SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_32, + SPECTRE_RENDER_CONTEXT_IMAGE_FORMAT_64, +} SpectreRenderContextImageFormat; + /*! This object defines how a page will be rendered */ typedef struct SpectreRenderContext SpectreRenderContext; @@ -138,6 +147,11 @@ void spectre_render_context_get_antialias_bits (SpectreRend int *graphics_bits, int *text_bits); +void spectre_render_context_set_image_format (SpectreRenderContext *rc, + SpectreRenderContextImageFormat image_format); + +SpectreRenderContextImageFormat spectre_render_context_get_image_format (SpectreRenderContext *rc); + SPECTRE_END_DECLS #endif /* SPECTRE_PAGE_H */