// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#include "wx/metafile.h"
#include "wx/print.h"
#include "wx/printdlg.h"
-
+#include "wx/image.h"
#include "wx/accel.h"
#if wxTEST_POSTSCRIPT_IN_MSW
#include "mondrian.xpm"
#endif
+#if wxUSE_LIBGNOMEPRINT
+#include "wx/html/forcelnk.h"
+FORCE_LINK(gnome_print)
+#endif
+
+
// Declare a frame
MyFrame *frame = (MyFrame *) NULL;
// int orientation = wxPORTRAIT;
IMPLEMENT_APP(MyApp)
// Writes a header on a page. Margin units are in millimetres.
-bool WritePageHeader(wxPrintout *printout, wxDC *dc, wxChar *text, float mmToLogical);
-
-MyApp::MyApp()
-{
-}
+bool WritePageHeader(wxPrintout *printout, wxDC *dc, const wxChar *text, float mmToLogical);
// The `main program' equivalent, creating the windows and returning the
// main frame
+
bool MyApp::OnInit(void)
{
+ wxInitAllImageHandlers();
+
m_testFont.Create(10, wxSWISS, wxNORMAL, wxNORMAL);
g_printData = new wxPrintData;
wxMenu *file_menu = new wxMenu;
file_menu->Append(WXPRINT_PRINT, _T("&Print..."), _T("Print"));
- file_menu->Append(WXPRINT_PRINT_SETUP, _T("Print &Setup..."), _T("Setup printer properties"));
file_menu->Append(WXPRINT_PAGE_SETUP, _T("Page Set&up..."), _T("Page setup"));
file_menu->Append(WXPRINT_PREVIEW, _T("Print Pre&view"), _T("Preview"));
#if defined(__WXMSW__) && wxTEST_POSTSCRIPT_IN_MSW
file_menu->AppendSeparator();
file_menu->Append(WXPRINT_PRINT_PS, _T("Print PostScript..."), _T("Print (PostScript)"));
- file_menu->Append(WXPRINT_PRINT_SETUP_PS, _T("Print Setup PostScript..."), _T("Setup printer properties (PostScript)"));
file_menu->Append(WXPRINT_PAGE_SETUP_PS, _T("Page Setup PostScript..."), _T("Page setup (PostScript)"));
file_menu->Append(WXPRINT_PREVIEW_PS, _T("Print Preview PostScript"), _T("Preview (PostScript)"));
#endif
+ file_menu->AppendSeparator();
+ file_menu->Append(WXPRINT_ANGLEUP, _T("Angle up\tAlt-U"), _T("Raise rotated text angle"));
+ file_menu->Append(WXPRINT_ANGLEDOWN, _T("Angle down\tAlt-D"), _T("Lower rotated text angle"));
file_menu->AppendSeparator();
file_menu->Append(WXPRINT_QUIT, _T("E&xit"), _T("Exit program"));
EVT_MENU(WXPRINT_QUIT, MyFrame::OnExit)
EVT_MENU(WXPRINT_PRINT, MyFrame::OnPrint)
EVT_MENU(WXPRINT_PREVIEW, MyFrame::OnPrintPreview)
-EVT_MENU(WXPRINT_PRINT_SETUP, MyFrame::OnPrintSetup)
EVT_MENU(WXPRINT_PAGE_SETUP, MyFrame::OnPageSetup)
EVT_MENU(WXPRINT_ABOUT, MyFrame::OnPrintAbout)
#if defined(__WXMSW__) && wxTEST_POSTSCRIPT_IN_MSW
EVT_MENU(WXPRINT_PRINT_PS, MyFrame::OnPrintPS)
EVT_MENU(WXPRINT_PREVIEW_PS, MyFrame::OnPrintPreviewPS)
-EVT_MENU(WXPRINT_PRINT_SETUP_PS, MyFrame::OnPrintSetupPS)
EVT_MENU(WXPRINT_PAGE_SETUP_PS, MyFrame::OnPageSetupPS)
#endif
+EVT_MENU(WXPRINT_ANGLEUP, MyFrame::OnAngleUp)
+EVT_MENU(WXPRINT_ANGLEDOWN, MyFrame::OnAngleDown)
END_EVENT_TABLE()
// Define my frame constructor
wxFrame(frame, wxID_ANY, title, pos, size)
{
canvas = NULL;
+ m_angle = 30;
+#if 0
+ wxImage image( wxT("test.jpg") );
+ image.SetAlpha();
+ int i,j;
+ for (i = 0; i < image.GetWidth(); i++)
+ for (j = 0; j < image.GetHeight(); j++)
+ image.SetAlpha( i, j, 50 );
+ m_bitmap = image;
+#endif
}
void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event))
frame->Show();
}
-void MyFrame::OnPrintSetup(wxCommandEvent& WXUNUSED(event))
-{
- wxPrintDialogData printDialogData(* g_printData);
- wxPrintDialog printerDialog(this, & printDialogData);
-
- printerDialog.GetPrintDialogData().SetSetupDialog(true /*show print setup dialog*/);
- printerDialog.ShowModal();
-
- (*g_printData) = printerDialog.GetPrintDialogData().GetPrintData();
-}
-
void MyFrame::OnPageSetup(wxCommandEvent& WXUNUSED(event))
{
- (*g_pageSetupData) = * g_printData;
+ (*g_pageSetupData) = *g_printData;
wxPageSetupDialog pageSetupDialog(this, g_pageSetupData);
pageSetupDialog.ShowModal();
frame->Show();
}
-void MyFrame::OnPrintSetupPS(wxCommandEvent& WXUNUSED(event))
-{
- wxPrintDialogData printDialogData(* g_printData);
- wxGenericPrintDialog printerDialog(this, & printDialogData);
-
- printerDialog.GetPrintDialogData().SetSetupDialog(true /*show print setup dialog*/);
- printerDialog.ShowModal();
-
- (*g_printData) = printerDialog.GetPrintDialogData().GetPrintData();
-}
-
void MyFrame::OnPageSetupPS(wxCommandEvent& WXUNUSED(event))
{
(*g_pageSetupData) = * g_printData;
_T("About wxWidgets printing demo"), wxOK|wxCENTRE);
}
+void MyFrame::OnAngleUp(wxCommandEvent& WXUNUSED(event))
+{
+ m_angle += 5;
+ canvas->Refresh();
+}
+
+void MyFrame::OnAngleDown(wxCommandEvent& WXUNUSED(event))
+{
+ m_angle -= 5;
+ canvas->Refresh();
+}
+
void MyFrame::Draw(wxDC& dc)
{
dc.SetBackground(*wxWHITE_BRUSH);
dc.SetBackgroundMode(wxTRANSPARENT);
- dc.SetBrush(* wxCYAN_BRUSH);
- dc.SetPen(* wxRED_PEN);
+ dc.SetBrush(*wxCYAN_BRUSH);
+ dc.SetPen(*wxRED_PEN);
- dc.DrawRectangle(0, 30, 200, 100);
+ dc.DrawRoundedRectangle(0, 20, 200, 80, 20);
- dc.DrawText( wxT("Rectangle 200 by 100"), 40, 40);
+ dc.DrawText( wxT("Rectangle 200 by 80"), 40, 40);
+ dc.SetPen( wxPen(*wxBLACK,0,wxDOT_DASH) );
dc.DrawEllipse(50, 140, 100, 50);
+ dc.SetPen(*wxRED_PEN);
dc.DrawText( wxT("Test message: this is in 10 point text"), 10, 180);
+
#if wxUSE_UNICODE
char *test = "Hebrew שלום -- Japanese (日本語)";
dc.DrawText( tmp, 10, 200 );
#endif
+ wxPoint points[5];
+ points[0].x = 0;
+ points[0].y = 0;
+ points[1].x = 20;
+ points[1].y = 0;
+ points[2].x = 20;
+ points[2].y = 20;
+ points[3].x = 10;
+ points[3].y = 20;
+ points[4].x = 10;
+ points[4].y = -20;
+ dc.DrawPolygon( 5, points, 20, 250, wxODDEVEN_RULE );
+ dc.DrawPolygon( 5, points, 50, 250, wxWINDING_RULE );
+
+ dc.DrawEllipticArc( 80, 250, 60, 30, 0.0, 270.0 );
+
+ points[0].x = 150;
+ points[0].y = 250;
+ points[1].x = 180;
+ points[1].y = 250;
+ points[2].x = 180;
+ points[2].y = 220;
+ points[3].x = 200;
+ points[3].y = 220;
+ dc.DrawSpline( 4, points );
+
+ dc.DrawArc( 20,10, 10,10, 25,40 );
+
+ wxString str;
+ int i = 0;
+ str.Printf( wxT("---- Text at angle %d ----"), i );
+ dc.DrawRotatedText( str, 100, 300, i );
+
+ i = m_angle;
+ str.Printf( wxT("---- Text at angle %d ----"), i );
+ dc.DrawRotatedText( str, 100, 300, i );
+
dc.SetPen(* wxBLACK_PEN);
dc.DrawLine(0, 0, 200, 200);
dc.DrawLine(200, 0, 0, 200);
wxIcon my_icon = wxICON(mondrian) ;
dc.DrawIcon( my_icon, 100, 100);
+
+ if (m_bitmap.Ok())
+ dc.DrawBitmap( m_bitmap, 10, 10 );
}
void MyFrame::OnSize(wxSizeEvent& event )
SetBackgroundColour(* wxWHITE);
}
-MyCanvas::~MyCanvas(void)
-{
-}
-
// Define the repainting behaviour
void MyCanvas::OnDraw(wxDC& dc)
{
// Calculate conversion factor for converting millimetres into
// logical units.
- // There are approx. 25.1 mm to the inch. There are ppi
+ // There are approx. 25.4 mm to the inch. There are ppi
// device units to the inch. Therefore 1 mm corresponds to
- // ppi/25.1 device units. We also divide by the
+ // ppi/25.4 device units. We also divide by the
// screen-to-printer scaling factor, because we need to
// unscale to pass logical units to DrawLine.
// Draw 50 mm by 50 mm L shape
- float logUnitsFactor = (float)(ppiPrinterX/(scale*25.1));
+ float logUnitsFactor = (float)(ppiPrinterX/(scale*25.4));
float logUnits = (float)(50*logUnitsFactor);
dc->SetPen(* wxBLACK_PEN);
dc->DrawLine(50, 250, (long)(50.0 + logUnits), 250);
dc->DrawLine(50, 250, 50, (long)(250.0 + logUnits));
dc->SetBackgroundMode(wxTRANSPARENT);
-
+ dc->SetBrush(*wxTRANSPARENT_BRUSH);
{ // GetTextExtent demo:
wxString words[7] = {_T("This "), _T("is "), _T("GetTextExtent "), _T("testing "), _T("string. "), _T("Enjoy "), _T("it!")};
}
// Writes a header on a page. Margin units are in millimetres.
-bool WritePageHeader(wxPrintout *printout, wxDC *dc, wxChar *text, float mmToLogical)
+bool WritePageHeader(wxPrintout *printout, wxDC *dc, const wxChar *text, float mmToLogical)
{
/*
static wxFont *headerFont = (wxFont *) NULL;