diff options
Diffstat (limited to 'app/wlib/gtklib/print.c')
-rw-r--r-- | app/wlib/gtklib/print.c | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/app/wlib/gtklib/print.c b/app/wlib/gtklib/print.c index cad7e57..8e96e3b 100644 --- a/app/wlib/gtklib/print.c +++ b/app/wlib/gtklib/print.c @@ -25,12 +25,15 @@ #include <malloc.h> #endif #include <math.h> +#include <string.h> #define GTK_DISABLE_SINGLE_INCLUDES #define GDK_DISABLE_DEPRECATED #define GTK_DISABLE_DEPRECATED #define GSEAL_ENABLE +#define PRODUCT "XTRKCAD" + #include <gtk/gtk.h> #include <gdk/gdk.h> @@ -87,6 +90,7 @@ static double lBorder; /**< left margin */ static double bBorder; /**< bottom margin */ static double scale_adjust = 1.0; +static double scale_text = 1.0; static long printFormat = PRINT_LANDSCAPE; @@ -605,7 +609,8 @@ void psPrintString( /** \todo use a getter function instead of double conversion */ desc = pango_font_description_from_string(wlibFontTranslate(fp)); - pango_font_description_set_size(desc, fs * PANGO_SCALE ); + + pango_font_description_set_size(desc, fs * PANGO_SCALE * scale_text); // render the string to a Pango layout pango_layout_set_font_description(layout, desc); @@ -619,7 +624,7 @@ void psPrintString( metrics = pango_context_get_metrics(pcontext, desc, pango_context_get_language(pcontext)); - ascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE * scale_adjust ; + ascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE *scale_adjust; cairo_identity_matrix(cr); @@ -852,19 +857,35 @@ wBool_t wPrintDocStart(const char * title, int fTotalPageCount, int * copiesP) //update the paper dimensions WlibGetPaperSize(); - /* for the file based surfaces the resolution is 72 dpi (see documentation) */ + /* for all surfaces including files the resolution is always 72 ppi (as all GTK uses PDF) */ surface_type = cairo_surface_get_type(psPrint_d.curPrintSurface); - if (surface_type == CAIRO_SURFACE_TYPE_PDF || - surface_type == CAIRO_SURFACE_TYPE_PS || - surface_type == CAIRO_SURFACE_TYPE_SVG) { - double p_def=600; - cairo_surface_set_fallback_resolution (psPrint_d.curPrintSurface, p_def, p_def); - psPrint_d.dpi = p_def; - scale_adjust = 72/p_def; - } else { - psPrint_d.dpi = (double)gtk_print_settings_get_resolution(settings); - } + const char * printer_name = gtk_print_settings_get_printer(settings); + /* + * Override up-scaling for some printer drivers/Linux systems that don't support the latest CUPS + * - the user sets the environment variable XTRKCADPRINTSCALE to a value + * and we just let the dpi default to 72ppi and set scaling to that value. + * And for PangoText we allow an override via variable XTRKCADPRINTTEXTSCALE + * Note - doing this will introduce differing artifacts. + * + */ + char * sEnvScale = PRODUCT "PRINTSCALE"; + + if ((strcmp(printer_name,"Print to File") == 0) || getenv(sEnvScale) == NULL) { + double p_def = 600; + cairo_surface_set_fallback_resolution(psPrint_d.curPrintSurface, p_def, p_def); + psPrint_d.dpi = p_def; + scale_adjust = 72/p_def; + } else { + char * sEnvTextScale = PRODUCT "PRINTTEXTSCALE"; + if (getenv(sEnvTextScale) && (atof(getenv(sEnvTextScale)) != 0.0)) { + scale_text = atof(getenv(sEnvTextScale)); + } else scale_text = 1.0; + if (getenv(sEnvScale) && (atof(getenv(sEnvScale)) != 0.0)) { + scale_adjust = atof(getenv(sEnvScale)); + } else scale_adjust = 1.0; + psPrint_d.dpi = 72; + } // in XTrackCAD 0,0 is top left, in cairo bottom left. This is // corrected via the following transformations. |