// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
#pragma implementation
#pragma interface
#endif
#include "wx/log.h"
-#if !wxUSE_GLCANVAS
-#error Please set wxUSE_GLCANVAS to 1 in setup.h.
-#endif
-
#include "cube.h"
#ifndef __WXMSW__ // for wxStopWatch, see remark below
-#include <sys/time.h>
-#include <sys/unistd.h>
+ #if defined(__WXMAC__) && !defined(__DARWIN__)
+ #include <utime.h>
+ #include <unistd.h>
+ #else
+ #include <sys/time.h>
+ #include <sys/unistd.h>
+ #endif
#else
#include <sys/timeb.h>
#endif
ScanCodeCtrl::ScanCodeCtrl( wxWindow* parent, wxWindowID id, int code,
const wxPoint& pos, const wxSize& size )
- : wxTextCtrl( parent, id, "", pos, size )
+ : wxTextCtrl( parent, id, wxEmptyString, pos, size )
{ wxString buf;
- buf.Printf( "0x%04x", code );
+ buf.Printf( _T("0x%04x"), code );
SetValue( buf );
}
void ScanCodeCtrl::OnKeyDown( wxKeyEvent& event )
-{ wxString buf;
- buf.Printf( "0x%04x", event.KeyCode() );
+{
+ wxString buf;
+ buf.Printf( _T("0x%04x"), event.GetKeyCode() );
SetValue( buf );
}
const int code, const wxString &descr, const wxString& title )
: wxDialog( parent, id, title, wxPoint(-1, -1), wxSize(96*2,76*2) )
{
- new wxStaticText( this, -1, "Scancode", wxPoint(4*2,3*2),
+ new wxStaticText( this, -1, _T("Scancode"), wxPoint(4*2,3*2),
wxSize(31*2,12*2) );
m_ScanCode = new ScanCodeCtrl( this, -1, code, wxPoint(37*2,6*2),
wxSize(53*2,14*2) );
- new wxStaticText( this, -1, "Description", wxPoint(4*2,24*2),
+ new wxStaticText( this, -1, _T("Description"), wxPoint(4*2,24*2),
wxSize(32*2,12*2) );
m_Description = new wxTextCtrl( this, -1, descr, wxPoint(37*2,27*2),
wxSize(53*2,14*2) );
- new wxButton( this, wxID_OK, "Ok", wxPoint(20*2,50*2), wxSize(20*2,13*2) );
- new wxButton( this, wxID_CANCEL, "Cancel", wxPoint(44*2,50*2),
+ new wxButton( this, wxID_OK, _T("Ok"), wxPoint(20*2,50*2), wxSize(20*2,13*2) );
+ new wxButton( this, wxID_CANCEL, _T("Cancel"), wxPoint(44*2,50*2),
wxSize(25*2,13*2) );
}
{
int code;
wxString buf = m_ScanCode->GetValue();
- sscanf( buf.c_str(), "%i", &code );
+ wxSscanf( buf.c_str(), _T("%i"), &code );
return( code );
}
{
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 )
Implementation of Test-GLCanvas
-----------------------------------------------------------------*/
+#if wxUSE_GLCANVAS
+
BEGIN_EVENT_TABLE(TestGLCanvas, wxGLCanvas)
EVT_SIZE(TestGLCanvas::OnSize)
EVT_PAINT(TestGLCanvas::OnPaint)
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);
SwapBuffers();
}
-void TestGLCanvas::OnEnterWindow( wxMouseEvent& event )
+void TestGLCanvas::OnEnterWindow( wxMouseEvent& WXUNUSED(event) )
{
SetFocus();
}
-void TestGLCanvas::OnPaint( wxPaintEvent& event )
+void TestGLCanvas::OnPaint( wxPaintEvent& WXUNUSED(event) )
{
Render();
}
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);
}
}
-void TestGLCanvas::OnEraseBackground(wxEraseEvent& event)
+void TestGLCanvas::OnEraseBackground(wxEraseEvent& WXUNUSED(event))
{
// Do nothing, to avoid flashing.
}
void TestGLCanvas::OnKeyDown( wxKeyEvent& event )
{
- long evkey = event.KeyCode();
+ long evkey = event.GetKeyCode();
if (evkey == 0) return;
if (!m_TimeInitialized)
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;
{
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;
}
}
+#endif // wxUSE_GLCANVAS
+
/* -----------------------------------------------------------------------
Main Window
-------------------------------------------------------------------------*/
}
// Intercept menu commands
-void MyFrame::OnExit(wxCommandEvent& event)
+void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event))
{
Destroy();
}
-void MyFrame::OnNewWindow()
+void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event))
{
- MyFrame *frame = new MyFrame(NULL, "Cube OpenGL Demo Clone",
+ MyFrame *frame = new MyFrame(NULL, _T("Cube OpenGL Demo Clone"),
wxPoint(50, 50), wxSize(400, 300));
// Give it an icon
#ifdef __WXMSW__
- frame->SetIcon(wxIcon("mondrian"));
+ frame->SetIcon(wxIcon(_T("mondrian")));
#endif
// Make a menubar
wxMenu *winMenu = new wxMenu;
- winMenu->Append(wxID_EXIT, "&Close");
- winMenu->Append(ID_NEW_WINDOW, "&New" );
+ winMenu->Append(wxID_EXIT, _T("&Close"));
+ winMenu->Append(ID_NEW_WINDOW, _T("&New") );
wxMenuBar *menuBar = new wxMenuBar;
- menuBar->Append(winMenu, "&Window");
+ menuBar->Append(winMenu, _T("&Window"));
winMenu = new wxMenu;
- winMenu->Append(ID_DEF_ROTATE_LEFT_KEY, "Rotate &left");
- winMenu->Append(ID_DEF_ROTATE_RIGHT_KEY, "Rotate &right");
- menuBar->Append(winMenu, "&Key");
+ winMenu->Append(ID_DEF_ROTATE_LEFT_KEY, _T("Rotate &left"));
+ winMenu->Append(ID_DEF_ROTATE_RIGHT_KEY, _T("Rotate &right"));
+ menuBar->Append(winMenu, _T("&Key"));
frame->SetMenuBar(menuBar);
+#if wxUSE_GLCANVAS
frame->m_canvas = new TestGLCanvas( frame, *m_canvas, -1,
- wxPoint(0, 0), wxSize(200, 200) );
+ wxDefaultPosition, wxDefaultSize );
+#endif
// Show the frame
frame->Show(TRUE);
}
-void MyFrame::OnDefRotateLeftKey()
+void MyFrame::OnDefRotateLeftKey(wxCommandEvent& WXUNUSED(event))
{
+#if wxUSE_GLCANVAS
ScanCodeDialog dial( this, -1, m_canvas->m_rleft,
- wxString("Left"), "Define key" );
+ wxString(_T("Left")), _T("Define key") );
int result = dial.ShowModal();
if( result == wxID_OK )
m_canvas->m_rleft = dial.GetValue();
+#endif
}
-void MyFrame::OnDefRotateRightKey()
+
+void MyFrame::OnDefRotateRightKey(wxCommandEvent& WXUNUSED(event))
{
+#if wxUSE_GLCANVAS
ScanCodeDialog dial( this, -1, m_canvas->m_rright,
- wxString("Right"), "Define key" );
+ wxString(_T("Right")), _T("Define key") );
int result = dial.ShowModal();
if( result == wxID_OK )
m_canvas->m_rright = dial.GetValue();
+#endif
}
/*------------------------------------------------------------------
wxLog::SetTraceMask(wxTraceMessages);
// Create the main frame window
- MyFrame *frame = new MyFrame(NULL, "Cube OpenGL Demo", wxPoint(50, 50),
+ MyFrame *frame = new MyFrame(NULL, _T("Cube OpenGL Demo"), wxPoint(50, 50),
wxSize(400, 300));
// Give it an icon
#ifdef wx_msw
// Make a menubar
wxMenu *winMenu = new wxMenu;
- winMenu->Append(wxID_EXIT, "&Close");
- winMenu->Append(ID_NEW_WINDOW, "&New" );
+ winMenu->Append(wxID_EXIT, _T("&Close"));
+ winMenu->Append(ID_NEW_WINDOW, _T("&New") );
wxMenuBar *menuBar = new wxMenuBar;
- menuBar->Append(winMenu, "&Window");
+ menuBar->Append(winMenu, _T("&Window"));
winMenu = new wxMenu;
- winMenu->Append(ID_DEF_ROTATE_LEFT_KEY, "Rotate &left");
- winMenu->Append(ID_DEF_ROTATE_RIGHT_KEY, "Rotate &right");
- menuBar->Append(winMenu, "&Key");
+ winMenu->Append(ID_DEF_ROTATE_LEFT_KEY, _T("Rotate &left"));
+ winMenu->Append(ID_DEF_ROTATE_RIGHT_KEY, _T("Rotate &right"));
+ menuBar->Append(winMenu, _T("&Key"));
frame->SetMenuBar(menuBar);
- frame->m_canvas = new TestGLCanvas(frame, -1, wxPoint(0, 0), wxSize(200, 200));
+#if wxUSE_GLCANVAS
+
+ frame->m_canvas = new TestGLCanvas(frame, -1, wxDefaultPosition, wxDefaultSize);
// Show the frame
frame->Show(TRUE);
return TRUE;
+
+#else
+
+ wxMessageBox( _T("This sample has to be compiled with wxUSE_GLCANVAS"), _T("Building error"), wxOK);
+
+ return FALSE;
+
+#endif
+
}