]> git.saurik.com Git - wxWidgets.git/commitdiff
1. modified Makefile to copy the .bmp
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 7 Feb 2000 16:37:59 +0000 (16:37 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 7 Feb 2000 16:37:59 +0000 (16:37 +0000)
2. added "change angle" to the menu, abort (and not crash) if bitmap not found

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5888 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/rotate/Makefile.in
samples/rotate/rotate.cpp

index a7c8e4fcd8142d145ecf957d8c420e3566af2b24..4bc40b8e528232510434c3b46c61e26db350981a 100644 (file)
@@ -17,5 +17,7 @@ PROGRAM=rotate
 
 OBJECTS=$(PROGRAM).o
 
+DATAFILES=kclub.bmp
+
 include ../../src/makeprog.env
 
index df87c29685fb75686e1d301e936b9415682fd3cb..3319489b51b14cd085db7e847358bbf1aff9bc52 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:      test.cpp
+// Name:      rotate.cpp
 // Purpose:   Image rotation test
 // Author:    Carlos Moreno
 // Modified by:
 
 #include "wx/image.h"
 
+#include <math.h>       // M_PI
+
 class MyApp: public wxApp
 {
+public:
     virtual bool OnInit();
+
+    const wxImage& GetImage() const { return m_image; }
+
+private:
+    wxImage m_image;
 };
 
 
@@ -34,20 +42,25 @@ public:
     MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
 
     void OnQuit (wxCommandEvent &);
+    void OnAngle(wxCommandEvent &);
     void OnMouseLeftUp (wxMouseEvent & event);
     void OnMouseRightUp (wxMouseEvent & event);
 
 private:
+    double  m_angle;
+
     DECLARE_EVENT_TABLE()
 };
 
 enum
 {
-    ID_Quit = 1
+    ID_Quit = 1,
+    ID_Angle
 };
 
 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()
@@ -57,7 +70,16 @@ IMPLEMENT_APP(MyApp)
 
 bool MyApp::OnInit()
 {
-    MyFrame *frame = new MyFrame ("wxWindows Skeleton", wxPoint(20,20), wxSize(600,450));
+    m_image = wxImage("kclub.bmp", wxBITMAP_TYPE_BMP);
+    if ( !m_image.Ok() )
+    {
+        wxLogError("Can't load the test image, please copy it to the "
+                   "program directory");
+        return FALSE;
+    }
+
+    MyFrame *frame = new MyFrame ("wxWindows rotate sample",
+                                  wxPoint(20,20), wxSize(600,450));
 
     frame->SetBackgroundColour (wxColour (0,80,60));
 
@@ -69,8 +91,12 @@ bool MyApp::OnInit()
 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     : wxFrame((wxFrame *)NULL, -1, title, pos, size)
 {
+    m_angle = 0.1;
+
     wxMenu *menuFile = new wxMenu;
-    menuFile->Append (ID_Quit, "E&xit");
+    menuFile->Append (ID_Angle, "Set &angle\tCtrl-A");
+    menuFile->AppendSeparator();
+    menuFile->Append (ID_Quit, "E&xit\tAlt-X");
 
     wxMenuBar *menuBar = new wxMenuBar;
     menuBar->Append (menuFile, "&File");
@@ -78,6 +104,18 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     SetMenuBar (menuBar);
 }
 
+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,
+                                  -180, +180,
+                                  this);
+    m_angle = (degrees * M_PI) / 180.0;
+}
+
 void MyFrame::OnQuit (wxCommandEvent &)
 {
     Close (TRUE);
@@ -87,38 +125,24 @@ void MyFrame::OnQuit (wxCommandEvent &)
 // Rotate with interpolation and with offset correction
 void MyFrame::OnMouseLeftUp (wxMouseEvent & event)
 {
-    static double angle = 0.1;
-    const double pi = 3.14159265359;
-
-    wxImage img ("kclub.bmp", wxBITMAP_TYPE_BMP);
-
     wxPoint offset;
-    wxImage img2 = img.Rotate(angle, wxPoint(img.GetWidth()/2, img.GetHeight()/2), TRUE, &offset);
-    angle += 0.05;
+    const wxImage& img = wxGetApp().GetImage();
+    wxImage img2 = img.Rotate(m_angle, wxPoint(img.GetWidth()/2, img.GetHeight()/2), TRUE, &offset);
 
     wxBitmap bmp = img2.ConvertToBitmap ();
 
     wxClientDC dc (this);
-    dc.DrawBitmap (bmp, event.m_x + offset.x, event.m_y + offset.y);
-
-    return;
+    dc.DrawBitmap (img2.ConvertToBitmap(), event.m_x + offset.x, event.m_y + offset.y);
 }
 
 // without interpolation, and without offset correction
 void MyFrame::OnMouseRightUp (wxMouseEvent & event)
 {
-    static double angle = 0.1;
-    const double pi = 3.14159265359;
-
-    wxImage img ("kclub.bmp", wxBITMAP_TYPE_BMP);
-
-    wxImage img2 = img.Rotate(angle, wxPoint(img.GetWidth()/2, img.GetHeight()/2), FALSE);
-    angle += 0.05;
+    const wxImage& img = wxGetApp().GetImage();
+    wxImage img2 = img.Rotate(m_angle, wxPoint(img.GetWidth()/2, img.GetHeight()/2), FALSE);
 
     wxBitmap bmp = img2.ConvertToBitmap ();
 
     wxClientDC dc (this);
     dc.DrawBitmap (bmp, event.m_x, event.m_y);
-
-    return;
 }