]> git.saurik.com Git - wxWidgets.git/commitdiff
Allow to use space to toggle spinning of the cube in OpenGL sample.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 24 Oct 2010 22:40:58 +0000 (22:40 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 24 Oct 2010 22:40:58 +0000 (22:40 +0000)
Small enhancement to the cube OpenGL sample.

Closes #11545.

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

docs/doxygen/mainpages/samples.h
samples/opengl/cube/cube.cpp
samples/opengl/cube/cube.h

index 29807d67ffda7bf83ae653dd2eecc5580f9a26f7..30a2eccab58664171186b0aa2935944bf0e205bd 100644 (file)
@@ -682,9 +682,10 @@ commands through menu.
 
 @sampleabout{wxGLCanvas}
 
-@li @b cube Draws only a cube to demonstrate how to write a basic wxWidgets OpenGL program.
-@li @b isosurf Draws a surface by reading coordinates from a dat file.
-@li @b penguin Draws a rotatable penguin by reading data from a dxf file.
+@li @b cube Draws a cube to demonstrate how to write a basic wxWidgets OpenGL program.
+    Arrow keys rotate the cube. Space bar toggles spinning.
+@li @b isosurf Draws a surface by reading coordinates from a DAT file.
+@li @b penguin Draws a rotatable penguin by reading data from a DXF file.
 
 @sampledir{opengl}
 
index f7423a73b2e4624e88a7901df04bbed2ad0829b8..c4a60b515a32edfae2802131090abc6ac1ddd373 100644 (file)
     #include "../../sample.xpm"
 #endif
 
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+// control ids
+enum
+{
+    SpinTimer = wxID_HIGHEST + 1
+};
+
 // ----------------------------------------------------------------------------
 // helper functions
 // ----------------------------------------------------------------------------
@@ -283,6 +293,7 @@ TestGLContext& MyApp::GetContext(wxGLCanvas *canvas)
 BEGIN_EVENT_TABLE(TestGLCanvas, wxGLCanvas)
     EVT_PAINT(TestGLCanvas::OnPaint)
     EVT_KEY_DOWN(TestGLCanvas::OnKeyDown)
+    EVT_TIMER(SpinTimer, TestGLCanvas::OnSpinTimer)
 END_EVENT_TABLE()
 
 TestGLCanvas::TestGLCanvas(wxWindow *parent)
@@ -292,10 +303,11 @@ TestGLCanvas::TestGLCanvas(wxWindow *parent)
     // viewport settings.
     : wxGLCanvas(parent, wxID_ANY, NULL /* attribs */,
                  wxDefaultPosition, wxDefaultSize,
-                 wxFULL_REPAINT_ON_RESIZE)
+                 wxFULL_REPAINT_ON_RESIZE),
+      m_xangle(30.0),
+      m_yangle(30.0),
+      m_spinTimer(this,SpinTimer)
 {
-    m_xangle =
-    m_yangle = 30;
 }
 
 void TestGLCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
@@ -318,44 +330,52 @@ void TestGLCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
     SwapBuffers();
 }
 
-void TestGLCanvas::OnKeyDown( wxKeyEvent& event )
+void TestGLCanvas::Spin(float xSpin, float ySpin)
 {
-    float *p = NULL;
+    m_xangle += xSpin;
+    m_yangle += ySpin;
 
-    bool inverse = false;
+    Refresh(false);
+}
+
+void TestGLCanvas::OnKeyDown(wxKeyEvent& event)
+{
+    float angle = 5.0;
 
     switch ( event.GetKeyCode() )
     {
         case WXK_RIGHT:
-            inverse = true;
-            // fall through
+            Spin( 0.0, -angle );
+            break;
 
         case WXK_LEFT:
-            // rotate around Y axis
-            p = &m_yangle;
+            Spin( 0.0, angle );
             break;
 
         case WXK_DOWN:
-            inverse = true;
-            // fall through
+            Spin( -angle, 0.0 );
+            break;
 
         case WXK_UP:
-            // rotate around X axis
-            p = &m_xangle;
+            Spin( angle, 0.0 );
+            break;
+
+        case WXK_SPACE:
+            if ( m_spinTimer.IsRunning() )
+                m_spinTimer.Stop();
+            else
+                m_spinTimer.Start( 25 );
             break;
 
         default:
             event.Skip();
             return;
     }
+}
 
-    float angle = 5;
-    if ( inverse )
-        angle = -angle;
-
-    *p += angle;
-
-    Refresh(false);
+void TestGLCanvas::OnSpinTimer(wxTimerEvent& WXUNUSED(event))
+{
+    Spin(0.0, 4.0);
 }
 
 
index 36769b884f84c87e33e3a429d0e3afe17d942295..3aa6539ebe1931d6dda5c84abb0fcdec2ac6eb13 100644 (file)
@@ -67,12 +67,16 @@ public:
 
 private:
     void OnPaint(wxPaintEvent& event);
+    void Spin(float xSpin, float ySpin);
     void OnKeyDown(wxKeyEvent& event);
+    void OnSpinTimer(wxTimerEvent& WXUNUSED(event));
 
     // angles of rotation around x- and y- axis
     float m_xangle,
           m_yangle;
 
+    wxTimer m_spinTimer;
+
     DECLARE_EVENT_TABLE()
 };