X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/74ab0bfbb7a0713ed0c6830cc3b27bc6a9128194..6d7b547184bfdcdf67790755deb0122050b1d728:/src/gtk/gnome/gprint.cpp diff --git a/src/gtk/gnome/gprint.cpp b/src/gtk/gnome/gprint.cpp index ab2d2db204..a623c309d3 100644 --- a/src/gtk/gnome/gprint.cpp +++ b/src/gtk/gnome/gprint.cpp @@ -19,14 +19,17 @@ #if wxUSE_LIBGNOMEPRINT -#include "wx/math.h" +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/dcmemory.h" + #include "wx/icon.h" + #include "wx/math.h" +#endif + #include "wx/fontutil.h" #include "wx/gtk/private.h" #include "wx/module.h" #include "wx/dynlib.h" -#include "wx/dcmemory.h" -#include "wx/log.h" -#include "wx/icon.h" #include #include @@ -277,7 +280,7 @@ wxGnomePrintNativeData::wxGnomePrintNativeData() wxGnomePrintNativeData::~wxGnomePrintNativeData() { - g_object_unref (G_OBJECT (m_config)); + g_object_unref (m_config); } bool wxGnomePrintNativeData::TransferTo( wxPrintData &data ) @@ -704,7 +707,7 @@ bool wxGnomePrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt ) if (!dc) { gs_lgp->gnome_print_job_close( job ); - g_object_unref (G_OBJECT (job)); + g_object_unref (job); sm_lastError = wxPRINTER_ERROR; return false; } @@ -735,7 +738,7 @@ bool wxGnomePrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt ) if (maxPage == 0) { gs_lgp->gnome_print_job_close( job ); - g_object_unref (G_OBJECT (job)); + g_object_unref (job); sm_lastError = wxPRINTER_ERROR; return false; } @@ -780,15 +783,20 @@ bool wxGnomePrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt ) gs_lgp->gnome_print_job_close( job ); if (m_native_preview) { - wxString title( _("Print preview") ); - gtk_widget_show( gs_lgp->gnome_print_job_preview_new( job, (const guchar*)(const char*)wxGTK_CONV(title) )); + const wxCharBuffer title(wxGTK_CONV_SYS(_("Print preview"))); + GtkWidget *preview = gs_lgp->gnome_print_job_preview_new + ( + job, + (const guchar *)title.data() + ); + gtk_widget_show(preview); } else { gs_lgp->gnome_print_job_print( job ); } - g_object_unref (G_OBJECT (job)); + g_object_unref (job); delete dc; return (sm_lastError == wxPRINTER_NO_ERROR); @@ -1155,7 +1163,7 @@ void wxGnomePrintDC::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, } } -void wxGnomePrintDC::makeEllipticalPath(wxCoord x, wxCoord y, +void wxGnomePrintDC::makeEllipticalPath(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { double r = 4 * (sqrt (2) - 1) / 3; @@ -1165,22 +1173,22 @@ void wxGnomePrintDC::makeEllipticalPath(wxCoord x, wxCoord y, halfHR = r * halfH; wxCoord halfWI = (wxCoord) halfW, halfHI = (wxCoord) halfH; - + gs_lgp->gnome_print_newpath( m_gpc ); - + // Approximate an ellipse using four cubic splines, clockwise from 0 deg */ gs_lgp->gnome_print_moveto( m_gpc, - XLOG2DEV(x + width), + XLOG2DEV(x + width), YLOG2DEV(y + halfHI) ); gs_lgp->gnome_print_curveto( m_gpc, XLOG2DEV(x + width), YLOG2DEV(y + (wxCoord) rint (halfH + halfHR)), - XLOG2DEV(x + (wxCoord) rint(halfW + halfWR)), + XLOG2DEV(x + (wxCoord) rint(halfW + halfWR)), YLOG2DEV(y + height), - XLOG2DEV(x + halfWI), + XLOG2DEV(x + halfWI), YLOG2DEV(y + height) ); gs_lgp->gnome_print_curveto( m_gpc, - XLOG2DEV(x + (wxCoord) rint(halfW - halfWR)), + XLOG2DEV(x + (wxCoord) rint(halfW - halfWR)), YLOG2DEV(y + height), XLOG2DEV(x), YLOG2DEV(y + (wxCoord) rint (halfH + halfHR)), @@ -1197,7 +1205,7 @@ void wxGnomePrintDC::makeEllipticalPath(wxCoord x, wxCoord y, XLOG2DEV(x + width), YLOG2DEV(y + (wxCoord) rint(halfH - halfHR)), XLOG2DEV(x + width), YLOG2DEV(y + halfHI) ); - + gs_lgp->gnome_print_closepath(m_gpc); } @@ -1529,6 +1537,22 @@ void wxGnomePrintDC::SetPen( const wxPen& pen ) case wxSHORT_DASH: gs_lgp->gnome_print_setdash( m_gpc, 2, short_dashed, 0 ); break; case wxLONG_DASH: gs_lgp->gnome_print_setdash( m_gpc, 2, wxCoord_dashed, 0 ); break; case wxDOT_DASH: gs_lgp->gnome_print_setdash( m_gpc, 4, dotted_dashed, 0 ); break; + case wxUSER_DASH: + { + // It may be noted that libgnomeprint between at least + // versions 2.8.0 and 2.12.1 makes a copy of the dashes + // and then leak the memory since it doesn't set the + // internal flag "privatedash" to 0. + wxDash *wx_dashes; + int num = m_pen.GetDashes (&wx_dashes); + gdouble *g_dashes = g_new( gdouble, num ); + int i; + for (i = 0; i < num; ++i) + g_dashes[i] = (gdouble) wx_dashes[i]; + gs_lgp -> gnome_print_setdash( m_gpc, num, g_dashes, 0); + g_free( g_dashes ); + } + break; case wxSOLID: case wxTRANSPARENT: default: gs_lgp->gnome_print_setdash( m_gpc, 0, NULL, 0 ); break;