diff options
Diffstat (limited to 'src/ghost/gdevstp.c')
-rw-r--r-- | src/ghost/gdevstp.c | 737 |
1 files changed, 0 insertions, 737 deletions
diff --git a/src/ghost/gdevstp.c b/src/ghost/gdevstp.c deleted file mode 100644 index 2b565f6..0000000 --- a/src/ghost/gdevstp.c +++ /dev/null @@ -1,737 +0,0 @@ -/* - - stp driver for ghostscript - - -gs frontend derived from gdevbmp and gdevcdj - - - written in January 2000 by - Henryk Richter <buggs@comlab.uni-rostock.de> - for ghostscript 5.x/6.x - - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/*$Id: gdevstp.c,v 1.14.2.1 2002/01/24 01:29:02 rlk Exp $ */ -/* stp output driver */ -#include "gdevprn.h" -#include "gdevpccm.h" -#include "gsparam.h" -#include <stdlib.h> - -#ifdef DISABLE_NLS -#include "gdevstp-print.h" -#else -#include <gimp-print/gimp-print.h> -#endif - -/* internal debugging output ? */ - -private int stp_debug = 0; - -#define STP_DEBUG(x) do { if (stp_debug || getenv("STP_DEBUG")) x; } while (0) - -/* ------ The device descriptors ------ */ - -#define X_DPI 360 -#define Y_DPI 360 - -private dev_proc_map_rgb_color(stp_map_16m_rgb_color); -private dev_proc_map_color_rgb(stp_map_16m_color_rgb); -private dev_proc_print_page(stp_print_page); -private dev_proc_get_params(stp_get_params); -private dev_proc_put_params(stp_put_params); -private dev_proc_open_device(stp_open); - -/* 24-bit color. ghostscript driver */ -private const gx_device_procs stpm_procs = -prn_color_params_procs( - stp_open, /*gdev_prn_open,*/ /* open file, delegated */ - gdev_prn_output_page, /* output page, delegated */ - gdev_prn_close, /* close file, delegated */ - stp_map_16m_rgb_color, /* map color (own) */ - stp_map_16m_color_rgb, /* map color (own) */ - stp_get_params, /* get params (own) */ - stp_put_params /* put params (own) */ - ); - -gx_device_printer gs_stp_device = -prn_device(stpm_procs, "stp", - DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, - X_DPI, Y_DPI, - 0, 0, 0, 0, /* margins */ - 24, stp_print_page); - -/* private data structure */ -typedef struct -{ - int topoffset; /* top offset in pixels */ - int bottom; - stp_vars_t v; -} privdata_t; - -/* global variables, RO for subfunctions */ -private privdata_t stp_data = -{ 0, 0, NULL }; - -typedef struct -{ - gx_device_printer *dev; - privdata_t *data; - uint raster; -} stp_priv_image_t; - -static const char *Image_get_appname(stp_image_t *image); -static void Image_progress_conclude(stp_image_t *image); -static void Image_note_progress(stp_image_t *image, - double current, double total); -static void Image_progress_init(stp_image_t *image); -static stp_image_status_t Image_get_row(stp_image_t *image, - unsigned char *data, int row); -static int Image_height(stp_image_t *image); -static int Image_width(stp_image_t *image); -static int Image_bpp(stp_image_t *image); -static void Image_rotate_180(stp_image_t *image); -static void Image_rotate_cw(stp_image_t *image); -static void Image_rotate_ccw(stp_image_t *image); -static void Image_init(stp_image_t *image); - -static stp_image_t theImage = -{ - Image_init, - NULL, /* reset */ - NULL, /* transpose */ - NULL, /* hflip */ - NULL, /* vflip */ - NULL, /* crop */ - Image_rotate_ccw, - Image_rotate_cw, - Image_rotate_180, - Image_bpp, - Image_width, - Image_height, - Image_get_row, - Image_get_appname, - Image_progress_init, - Image_note_progress, - Image_progress_conclude, - NULL -}; - -/* ------ Private definitions ------ */ - -/*********************************************************************** -* ghostscript driver function calls * -***********************************************************************/ - -private void -stp_dbg(const char *msg, const privdata_t *stp_data) -{ - fprintf(gs_stderr,"%s Settings: c: %f m: %f y: %f\n", - msg, stp_get_cyan(stp_data->v), stp_get_magenta(stp_data->v), - stp_get_yellow(stp_data->v)); - fprintf(gs_stderr, "Ink type %s\n", stp_get_ink_type(stp_data->v)); - - fprintf(gs_stderr,"Settings: bright: %f contrast: %f\n", - stp_get_brightness(stp_data->v), stp_get_contrast(stp_data->v)); - - fprintf(gs_stderr,"Settings: Gamma: %f Saturation: %f Density: %f\n", - stp_get_gamma(stp_data->v), stp_get_saturation(stp_data->v), - stp_get_density(stp_data->v)); - fprintf(gs_stderr, "Settings: width %d, height %d\n", - stp_get_page_width(stp_data->v), stp_get_page_height(stp_data->v)); - fprintf(gs_stderr, "Settings: output type %d image type %d\n", - stp_get_output_type(stp_data->v), stp_get_image_type(stp_data->v)); - fprintf(gs_stderr, "Settings: Quality %s\n", - stp_get_resolution(stp_data->v)); - fprintf(gs_stderr, "Settings: Dither %s\n", - stp_get_dither_algorithm(stp_data->v)); - fprintf(gs_stderr, "Settings: InputSlot %s\n", - stp_get_media_source(stp_data->v)); - fprintf(gs_stderr, "Settings: MediaType %s\n", - stp_get_media_type(stp_data->v)); - fprintf(gs_stderr, "Settings: MediaSize %s\n", - stp_get_media_size(stp_data->v)); - fprintf(gs_stderr, "Settings: Model %s\n", stp_get_driver(stp_data->v)); - fprintf(gs_stderr, "Settings: InkType %s\n", stp_get_ink_type(stp_data->v)); - fprintf(gs_stderr, "Settings: OutputTo %s\n", stp_get_output_to(stp_data->v)); -} - -private void -stp_print_dbg(const char *msg, gx_device_printer *pdev, - const privdata_t *stp_data) -{ - STP_DEBUG(if (pdev) - fprintf(gs_stderr,"%s Image: %d x %d pixels, %f x %f dpi\n", - msg, pdev->width, pdev->height, pdev->x_pixels_per_inch, - pdev->y_pixels_per_inch)); - STP_DEBUG(stp_dbg(msg, stp_data)); -} - -private void -stp_print_debug(const char *msg, gx_device *pdev, - const privdata_t *stp_data) -{ - STP_DEBUG(if (pdev) - fprintf(gs_stderr,"%s Image: %d x %d pixels, %f x %f dpi\n", - msg, pdev->width, pdev->height, pdev->x_pixels_per_inch, - pdev->y_pixels_per_inch)); - STP_DEBUG(stp_dbg(msg, stp_data)); -} - -private void -stp_init_vars(void) -{ - STP_DEBUG(fprintf(gs_stderr, "Calling ")); - if (! stp_data.v) - { - STP_DEBUG(fprintf(gs_stderr, "and initializing ")); - stp_init(); - stp_data.v = stp_allocate_vars(); - stp_set_driver(stp_data.v, ""); -/* stp_set_media_size(stp_data.v, "Letter"); */ - } - STP_DEBUG(fprintf(gs_stderr, "stp_init_vars\n")); -} - - -private void -stp_writefunc(void *file, const char *buf, size_t bytes) -{ - FILE *prn = (FILE *)file; - fwrite(buf, 1, bytes, prn); -} - -private int -stp_print_page(gx_device_printer * pdev, FILE * file) -{ - stp_priv_image_t gsImage; - private int printvars_merged = 0; - int code; /* return code */ - stp_printer_t printer = NULL; - uint stp_raster; - byte *stp_row; - stp_papersize_t p; - theImage.rep = &gsImage; - - stp_init_vars(); - stp_print_dbg("stp_print_page", pdev, &stp_data); - code = 0; - stp_raster = gdev_prn_raster(pdev); - printer = stp_get_printer_by_driver(stp_get_driver(stp_data.v)); - if (printer == NULL) - { - fprintf(gs_stderr, "Printer %s is not a known printer model\n", - stp_get_driver(stp_data.v)); - return_error(gs_error_rangecheck); - } - - if (!printvars_merged) - { - stp_merge_printvars(stp_data.v, stp_printer_get_printvars(printer)); - printvars_merged = 1; - } - stp_row = gs_alloc_bytes(pdev->memory, stp_raster, "stp file buffer"); - - if (stp_row == 0) /* can't allocate row buffer */ - return_error(gs_error_VMerror); - - if (strlen(stp_get_resolution(stp_data.v)) == 0) - stp_set_resolution(stp_data.v, - ((*stp_printer_get_printfuncs(printer)->default_parameters) - (printer, NULL, "Resolution"))); - if (strlen(stp_get_dither_algorithm(stp_data.v)) == 0) - stp_set_dither_algorithm(stp_data.v, stp_default_dither_algorithm()); - - stp_set_scaling(stp_data.v, -pdev->x_pixels_per_inch); /* resolution of image */ - - /* compute lookup table: lut_t*,float dest_gamma,float app_gamma,stp_vars_t* */ - stp_set_app_gamma(stp_data.v, 1.7); - - stp_data.topoffset = 0; - stp_set_cmap(stp_data.v, NULL); - - stp_set_page_width(stp_data.v, pdev->MediaSize[0]); - stp_set_page_height(stp_data.v, pdev->MediaSize[1]); - if ((p = stp_get_papersize_by_size(stp_get_page_height(stp_data.v), - stp_get_page_width(stp_data.v))) != NULL) - stp_set_media_size(stp_data.v, stp_papersize_get_name(p)); - stp_print_dbg("stp_print_page", pdev, &stp_data); - - gsImage.dev = pdev; - gsImage.data = &stp_data; - gsImage.raster = stp_raster; - stp_set_outfunc(stp_data.v, stp_writefunc); - stp_set_errfunc(stp_data.v, stp_writefunc); - stp_set_outdata(stp_data.v, file); - stp_set_errdata(stp_data.v, gs_stderr); - if (stp_printer_get_printfuncs(printer)->verify(printer, stp_data.v)) - (stp_printer_get_printfuncs(printer)->print) - (printer, &theImage, stp_data.v); - else - code = 1; - - gs_free_object(pdev->memory, stp_row, "stp row buffer"); - stp_row = NULL; - - if (code) - return_error(gs_error_rangecheck); - else - return 0; -} - -/* 24-bit color mappers (taken from gdevmem2.c). */ - -/* Map a r-g-b color to a color index. */ -private gx_color_index -stp_map_16m_rgb_color(gx_device * dev, gx_color_value r, gx_color_value g, - gx_color_value b) -{ - return gx_color_value_to_byte(b) + - ((uint) gx_color_value_to_byte(g) << 8) + - ((ulong) gx_color_value_to_byte(r) << 16); -} - -/* Map a color index to a r-g-b color. */ -private int -stp_map_16m_color_rgb(gx_device * dev, gx_color_index color, - gx_color_value prgb[3]) -{ - prgb[2] = gx_color_value_from_byte(color & 0xff); - prgb[1] = gx_color_value_from_byte((color >> 8) & 0xff); - prgb[0] = gx_color_value_from_byte(color >> 16); - return 0; -} - -private int -stp_write_float(gs_param_list *plist, const char *name, float value) -{ - return param_write_float(plist, name, &value); -} - -private int -stp_write_int(gs_param_list *plist, const char *name, int value) -{ - return param_write_int(plist, name, &value); -} - -private char * -c_strdup(const char *s) -{ - char *ret; - if (!s) - { - STP_DEBUG(fprintf(gs_stderr, "c_strdup null ptr\n")); - ret = malloc(1); - ret[0] = 0; - return ret; - } - else - { - STP_DEBUG(fprintf(gs_stderr, "c_strdup |%s|\n", s)); - ret = malloc(strlen(s) + 1); - strcpy(ret, s); - return ret; - } -} - -/* - * Get parameters. In addition to the standard and printer - * parameters, we supply a lot of options to play around with - * for maximum quality out of the photo printer -*/ -/* Yeah, I could have used a list for the options but... */ -private int -stp_get_params(gx_device *pdev, gs_param_list *plist) -{ - int code; - gs_param_string pinktype; - gs_param_string pmodel; - gs_param_string pmediatype; - gs_param_string pInputSlot; - gs_param_string palgorithm; - gs_param_string pquality; - char *pmediatypestr; - char *pInputSlotstr; - char *pinktypestr; - char *pmodelstr; - char *palgorithmstr; - char *pqualitystr; - stp_init_vars(); - - stp_print_debug("stp_get_params(0)", pdev, &stp_data); - code = gdev_prn_get_params(pdev, plist); - stp_print_debug("stp_get_params(1)", pdev, &stp_data); - pmodelstr = c_strdup(stp_get_driver(stp_data.v)); - pInputSlotstr = c_strdup(stp_get_media_source(stp_data.v)); - pmediatypestr = c_strdup(stp_get_media_type(stp_data.v)); - pinktypestr = c_strdup(stp_get_ink_type(stp_data.v)); - palgorithmstr = c_strdup(stp_get_dither_algorithm(stp_data.v)); - pqualitystr = c_strdup(stp_get_resolution(stp_data.v)); - - param_string_from_string(pmodel, pmodelstr); - param_string_from_string(pInputSlot, pInputSlotstr); - param_string_from_string(pmediatype, pmediatypestr); - param_string_from_string(pinktype, pinktypestr); - param_string_from_string(palgorithm, palgorithmstr); - param_string_from_string(pquality, pqualitystr); - - if (code < 0 || - (code = stp_write_float(plist, "Cyan", stp_get_cyan(stp_data.v))) < 0 || - (code = stp_write_float(plist, "Magenta", stp_get_magenta(stp_data.v))) < 0 || - (code = stp_write_float(plist, "Yellow", stp_get_yellow(stp_data.v))) < 0 || - (code = stp_write_float(plist, "Brightness", stp_get_brightness(stp_data.v))) < 0 || - (code = stp_write_float(plist, "Contrast", stp_get_contrast(stp_data.v))) < 0 || - (code = stp_write_int(plist, "Color", stp_get_output_type(stp_data.v))) < 0 || - (code = stp_write_int(plist, "ImageType", stp_get_image_type(stp_data.v))) < 0 || - (code = stp_write_float(plist, "Gamma", stp_get_gamma(stp_data.v))) < 0 || - (code = stp_write_float(plist, "Saturation", stp_get_saturation(stp_data.v))) < 0 || - (code = stp_write_float(plist, "Density", stp_get_density(stp_data.v))) < 0 || - (code = param_write_string(plist, "Model", &pmodel)) < 0 || - (code = param_write_string(plist, "Dither", &palgorithm)) < 0 || - (code = param_write_string(plist, "Quality", &pquality)) < 0 || - (code = param_write_string(plist, "InkType", &pinktype) < 0) || - (code = param_write_string(plist, "MediaType", &pmediatype)) < 0 || - (code = param_write_string(plist, "stpMediaType", &pmediatype)) < 0 || - (code = param_write_string(plist, "InputSlot", &pInputSlot)) < 0 - ) - { - free(pmodelstr); - free(pInputSlotstr); - free(pmediatypestr); - free(pinktypestr); - free(palgorithmstr); - free(pqualitystr); - STP_DEBUG(fprintf(stderr, "stp_get_params returns %d\n", code)); - return code; - } - - return 0; -} - -/* Put parameters. */ -/* Yeah, I could have used a list for the options but... */ - -#define STP_PUT_PARAM(plist, gtype, v, name, param, ecode) \ -do { \ - int code; \ - gtype value; \ - \ - code = param_read_##gtype(plist, name, &value); \ - switch (code) \ - { \ - case 0: \ - if (value < stp_get_##param(lower) || value > stp_get_##param(upper)) \ - { \ - param_signal_error(plist, name, gs_error_rangecheck); \ - ecode = -100; \ - } \ - else \ - stp_set_##param(v, value); \ - break; \ - case 1: \ - break; \ - default: \ - ecode = code; \ - break; \ - } \ -} while (0) - -private int -stp_put_params(gx_device *pdev, gs_param_list *plist) -{ - const stp_vars_t lower = stp_minimum_settings(); - const stp_vars_t upper = stp_maximum_settings(); - gs_param_string pmediatype; - gs_param_string pInputSlot; - gs_param_string pinktype; - gs_param_string pmodel; - gs_param_string palgorithm; - gs_param_string pquality; - char *pmediatypestr; - char *pInputSlotstr; - char *pinktypestr; - char *pmodelstr; - char *palgorithmstr; - char *pqualitystr; - int code = 0; - stp_printer_t printer; - stp_init_vars(); - - stp_print_debug("stp_put_params(0)", pdev, &stp_data); - - pmodelstr = c_strdup(stp_get_driver(stp_data.v)); - pInputSlotstr = c_strdup(stp_get_media_source(stp_data.v)); - pmediatypestr = c_strdup(stp_get_media_type(stp_data.v)); - pinktypestr = c_strdup(stp_get_ink_type(stp_data.v)); - palgorithmstr = c_strdup(stp_get_dither_algorithm(stp_data.v)); - pqualitystr = c_strdup(stp_get_resolution(stp_data.v)); - - param_string_from_string(pmodel, pmodelstr); - param_string_from_string(pInputSlot, pInputSlotstr); - param_string_from_string(pmediatype, pmediatypestr); - param_string_from_string(pinktype, pinktypestr); - param_string_from_string(palgorithm, palgorithmstr); - param_string_from_string(pquality, pqualitystr); - - STP_PUT_PARAM(plist, float, stp_data.v, "Cyan", cyan, code); - STP_PUT_PARAM(plist, float, stp_data.v, "Magenta", magenta, code); - STP_PUT_PARAM(plist, float, stp_data.v, "Yellow", yellow, code); - STP_PUT_PARAM(plist, float, stp_data.v, "Brightness", brightness, code); - STP_PUT_PARAM(plist, float, stp_data.v, "Contrast", contrast, code); - STP_PUT_PARAM(plist, int, stp_data.v, "Color", output_type, code); - STP_PUT_PARAM(plist, int, stp_data.v, "ImageType", image_type, code); - STP_PUT_PARAM(plist, float, stp_data.v, "Gamma", gamma, code); - STP_PUT_PARAM(plist, float, stp_data.v, "Saturation", saturation ,code); - STP_PUT_PARAM(plist, float, stp_data.v, "Density", density, code); - param_read_string(plist, "Quality", &pquality); - param_read_string(plist, "Dither", &palgorithm); - param_read_string(plist, "InputSlot", &pInputSlot); - param_read_string(plist, "stpMediaType", &pmediatype); - if (!pmediatype.data || pmediatype.size == 0) - param_read_string(plist, "MediaType", &pmediatype); - param_read_string(plist, "Model", &pmodel); - param_read_string(plist, "InkType", &pinktype); - - if (stp_get_output_type(stp_data.v) == OUTPUT_RAW_CMYK) - { - param_signal_error(plist, "Color", gs_error_rangecheck); - code = -100; - } - - if ( code < 0 ) - { - free(pmodelstr); - free(pInputSlotstr); - free(pmediatypestr); - free(pinktypestr); - free(palgorithmstr); - free(pqualitystr); - - return code; - } - - STP_DEBUG(fprintf(gs_stderr, "pmodel.size %d pmodel.data %s\n", - pmodel.size, pmodel.data)); - STP_DEBUG(fprintf(gs_stderr, "pinktype.size %d pinktype.data %s\n", - pinktype.size, pinktype.data)); - STP_DEBUG(fprintf(gs_stderr, "pquality.size %d pquality.data %s\n", - pquality.size, pquality.data)); - stp_set_driver_n(stp_data.v, pmodel.data, pmodel.size); - printer = stp_get_printer_by_driver(stp_get_driver(stp_data.v)); - if (printer) - stp_set_printer_defaults(stp_data.v, printer, NULL); - - if (pmediatype.data && pmediatype.size != 0) - stp_set_media_type_n(stp_data.v, pmediatype.data, pmediatype.size); - if (pInputSlot.data && pInputSlot.size != 0) - stp_set_media_source_n(stp_data.v, pInputSlot.data, pInputSlot.size); - if (pinktype.data && pinktype.size != 0) - stp_set_ink_type_n(stp_data.v, pinktype.data, pinktype.size); - if (palgorithm.data && palgorithm.size != 0) - stp_set_dither_algorithm_n(stp_data.v, palgorithm.data, palgorithm.size); - if (pquality.data && pquality.size != 0) - stp_set_resolution_n(stp_data.v, pquality.data, pquality.size); - stp_print_debug("stp_put_params(1)", pdev, &stp_data); - - code = gdev_prn_put_params(pdev, plist); - - free(pmodelstr); - free(pInputSlotstr); - free(pmediatypestr); - free(pinktypestr); - free(palgorithmstr); - free(pqualitystr); - - return code; -} - -private int -stp_open(gx_device *pdev) -{ - /* Change the margins if necessary. */ - float st[4]; - int left,right,bottom,top,width,height; - stp_printer_t printer; - stp_init_vars(); - stp_print_debug("stp_open", pdev, &stp_data); - printer = stp_get_printer_by_driver(stp_get_driver(stp_data.v)); - if (!printer) - { - if (strlen(stp_get_driver(stp_data.v)) == 0) - fprintf(gs_stderr, "Printer must be specified with -sModel\n"); - else - fprintf(gs_stderr, "Printer %s is not a known model\n", - stp_get_driver(stp_data.v)); - return_error(gs_error_undefined); - } - - stp_set_page_width(stp_data.v, pdev->MediaSize[0]); - stp_set_page_height(stp_data.v, pdev->MediaSize[1]); - - (*stp_printer_get_printfuncs(printer)->media_size) - (printer, stp_data.v, &width, &height); - - (*stp_printer_get_printfuncs(printer)->imageable_area) - (printer, stp_data.v, &left, &right, &bottom, &top); - - st[1] = (float)bottom / 72; /* bottom margin */ - st[3] = (float)(height-top) / 72; /* top margin */ - st[0] = (float)left / 72; /* left margin */ - st[2] = (float)(width-right) / 72; /* right margin */ - - stp_set_top(stp_data.v, 0); - stp_set_left(stp_data.v, 0); - stp_set_orientation(stp_data.v, ORIENT_PORTRAIT); - stp_data.bottom = bottom + height-top; - - stp_print_debug("stp_open", pdev, &stp_data); - STP_DEBUG(fprintf(gs_stderr, "margins: l %f b %f r %f t %f\n", - st[0], st[1], st[2], st[3])); - - gx_device_set_margins(pdev, st, true); - return gdev_prn_open(pdev); -} - - -/*********************************************************************** -* driver function callback routines * -***********************************************************************/ - -/* get one row of the image */ -private stp_image_status_t -Image_get_row(stp_image_t *image, unsigned char *data, int row) -{ - stp_priv_image_t *im = (stp_priv_image_t *) (image->rep); - memset(data, 0, im->dev->width * 3); - if (im->dev->x_pixels_per_inch == im->dev->y_pixels_per_inch) - { - gdev_prn_copy_scan_lines(im->dev, im->data->topoffset+row, - data, im->raster); - } - else if (im->dev->x_pixels_per_inch > im->dev->y_pixels_per_inch) - { - /* - * If xres > yres, duplicate rows - */ - int ratio = (im->dev->x_pixels_per_inch / im->dev->y_pixels_per_inch); - gdev_prn_copy_scan_lines(im->dev, (im->data->topoffset + row) / ratio, - data, im->raster); - } - else - { - /* - * If xres < yres, skip rows - */ - int ratio = (im->dev->y_pixels_per_inch / im->dev->x_pixels_per_inch); - gdev_prn_copy_scan_lines(im->dev, (im->data->topoffset + row) * ratio, - data, im->raster); - } - return STP_IMAGE_OK; -} - -/* return bpp of picture (24 here) */ -private int -Image_bpp(stp_image_t *image) -{ - return 3; -} - -/* return width of picture */ -private int -Image_width(stp_image_t *image) -{ - stp_priv_image_t *im = (stp_priv_image_t *) (image->rep); - return im->dev->width; -} - -/* - return height of picture and - subtract margins from image size so that the - driver only reads the correct number of lines from the - input - -*/ -private int -Image_height(stp_image_t *image) -{ - stp_priv_image_t *im = (stp_priv_image_t *) (image->rep); - float tmp,tmp2; - - /* top margin + bottom margin */ - tmp = stp_get_top(im->data->v) + im->data->bottom; - - /* calculate height in 1/72 inches */ - tmp2 = (float)(im->dev->height) / (float)(im->dev->y_pixels_per_inch) * 72.; - - tmp2 -= tmp; /* subtract margins from sizes */ - - /* calculate new image height */ - tmp2 *= (float)(im->dev->x_pixels_per_inch) / 72.; - - STP_DEBUG(fprintf(gs_stderr,"corrected page height %f\n",tmp2)); - - return (int)tmp2; -} - -private void -Image_rotate_ccw(stp_image_t *image) -{ - /* dummy function, Landscape printing unsupported atm */ -} - -private void -Image_rotate_cw(stp_image_t *image) -{ - /* dummy function, Seascape printing unsupported atm */ -} - -private void -Image_rotate_180(stp_image_t *image) -{ - /* dummy function, upside down printing unsupported atm */ -} - -private void -Image_init(stp_image_t *image) -{ - /* dummy function */ -} - -private void -Image_progress_init(stp_image_t *image) -{ - /* dummy function */ -} - -/* progress display */ -private void -Image_note_progress(stp_image_t *image, double current, double total) -{ - STP_DEBUG(fprintf(gs_stderr, ".")); -} - -private void -Image_progress_conclude(stp_image_t *image) -{ - STP_DEBUG(fprintf(gs_stderr, "\n")); -} - -private const char * -Image_get_appname(stp_image_t *image) -{ - return "GhostScript/stp"; -} |