]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/glx11.cpp
remove/replace redundant SetAutoLayout() and Fit() calls, leave just SetSizer[AndFit...
[wxWidgets.git] / src / unix / glx11.cpp
index ffa31f4eb4b1261e7ad4841c852f5bf950fa8d62..780029891d0de5e04b1e04e4a23a202935b105a4 100644 (file)
@@ -68,26 +68,26 @@ wxGLContext::~wxGLContext()
     glXDestroyContext( wxGetX11Display(), m_glContext );
 }
 
-void wxGLContext::SetCurrent(const wxGLCanvas& win) const
+bool wxGLContext::SetCurrent(const wxGLCanvas& win) const
 {
     if ( !m_glContext )
-        return;
+        return false;
 
     const Window xid = win.GetXWindow();
-    wxCHECK_RET( xid, _T("window must be shown") );
+    wxCHECK2_MSG( xid, return false, _T("window must be shown") );
 
-    MakeCurrent(xid, m_glContext);
+    return MakeCurrent(xid, m_glContext);
 }
 
 // wrapper around glXMakeContextCurrent/glXMakeCurrent depending on GLX
 // version
 /* static */
-void wxGLContext::MakeCurrent(GLXDrawable drawable, GLXContext context)
+bool wxGLContext::MakeCurrent(GLXDrawable drawable, GLXContext context)
 {
     if (wxGLCanvas::GetGLXVersion() >= 13)
-        glXMakeContextCurrent( wxGetX11Display(), drawable, drawable, context);
+        return glXMakeContextCurrent( wxGetX11Display(), drawable, drawable, context);
     else // GLX <= 1.2 doesn't have glXMakeContextCurrent()
-        glXMakeCurrent( wxGetX11Display(), drawable, context);
+        return glXMakeCurrent( wxGetX11Display(), drawable, context);
 }
 
 // ============================================================================
@@ -185,17 +185,21 @@ wxGLCanvasX11::ConvertWXAttrsToGL(const int *wxattrs, int *glattrs, size_t n)
                     glattrs[p++] = GLX_LEVEL;
                     break;
 
+                    // the following boolean attributes don't have values in wx
+                    // API (they're turned on if specified) but do have them in
+                    // OpenGL, so do put them into glattrs and also skip the
+                    // copy of wx value after switch by using "continue"
+                    // instead of "break"
                 case WX_GL_DOUBLEBUFFER:
                     glattrs[p++] = GLX_DOUBLEBUFFER;
                     glattrs[p++] = True;
-
-                    // again, we don't have value for this one in wx list (even
-                    // though OpenGL does use it)
                     continue;
 
                 case WX_GL_STEREO:
                     glattrs[p++] = GLX_STEREO;
-                    break;
+                    glattrs[p++] = True;
+                    continue;
+
 
                 case WX_GL_AUX_BUFFERS:
                     glattrs[p++] = GLX_AUX_BUFFERS;
@@ -293,6 +297,24 @@ wxGLCanvasX11::InitXVisualInfo(const int *attribList,
     return *pXVisual != NULL;
 }
 
+/* static */
+bool
+wxGLCanvasBase::IsDisplaySupported(const int *attribList)
+{
+    GLXFBConfig *fbc = NULL;
+    XVisualInfo *vi = NULL;
+
+    const bool
+        isSupported = wxGLCanvasX11::InitXVisualInfo(attribList, &fbc, &vi);
+
+    if ( fbc )
+        XFree(fbc);
+    if ( vi )
+        XFree(vi);
+
+    return isSupported;
+}
+
 // ----------------------------------------------------------------------------
 // default visual management
 // ----------------------------------------------------------------------------
@@ -347,12 +369,13 @@ int wxGLCanvasX11::GetGLXVersion()
     return s_glxVersion;
 }
 
-void wxGLCanvasX11::SwapBuffers()
+bool wxGLCanvasX11::SwapBuffers()
 {
     const Window xid = GetXWindow();
-    wxCHECK_RET( xid, _T("window must be shown") );
+    wxCHECK2_MSG( xid, return false, _T("window must be shown") );
 
     glXSwapBuffers(wxGetX11Display(), xid);
+    return true;
 }
 
 bool wxGLCanvasX11::IsShownOnScreen() const