X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/04ee05f92add0ab92ce08ecb827e3be41336aa06..ddd7e4307b4a58a21e8a5eb04afe06e1fe65f7d8:/src/gtk/gnome/gprint.cpp diff --git a/src/gtk/gnome/gprint.cpp b/src/gtk/gnome/gprint.cpp index aa93c96e64..abe6b7ba62 100644 --- a/src/gtk/gnome/gprint.cpp +++ b/src/gtk/gnome/gprint.cpp @@ -184,7 +184,7 @@ public: wxDL_METHOD_DEFINE( GtkWidget*, gnome_print_job_preview_new, (GnomePrintJob *gpm, const guchar *title), (gpm, title), NULL ) - DECLARE_NO_COPY_CLASS(wxGnomePrintLibrary) + wxDECLARE_NO_COPY_CLASS(wxGnomePrintLibrary); }; wxGnomePrintLibrary::wxGnomePrintLibrary() @@ -843,8 +843,6 @@ bool wxGnomePrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt ) native->SetPrintJob( job ); - printout->SetIsPreview(false); - if (m_printDialogData.GetMinPage() < 1) m_printDialogData.SetMinPage(1); if (m_printDialogData.GetMaxPage() < 1) @@ -860,9 +858,6 @@ bool wxGnomePrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt ) dc = new wxGnomePrinterDC( printdata ); // TODO: check that this works #endif - if (m_native_preview) - printout->SetIsPreview(true); - if (!dc) { gs_libGnomePrint->gnome_print_job_close( job ); @@ -872,11 +867,7 @@ bool wxGnomePrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt ) return false; } - wxSize ScreenPixels = wxGetDisplaySize(); - wxSize ScreenMM = wxGetDisplaySizeMM(); - - printout->SetPPIScreen( (int) ((ScreenPixels.GetWidth() * 25.4) / ScreenMM.GetWidth()), - (int) ((ScreenPixels.GetHeight() * 25.4) / ScreenMM.GetHeight()) ); + printout->SetPPIScreen(wxGetDisplayPPI()); printout->SetPPIPrinter( dc->GetResolution(), dc->GetResolution() ); @@ -1054,7 +1045,7 @@ bool wxGnomePrinterDCImpl::DoFloodFill(wxCoord WXUNUSED(x1), wxCoord WXUNUSED(y1), const wxColour& WXUNUSED(col), - int WXUNUSED(style)) + wxFloodFillStyle WXUNUSED(style)) { return false; } @@ -1069,7 +1060,8 @@ wxGnomePrinterDCImpl::DoGetPixel(wxCoord WXUNUSED(x1), void wxGnomePrinterDCImpl::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) { - if (m_pen.GetStyle() == wxPENSTYLE_TRANSPARENT) return; + if ( m_pen.IsTransparent() ) + return; SetPen( m_pen ); @@ -1116,7 +1108,7 @@ void wxGnomePrinterDCImpl::DoDrawArc(wxCoord x1,wxCoord y1,wxCoord x2,wxCoord y2 while (alpha2 > 360) alpha2 -= 360; } - if (m_brush.GetStyle() != wxBRUSHSTYLE_TRANSPARENT) + if ( m_brush.IsNonTransparent() ) { SetBrush( m_brush ); gs_libGnomePrint->gnome_print_moveto ( m_gpc, XLOG2DEV(xc), YLOG2DEV(yc) ); @@ -1125,7 +1117,7 @@ void wxGnomePrinterDCImpl::DoDrawArc(wxCoord x1,wxCoord y1,wxCoord x2,wxCoord y2 gs_libGnomePrint->gnome_print_fill( m_gpc ); } - if (m_pen.GetStyle() != wxPENSTYLE_TRANSPARENT) + if ( m_pen.IsNonTransparent() ) { SetPen (m_pen); gs_libGnomePrint->gnome_print_newpath( m_gpc ); @@ -1158,7 +1150,7 @@ void wxGnomePrinterDCImpl::DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoo xx = 0.0; yy = 0.0; - if (m_brush.GetStyle () != wxBRUSHSTYLE_TRANSPARENT) + if ( m_brush.IsNonTransparent() ) { SetBrush( m_brush ); @@ -1170,7 +1162,7 @@ void wxGnomePrinterDCImpl::DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoo gs_libGnomePrint->gnome_print_fill( m_gpc ); } - if (m_pen.GetStyle () != wxPENSTYLE_TRANSPARENT) + if ( m_pen.IsNonTransparent() ) { SetPen (m_pen); @@ -1192,10 +1184,11 @@ void wxGnomePrinterDCImpl::DoDrawPoint(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y)) void wxGnomePrinterDCImpl::DoDrawLines(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset) { - if (m_pen.GetStyle() == wxPENSTYLE_TRANSPARENT) return; - if (n <= 0) return; + if ( m_pen.IsTransparent() ) + return; + SetPen (m_pen); int i; @@ -1212,11 +1205,11 @@ void wxGnomePrinterDCImpl::DoDrawLines(int n, wxPoint points[], wxCoord xoffset, void wxGnomePrinterDCImpl::DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, - int WXUNUSED(fillStyle)) + wxPolygonFillMode WXUNUSED(fillStyle)) { if (n==0) return; - if (m_brush.GetStyle () != wxBRUSHSTYLE_TRANSPARENT) + if ( m_brush.IsNonTransparent() ) { SetBrush( m_brush ); @@ -1237,7 +1230,7 @@ void wxGnomePrinterDCImpl::DoDrawPolygon(int n, wxPoint points[], gs_libGnomePrint->gnome_print_fill( m_gpc ); } - if (m_pen.GetStyle () != wxPENSTYLE_TRANSPARENT) + if ( m_pen.IsNonTransparent() ) { SetPen (m_pen); @@ -1258,7 +1251,7 @@ void wxGnomePrinterDCImpl::DoDrawPolygon(int n, wxPoint points[], } } -void wxGnomePrinterDCImpl::DoDrawPolyPolygon(int n, int count[], wxPoint points[], wxCoord xoffset, wxCoord yoffset, int fillStyle) +void wxGnomePrinterDCImpl::DoDrawPolyPolygon(int n, int count[], wxPoint points[], wxCoord xoffset, wxCoord yoffset, wxPolygonFillMode fillStyle) { #if wxUSE_NEW_DC wxDCImpl::DoDrawPolyPolygon( n, count, points, xoffset, yoffset, fillStyle ); @@ -1272,7 +1265,7 @@ void wxGnomePrinterDCImpl::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, width--; height--; - if (m_brush.GetStyle () != wxBRUSHSTYLE_TRANSPARENT) + if ( m_brush.IsNonTransparent() ) { SetBrush( m_brush ); @@ -1288,7 +1281,7 @@ void wxGnomePrinterDCImpl::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, CalcBoundingBox( x + width, y + height ); } - if (m_pen.GetStyle () != wxPENSTYLE_TRANSPARENT) + if ( m_pen.IsNonTransparent() ) { SetPen (m_pen); @@ -1312,7 +1305,7 @@ void wxGnomePrinterDCImpl::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord wxCoord rad = wxRound( radius ); - if (m_brush.GetStyle() != wxBRUSHSTYLE_TRANSPARENT) + if ( m_brush.IsNonTransparent() ) { SetBrush(m_brush); gs_libGnomePrint->gnome_print_newpath(m_gpc); @@ -1344,7 +1337,7 @@ void wxGnomePrinterDCImpl::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord CalcBoundingBox(x+width,y+height); } - if (m_pen.GetStyle() != wxPENSTYLE_TRANSPARENT) + if ( m_pen.IsNonTransparent() ) { SetPen(m_pen); gs_libGnomePrint->gnome_print_newpath(m_gpc); @@ -1428,7 +1421,7 @@ void wxGnomePrinterDCImpl::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wx width--; height--; - if (m_brush.GetStyle () != wxBRUSHSTYLE_TRANSPARENT) + if ( m_brush.IsNonTransparent() ) { SetBrush( m_brush ); makeEllipticalPath( x, y, width, height ); @@ -1437,7 +1430,7 @@ void wxGnomePrinterDCImpl::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wx CalcBoundingBox( x + width, y + height ); } - if (m_pen.GetStyle () != wxPENSTYLE_TRANSPARENT) + if ( m_pen.IsNonTransparent() ) { SetPen (m_pen); makeEllipticalPath( x, y, width, height ); @@ -1512,7 +1505,7 @@ wxGnomePrinterDCImpl::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop, + wxRasterOperationMode rop, bool WXUNUSED(useMask), wxCoord WXUNUSED(xsrcMask), wxCoord WXUNUSED(ysrcMask)) { @@ -1601,12 +1594,7 @@ void wxGnomePrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wx bool underlined = m_font.Ok() && m_font.GetUnderlined(); - // FIXME-UTF8: wouldn't be needed if utf8_str() always returned a buffer -#if wxUSE_UNICODE_UTF8 - const char *data = text.utf8_str(); -#else - const wxCharBuffer data = text.utf8_str(); -#endif + const wxScopedCharBuffer data(text.utf8_str()); size_t datalen = strlen(data); pango_layout_set_text( m_layout, data, datalen); @@ -1642,8 +1630,6 @@ void wxGnomePrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wx } } - int w,h; - pango_layout_get_pixel_size( m_layout, &w, &h ); #if 0 if ( m_backgroundMode == wxSOLID ) { @@ -1665,6 +1651,9 @@ void wxGnomePrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wx gs_libGnomePrint->gnome_print_pango_layout( m_gpc, m_layout ); + int w,h; + pango_layout_get_pixel_size( m_layout, &w, &h ); + gs_libGnomePrint->gnome_print_grestore( m_gpc ); if (underlined) @@ -1673,7 +1662,8 @@ void wxGnomePrinterDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wx pango_layout_set_attributes(m_layout, NULL); } - CalcBoundingBox (x + w, y + h); + CalcBoundingBox(x, y); + CalcBoundingBox(x + w, y + h); } void wxGnomePrinterDCImpl::Clear() @@ -1691,6 +1681,10 @@ void wxGnomePrinterDCImpl::SetFont( const wxFont& font ) m_fontdesc = pango_font_description_copy( m_font.GetNativeFontInfo()->description ); + float size = pango_font_description_get_size( m_fontdesc ); + size = size * GetFontPointSizeAdjustment(72.0); + pango_font_description_set_size( m_fontdesc, (gint)size ); + pango_layout_set_font_description( m_layout, m_fontdesc ); } } @@ -1800,7 +1794,7 @@ void wxGnomePrinterDCImpl::SetBrush( const wxBrush& brush ) } } -void wxGnomePrinterDCImpl::SetLogicalFunction(int WXUNUSED(function)) +void wxGnomePrinterDCImpl::SetLogicalFunction(wxRasterOperationMode WXUNUSED(function)) { } @@ -1911,33 +1905,26 @@ void wxGnomePrinterDCImpl::DoGetTextExtent(const wxString& string, wxCoord *widt // Set layout's text - // FIXME-UTF8: wouldn't be needed if utf8_str() always returned a buffer -#if wxUSE_UNICODE_UTF8 - const char *dataUTF8 = string.utf8_str(); -#else - const wxCharBuffer dataUTF8 = string.utf8_str(); -#endif - - PangoFontDescription *desc = (theFont) ? theFont->GetNativeFontInfo()->description : m_fontdesc; + const wxScopedCharBuffer dataUTF8(string.utf8_str()); - gint oldSize = pango_font_description_get_size( desc ); - double size = oldSize; - size = size * m_scaleY; - pango_font_description_set_size( desc, (gint)size ); + gint oldSize = 0; + if ( theFont ) + { + // scale the font and apply it + PangoFontDescription *desc = theFont->GetNativeFontInfo()->description; + oldSize = pango_font_description_get_size(desc); + float size = oldSize * GetFontPointSizeAdjustment(72.0); + pango_font_description_set_size(desc, (gint)size); - // apply scaled font - pango_layout_set_font_description( m_layout, desc ); + pango_layout_set_font_description(m_layout, desc); + } pango_layout_set_text( m_layout, dataUTF8, strlen(dataUTF8) ); - int w, h; - pango_layout_get_pixel_size( m_layout, &w, &h ); - - - if (width) - *width = (wxCoord)(w / m_scaleX); - if (height) - *height = (wxCoord)(h / m_scaleY); + int h; + pango_layout_get_pixel_size( m_layout, width, &h ); + if ( height ) + *height = h; if (descent) { @@ -1947,11 +1934,14 @@ void wxGnomePrinterDCImpl::DoGetTextExtent(const wxString& string, wxCoord *widt *descent = h - PANGO_PIXELS(baseline); } - // reset unscaled size - pango_font_description_set_size( desc, oldSize ); + if ( theFont ) + { + // restore font and reset font's size back + pango_layout_set_font_description(m_layout, m_fontdesc); - // reset unscaled font - pango_layout_set_font_description( m_layout, m_fontdesc ); + PangoFontDescription *desc = theFont->GetNativeFontInfo()->description; + pango_font_description_set_size(desc, oldSize); + } } void wxGnomePrinterDCImpl::DoGetSize(int* width, int* height) const @@ -2012,12 +2002,12 @@ void wxGnomePrinterDCImpl::SetPrintData(const wxPrintData& data) // overridden for wxPrinterDC Impl -int wxGnomePrinterDCImpl::GetResolution() +int wxGnomePrinterDCImpl::GetResolution() const { return DPI; } -wxRect wxGnomePrinterDCImpl::GetPaperRect() +wxRect wxGnomePrinterDCImpl::GetPaperRect() const { // GNOME print doesn't support printer margins int w = 0; @@ -2040,8 +2030,7 @@ bool wxGnomePrintModule::OnInit() void wxGnomePrintModule::OnExit() { - delete gs_libGnomePrint; - gs_libGnomePrint = NULL; + wxDELETE(gs_libGnomePrint); } IMPLEMENT_DYNAMIC_CLASS(wxGnomePrintModule, wxModule) @@ -2099,12 +2088,8 @@ void wxGnomePrintPreview::DetermineScaling() if (paper) { - wxSize ScreenPixels = wxGetDisplaySize(); - wxSize ScreenMM = wxGetDisplaySizeMM(); + m_previewPrintout->SetPPIScreen(wxGetDisplayPPI()); - m_previewPrintout->SetPPIScreen( (int) ((ScreenPixels.GetWidth() * 25.4) / ScreenMM.GetWidth()), - (int) ((ScreenPixels.GetHeight() * 25.4) / ScreenMM.GetHeight()) ); - int resolution = DPI; m_previewPrintout->SetPPIPrinter( resolution, resolution );