X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4a7108f7393a4d832a2e7512dff78b9250ece59..40f7145ca55ccf1b197e70acf79bbd4aa5d85145:/samples/opengl/cube/cube.cpp diff --git a/samples/opengl/cube/cube.cpp b/samples/opengl/cube/cube.cpp index 75dde17d4e..02bf45444a 100644 --- a/samples/opengl/cube/cube.cpp +++ b/samples/opengl/cube/cube.cpp @@ -34,8 +34,13 @@ #include "cube.h" #ifndef __WXMSW__ // for wxStopWatch, see remark below -#include -#include + #if defined(__WXMAC__) && !defined(__DARWIN__) + #include + #include + #else + #include + #include + #endif #else #include #endif @@ -128,20 +133,21 @@ unsigned long wxStopWatch( unsigned long *sec_base ) { unsigned long secs,msec; -#ifndef __WXMSW__ // think every unice has gettimeofday - struct timeval tv; - gettimeofday( &tv, (struct timezone *)NULL ); - secs = tv.tv_sec; - msec = tv.tv_usec/1000; -#else +#if defined(__WXMSW__) struct timeb tb; - ftime( &tb ); - secs = tb.time; - msec = tb.millitm; - +#elif defined(__WXMAC__) && !defined(__DARWIN__) + wxLongLong tl = wxGetLocalTimeMillis(); + secs = (unsigned long) (tl.GetValue() / 1000); + msec = (unsigned long) (tl.GetValue() - secs*1000); +#else + // think every unice has gettimeofday + struct timeval tv; + gettimeofday( &tv, (struct timezone *)NULL ); + secs = tv.tv_sec; + msec = tv.tv_usec/1000; #endif if( *sec_base == 0 ) @@ -209,6 +215,11 @@ void TestGLCanvas::Render() m_init = TRUE; } + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-0.5F, 0.5F, -0.5F, 0.5F, 1.0F, 3.0F); + glMatrixMode(GL_MODELVIEW); + /* clear color and depth buffers */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -264,15 +275,18 @@ void TestGLCanvas::OnPaint( wxPaintEvent& event ) void TestGLCanvas::OnSize(wxSizeEvent& event) { - int width, height; - GetClientSize(& width, & height); + // this is also necessary to update the context on some platforms + wxGLCanvas::OnSize(event); + // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...) + int w, h; + GetClientSize(&w, &h); #ifndef __WXMOTIF__ if (GetContext()) #endif { SetCurrent(); - glViewport(0, 0, width, height); + glViewport(0, 0, (GLint) w, (GLint) h); } } @@ -360,10 +374,7 @@ void TestGLCanvas::OnKeyDown( wxKeyEvent& event ) unsigned long currTime = event.m_timeStamp - m_xsynct; - // we have to test for m_Key != 0 because otherwise the test would be - // always true because it is set to 0 in OnKeyUp() below - I don't know - // why is it like this, just fixing blindly (VZ) - if (evkey != m_Key && m_Key != 0) + if (evkey != m_Key) { m_Key = evkey; m_LastRedraw = m_StartTime = m_LastTime = currTime; @@ -373,7 +384,11 @@ void TestGLCanvas::OnKeyDown( wxKeyEvent& event ) { Action( m_Key, m_LastTime-m_StartTime, currTime-m_StartTime ); +#if defined(__WXMAC__) && !defined(__DARWIN__) + m_LastRedraw = currTime; // wxStopWatch() doesn't work on Mac... +#else m_LastRedraw = wxStopWatch(&m_secbase) - m_gsynct; +#endif m_LastTime = currTime; } @@ -425,7 +440,7 @@ void MyFrame::OnExit(wxCommandEvent& event) Destroy(); } -void MyFrame::OnNewWindow() +void MyFrame::OnNewWindow(wxCommandEvent& event) { MyFrame *frame = new MyFrame(NULL, "Cube OpenGL Demo Clone", wxPoint(50, 50), wxSize(400, 300)); @@ -450,13 +465,13 @@ void MyFrame::OnNewWindow() frame->SetMenuBar(menuBar); frame->m_canvas = new TestGLCanvas( frame, *m_canvas, -1, - wxPoint(0, 0), wxSize(200, 200) ); + wxDefaultPosition, wxDefaultSize ); // Show the frame frame->Show(TRUE); } -void MyFrame::OnDefRotateLeftKey() +void MyFrame::OnDefRotateLeftKey(wxCommandEvent& event) { ScanCodeDialog dial( this, -1, m_canvas->m_rleft, wxString("Left"), "Define key" ); @@ -464,7 +479,7 @@ void MyFrame::OnDefRotateLeftKey() if( result == wxID_OK ) m_canvas->m_rleft = dial.GetValue(); } -void MyFrame::OnDefRotateRightKey() +void MyFrame::OnDefRotateRightKey(wxCommandEvent& event) { ScanCodeDialog dial( this, -1, m_canvas->m_rright, wxString("Right"), "Define key" ); @@ -506,7 +521,7 @@ bool MyApp::OnInit(void) frame->SetMenuBar(menuBar); - frame->m_canvas = new TestGLCanvas(frame, -1, wxPoint(0, 0), wxSize(200, 200)); + frame->m_canvas = new TestGLCanvas(frame, -1, wxDefaultPosition, wxDefaultSize); // Show the frame frame->Show(TRUE);