From eaeb99858d5c101a67f7acde78db29a418cad322 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Wed, 30 Apr 2008 09:17:04 +0000 Subject: [PATCH] Use cairo_scale() for scaling to full printing resolution, correct transformation in Cairo graphics context for GTK+ printing git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53420 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/generic/graphicc.cpp | 15 ++++----------- src/gtk/print.cpp | 31 +++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/generic/graphicc.cpp b/src/generic/graphicc.cpp index 70debbac5e..fb79e9611d 100644 --- a/src/generic/graphicc.cpp +++ b/src/generic/graphicc.cpp @@ -1042,22 +1042,15 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxPrinterDC& const wxDCImpl *impl = dc.GetImpl(); Init( (cairo_t*) impl->GetCairoContext() ); -#if 0 - wxGraphicsMatrix matrix = CreateMatrix(); - wxPoint org = dc.GetDeviceOrigin(); - matrix.Translate( org.x, org.y ); + cairo_translate( m_context, org.x, org.y ); - org = dc.GetLogicalOrigin(); - matrix.Translate( -org.x, -org.y ); - double sx,sy; dc.GetUserScale( &sx, &sy ); - matrix.Scale( sx, sy ); - - ConcatTransform( matrix ); -#endif + cairo_scale( m_context, sx, sy ); + org = dc.GetLogicalOrigin(); + cairo_translate( m_context, -org.x, -org.y ); #endif } diff --git a/src/gtk/print.cpp b/src/gtk/print.cpp index 0c0792d37c..a1cd4c3043 100644 --- a/src/gtk/print.cpp +++ b/src/gtk/print.cpp @@ -1099,11 +1099,23 @@ bool wxGtkPrinter::Setup( wxWindow * WXUNUSED(parent) ) // wxGtkPrinterDC //----------------------------------------------------------------------------- +#define wxCAIRO_SCALE 1 + +#if wxCAIRO_SCALE + +#define XLOG2DEV(x) LogicalToDeviceX(x) +#define XLOG2DEVREL(x) LogicalToDeviceXRel(x) +#define YLOG2DEV(x) LogicalToDeviceY(x) +#define YLOG2DEVREL(x) LogicalToDeviceYRel(x) + +#else + #define XLOG2DEV(x) ((double)(LogicalToDeviceX(x)) * m_DEV2PS) #define XLOG2DEVREL(x) ((double)(LogicalToDeviceXRel(x)) * m_DEV2PS) #define YLOG2DEV(x) ((double)(LogicalToDeviceY(x)) * m_DEV2PS) #define YLOG2DEVREL(x) ((double)(LogicalToDeviceYRel(x)) * m_DEV2PS) +#endif IMPLEMENT_ABSTRACT_CLASS(wxGtkPrinterDCImpl, wxDCImpl) @@ -1122,15 +1134,22 @@ wxGtkPrinterDCImpl::wxGtkPrinterDCImpl(wxPrinterDC *owner, const wxPrintData& da if (m_resolution < 0) m_resolution = (1 << (m_resolution+4)) *150; - m_PS2DEV = (double)m_resolution / 72.0; - m_DEV2PS = 72.0 / (double)m_resolution; - m_context = gtk_print_context_create_pango_context( m_gpc ); m_layout = gtk_print_context_create_pango_layout ( m_gpc ); m_fontdesc = pango_font_description_from_string( "Sans 12" ); m_cairo = gtk_print_context_get_cairo_context ( m_gpc ); +#if wxCAIRO_SCALE + m_PS2DEV = 1.0; + m_DEV2PS = 1.0; + + gs_cairo->cairo_scale( m_cairo, 72.0 / (double)m_resolution, 72.0 / (double)m_resolution ); +#else + m_PS2DEV = (double)m_resolution / 72.0; + m_DEV2PS = 72.0 / (double)m_resolution; +#endif + m_currentRed = 0; m_currentBlue = 0; m_currentGreen = 0; @@ -2227,9 +2246,9 @@ void wxGtkPrinterDCImpl::DoGetSize(int* width, int* height) const GtkPageSetup *setup = gtk_print_context_get_page_setup( m_gpc ); if (width) - *width = wxRound( gtk_page_setup_get_paper_width( setup, GTK_UNIT_POINTS ) * m_PS2DEV ); + *width = wxRound( (double)gtk_page_setup_get_paper_width( setup, GTK_UNIT_POINTS ) * (double)m_resolution / 72.0 ); if (height) - *height = wxRound( gtk_page_setup_get_paper_height( setup, GTK_UNIT_POINTS ) * m_PS2DEV ); + *height = wxRound( (double)gtk_page_setup_get_paper_height( setup, GTK_UNIT_POINTS ) * (double)m_resolution / 72.0 ); } void wxGtkPrinterDCImpl::DoGetSizeMM(int *width, int *height) const @@ -2363,9 +2382,9 @@ void wxGtkPrintPreview::DetermineScaling() // Get width and height in points (1/72th of an inch) wxSize sizeDevUnits(paper->GetSizeDeviceUnits()); - sizeDevUnits.x = wxRound((double)sizeDevUnits.x * (double)m_resolution / 72.0); sizeDevUnits.y = wxRound((double)sizeDevUnits.y * (double)m_resolution / 72.0); + wxSize sizeTenthsMM(paper->GetSize()); wxSize sizeMM(sizeTenthsMM.x / 10, sizeTenthsMM.y / 10); -- 2.47.2