X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5b932572d4386de0a1383982b96ef45c25ee05..843b368a065941811fe57f5cf8ed054c667e59ff:/src/gtk/glcanvas.cpp diff --git a/src/gtk/glcanvas.cpp b/src/gtk/glcanvas.cpp index c55808b96f..1556694fe8 100644 --- a/src/gtk/glcanvas.cpp +++ b/src/gtk/glcanvas.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: gtk/glcanvas.cpp -// Purpose: wxGLCanvas, for using OpenGL/Mesa with wxWindows and GTK +// Purpose: wxGLCanvas, for using OpenGL/Mesa with wxWidgets and GTK // Author: Robert Roebling // Modified by: // Created: 17/08/98 @@ -9,10 +9,13 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "glcanvas.h" #endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + #include "wx/setup.h" #if wxUSE_GLCANVAS @@ -33,6 +36,10 @@ extern "C" #include "wx/gtk/win_gtk.h" +// DLL options compatibility check: +#include "wx/build.h" +WX_CHECK_BUILD_OPTIONS("wxGL") + //--------------------------------------------------------------------------- // global data //--------------------------------------------------------------------------- @@ -123,15 +130,12 @@ void wxGLContext::SetCurrent() void wxGLContext::SetColour(const wxChar *colour) { - float r = 0.0; - float g = 0.0; - float b = 0.0; - wxColour *col = wxTheColourDatabase->FindColour(colour); - if (col) + wxColour col = wxTheColourDatabase->Find(colour); + if (col.Ok()) { - r = (float)(col->Red()/256.0); - g = (float)(col->Green()/256.0); - b = (float)(col->Blue()/256.0); + float r = (float)(col.Red()/256.0); + float g = (float)(col.Green()/256.0); + float b = (float)(col.Blue()/256.0); glColor3f( r, g, b); } } @@ -156,10 +160,16 @@ wxPalette wxGLContext::CreateDefaultPalette() static gint gtk_glwindow_realized_callback( GtkWidget * WXUNUSED(widget), wxGLCanvas *win ) { - wxGLContext *share= win->m_sharedContext; - if (share==NULL && win->m_sharedContextOf) share=win->m_sharedContextOf->GetContext(); + // VZ: apparently in some cases we're called twice -- no idea why, + // but a check doesn't hurt + if ( !win->m_glContext ) + { + wxGLContext *share = win->m_sharedContext; + if ( !share && win->m_sharedContextOf ) + share = win->m_sharedContextOf->GetContext(); - win->m_glContext = new wxGLContext( TRUE, win, wxNullPalette, share ); + win->m_glContext = new wxGLContext( TRUE, win, wxNullPalette, share ); + } return FALSE; } @@ -361,7 +371,7 @@ wxGLCanvas::~wxGLCanvas() XVisualInfo *vi = (XVisualInfo *) m_vi; if (vi && m_canFreeVi) XFree( vi ); - if (m_glContext) delete m_glContext; + delete m_glContext; } void* wxGLCanvas::ChooseGLVisual(int *attribList)