Some more printing code to clear most of

the printing sample.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30241 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2004-11-02 14:32:59 +00:00
parent c543817b32
commit 981a6af126
2 changed files with 172 additions and 12 deletions

View File

@@ -212,11 +212,20 @@ bool wxGnomePrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt )
wxGnomePrintNativeData *data =
(wxGnomePrintNativeData*) printdata.GetNativeData();
// The GnomePrintJob is temporarily stored in the
// native print data as the native print setup dialog
// needs to access it.
GnomePrintJob *job = data->GetPrintJob();
m_gpc = gnome_print_job_get_context (job);
printout->SetIsPreview(false);
if (m_printDialogData.GetMinPage() < 1)
m_printDialogData.SetMinPage(1);
if (m_printDialogData.GetMaxPage() < 1)
m_printDialogData.SetMaxPage(9999);
wxDC *dc;
if (prompt)
dc = PrintDialog( parent );
else
@@ -225,11 +234,26 @@ bool wxGnomePrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt )
if (!dc)
{
gnome_print_job_close( job );
sm_lastError = wxPRINTER_ERROR;
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->SetPPIPrinter( wxPostScriptDC::GetResolution(),
wxPostScriptDC::GetResolution() );
printout->SetDC(dc);
int w, h;
dc->GetSize(&w, &h);
printout->SetPageSizePixels((int)w, (int)h);
dc->GetSizeMM(&w, &h);
printout->SetPageSizeMM((int)w, (int)h);
printout->OnPreparePrinting();
printout->OnBeginPrinting();
@@ -447,8 +471,6 @@ void wxGnomePrintDC::DoDrawText(const wxString& text, wxCoord x, wxCoord y )
x = XLOG2DEV(x);
y = YLOG2DEV(y);
wxPrintf( wxT("x,y: %d,%d\n"), x, y );
bool underlined = m_font.Ok() && m_font.GetUnderlined();
#if wxUSE_UNICODE
@@ -589,11 +611,71 @@ wxCoord wxGnomePrintDC::GetCharWidth() const
return 0;
}
void wxGnomePrintDC::DoGetTextExtent(const wxString& string, wxCoord *x, wxCoord *y,
void wxGnomePrintDC::DoGetTextExtent(const wxString& string, wxCoord *width, wxCoord *height,
wxCoord *descent,
wxCoord *externalLeading,
wxFont *theFont ) const
{
if ( width )
*width = 0;
if ( height )
*height = 0;
if ( descent )
*descent = 0;
if ( externalLeading )
*externalLeading = 0;
if (string.IsEmpty())
{
return;
}
// Set new font description
if (theFont)
pango_layout_set_font_description( m_layout, theFont->GetNativeFontInfo()->description );
// Set layout's text
#if wxUSE_UNICODE
const wxCharBuffer data = wxConvUTF8.cWC2MB( string );
const char *dataUTF8 = (const char *)data;
#else
const wxWCharBuffer wdata = wxConvLocal.cMB2WC( string );
if ( !wdata )
{
if (width) (*width) = 0;
if (height) (*height) = 0;
return;
}
const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata );
const char *dataUTF8 = (const char *)data;
#endif
if ( !dataUTF8 )
{
// hardly ideal, but what else can we do if conversion failed?
return;
}
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;
if (height)
*height = (wxCoord) h;
if (descent)
{
PangoLayoutIter *iter = pango_layout_get_iter(m_layout);
int baseline = pango_layout_iter_get_baseline(iter);
pango_layout_iter_free(iter);
*descent = h - PANGO_PIXELS(baseline);
}
// Reset old font description
if (theFont)
pango_layout_set_font_description( m_layout, m_fontdesc );
}
void wxGnomePrintDC::DoGetSize(int* width, int* height) const
@@ -615,8 +697,6 @@ void wxGnomePrintDC::DoGetSize(int* width, int* height) const
*width = (int) w;
if (height)
*height = (int) h;
wxPrintf( wxT("size %d,%d\n"), *width, *height );
}
void wxGnomePrintDC::DoGetSizeMM(int *width, int *height) const