]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/rotate/rotate.cpp
fix dialogs sample to remember last color with generic color dialog
[wxWidgets.git] / samples / rotate / rotate.cpp
index 4b309651bdb2f8dc6b9018a5bef0a8c79f759426..c5409832397180c53427b6bceccf3a3daa648da4 100644 (file)
@@ -21,6 +21,7 @@
 #endif
 
 #include "wx/image.h"
+#include "wx/numdlg.h"
 
 /* GRG: This is not ANSI standard, define M_PI explicitly
 #include <math.h>       // M_PI
@@ -43,6 +44,19 @@ private:
 };
 
 
+class MyCanvas: public wxScrolledWindow
+{
+public:
+    MyCanvas(wxWindow* parent);
+
+    void OnMouseLeftUp (wxMouseEvent & event);
+    void OnMouseRightUp (wxMouseEvent & event);
+
+private:
+
+    DECLARE_EVENT_TABLE()
+};
+
 class MyFrame: public wxFrame
 {
 public:
@@ -50,10 +64,7 @@ public:
 
     void OnQuit (wxCommandEvent &);
     void OnAngle(wxCommandEvent &);
-    void OnMouseLeftUp (wxMouseEvent & event);
-    void OnMouseRightUp (wxMouseEvent & event);
 
-private:
     double  m_angle;
 
     DECLARE_EVENT_TABLE()
@@ -65,48 +76,54 @@ enum
     ID_Angle
 };
 
+BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
+    EVT_LEFT_UP (MyCanvas::OnMouseLeftUp)
+    EVT_RIGHT_UP (MyCanvas::OnMouseRightUp)
+END_EVENT_TABLE()
+
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU (ID_Quit, MyFrame::OnQuit)
     EVT_MENU (ID_Angle, MyFrame::OnAngle)
-    EVT_LEFT_UP (MyFrame::OnMouseLeftUp)
-    EVT_RIGHT_UP (MyFrame::OnMouseRightUp)
 END_EVENT_TABLE()
 
 IMPLEMENT_APP(MyApp)
 
-
 bool MyApp::OnInit()
 {
-    m_image = wxImage("kclub.bmp", wxBITMAP_TYPE_BMP);
+    m_image = wxImage(_T("kclub.bmp"), wxBITMAP_TYPE_BMP);
+
+    // any unused colour will do
+    m_image.SetMaskColour( 0, 255, 255 );
+
     if ( !m_image.Ok() )
     {
-        wxLogError("Can't load the test image, please copy it to the "
-                   "program directory");
-        return FALSE;
+        wxLogError(wxT("Can't load the test image, please copy it to the ")
+                   wxT("program directory"));
+        return false;
     }
 
-    MyFrame *frame = new MyFrame ("wxWindows rotate sample",
+    MyFrame *frame = new MyFrame (_T("wxWidgets rotate sample"),
                                   wxPoint(20,20), wxSize(600,450));
 
-    frame->SetBackgroundColour (wxColour (0,80,60));
-
-    frame->Show (TRUE);
+    frame->Show (true);
     SetTopWindow (frame);
-    return TRUE;
+    return true;
 }
 
 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
-    : wxFrame((wxFrame *)NULL, -1, title, pos, size)
+    : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size)
 {
     m_angle = 0.1;
 
+    new MyCanvas(this);
+
     wxMenu *menuFile = new wxMenu;
-    menuFile->Append (ID_Angle, "Set &angle\tCtrl-A");
+    menuFile->Append (ID_Angle, _T("Set &angle\tCtrl-A"));
     menuFile->AppendSeparator();
-    menuFile->Append (ID_Quit, "E&xit\tAlt-X");
+    menuFile->Append (ID_Quit, _T("E&xit\tAlt-X"));
 
     wxMenuBar *menuBar = new wxMenuBar;
-    menuBar->Append (menuFile, "&File");
+    menuBar->Append (menuFile, _T("&File"));
 
     SetMenuBar (menuBar);
 }
@@ -114,42 +131,53 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
 void MyFrame::OnAngle (wxCommandEvent &)
 {
     long degrees = (long)((180*m_angle)/M_PI);
-    degrees = wxGetNumberFromUser("Change the image rotation angle",
-                                  "Angle in degrees:",
-                                  "wxWindows rotate sample",
+    degrees = wxGetNumberFromUser(_T("Change the image rotation angle"),
+                                  _T("Angle in degrees:"),
+                                  _T("wxWidgets rotate sample"),
                                   degrees,
                                   -180, +180,
                                   this);
-    m_angle = (degrees * M_PI) / 180.0;
+    if ( degrees != -1 )
+        m_angle = (degrees * M_PI) / 180.0;
 }
 
 void MyFrame::OnQuit (wxCommandEvent &)
 {
-    Close (TRUE);
+    Close (true);
 }
 
+MyCanvas::MyCanvas(wxWindow* parent):
+  wxScrolledWindow(parent, wxID_ANY)
+{
+    SetBackgroundColour (wxColour (0,80,60));
+    ClearBackground();
+}
 
 // Rotate with interpolation and with offset correction
-void MyFrame::OnMouseLeftUp (wxMouseEvent & event)
+void MyCanvas::OnMouseLeftUp (wxMouseEvent & event)
 {
+    MyFrame* frame = (MyFrame*) GetParent();
+
     wxPoint offset;
     const wxImage& img = wxGetApp().GetImage();
-    wxImage img2 = img.Rotate(m_angle, wxPoint(img.GetWidth()/2, img.GetHeight()/2), TRUE, &offset);
+    wxImage img2 = img.Rotate(frame->m_angle, wxPoint(img.GetWidth()/2, img.GetHeight()/2), true, &offset);
 
-    wxBitmap bmp = img2.ConvertToBitmap ();
+    wxBitmap bmp(img2);
 
     wxClientDC dc (this);
-    dc.DrawBitmap (img2.ConvertToBitmap(), event.m_x + offset.x, event.m_y + offset.y);
+    dc.DrawBitmap (bmp, event.m_x + offset.x, event.m_y + offset.y, true);
 }
 
 // without interpolation, and without offset correction
-void MyFrame::OnMouseRightUp (wxMouseEvent & event)
+void MyCanvas::OnMouseRightUp (wxMouseEvent & event)
 {
+    MyFrame* frame = (MyFrame*) GetParent();
+
     const wxImage& img = wxGetApp().GetImage();
-    wxImage img2 = img.Rotate(m_angle, wxPoint(img.GetWidth()/2, img.GetHeight()/2), FALSE);
+    wxImage img2 = img.Rotate(frame->m_angle, wxPoint(img.GetWidth()/2, img.GetHeight()/2), false);
 
-    wxBitmap bmp = img2.ConvertToBitmap ();
+    wxBitmap bmp(img2);
 
     wxClientDC dc (this);
-    dc.DrawBitmap (bmp, event.m_x, event.m_y);
+    dc.DrawBitmap (bmp, event.m_x, event.m_y, true);
 }