From 1807c27dbced16268d76dbdbfdf3f09d2f501b2a Mon Sep 17 00:00:00 2001 From: Mattia Barbon Date: Sat, 19 Jul 2003 22:07:15 +0000 Subject: [PATCH] Don't #include Motif headers from src/x11/glcanvas.cpp. prepare for using src/x11/glcanvas.cpp for wxMotif. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22130 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/motif/window.h | 1 + src/motif/window.cpp | 17 +++++++++++++---- src/x11/glcanvas.cpp | 27 +++++++++++++++++++-------- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/include/wx/motif/window.h b/include/wx/motif/window.h index 70857eb954..51b393236d 100644 --- a/include/wx/motif/window.h +++ b/include/wx/motif/window.h @@ -122,6 +122,7 @@ public: virtual WXWidget GetTopWidget() const; // Get the underlying X window and display + WXWindow GetClientXWindow() const; WXWindow GetXWindow() const; WXDisplay *GetXDisplay() const; diff --git a/src/motif/window.cpp b/src/motif/window.cpp index d9555d5917..acca11e6c1 100644 --- a/src/motif/window.cpp +++ b/src/motif/window.cpp @@ -577,7 +577,7 @@ wxWindow *wxWindowBase::FindFocus() // (2) The widget with the focus may not be in the widget table // depending on which widgets I put in the table wxWindow *winFocus = (wxWindow *)NULL; - for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst(); + for ( wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) { @@ -904,7 +904,7 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) wxBrush brush(GetBackgroundColour(), wxSOLID); dc.SetBrush(brush); // FIXME: needed? - wxWindowList::Node *cnode = m_children.GetFirst(); + wxWindowList::compatibility_iterator cnode = m_children.GetFirst(); while (cnode) { wxWindow *child = cnode->GetData(); @@ -1000,7 +1000,7 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) // Now send expose events - wxList::Node* node = updateRects.GetFirst(); + wxList::compatibility_iterator node = updateRects.GetFirst(); while (node) { wxRect* rect = (wxRect*) node->GetData(); @@ -1666,7 +1666,7 @@ void wxWindow::DoPaint() // Responds to colour changes: passes event on to children. void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event) { - wxWindowList::Node *node = GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while ( node ) { // Only propagate to non-top-level windows @@ -1867,6 +1867,15 @@ bool wxWindow::DetachWidget(WXWidget widget) // Motif-specific accessors // ---------------------------------------------------------------------------- +WXWindow wxWindow::GetClientXWindow() const +{ + Widget wMain = (Widget)GetClientWidget(); + if ( wMain ) + return (WXWindow) XtWindow(wMain); + else + return (WXWindow) 0; +} + // Get the underlying X window WXWindow wxWindow::GetXWindow() const { diff --git a/src/x11/glcanvas.cpp b/src/x11/glcanvas.cpp index 3736c7e91e..6a6869fc0f 100644 --- a/src/x11/glcanvas.cpp +++ b/src/x11/glcanvas.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: glcanvas.cpp -// Purpose: wxGLCanvas, for using OpenGL with wxWindows 2.0 for Motif. +// Purpose: wxGLCanvas, for using OpenGL with wxWindows // Uses the GLX extension. // Author: Julian Smart and Wolfram Gloger // Modified by: @@ -18,8 +18,6 @@ #if wxUSE_GLCANVAS -// #error Sorry, wxGLCanvas does not work yet with wxX11 - #include "wx/glcanvas.h" #include "wx/utils.h" #include "wx/app.h" @@ -28,11 +26,20 @@ #ifdef __VMS # pragma message disable nosimpint #endif -#include +#include #ifdef __VMS # pragma message enable nosimpint #endif -#include "wx/motif/private.h" +#include "wx/x11/private.h" + +static inline WXWindow wxGetClientAreaWindow(wxWindow* win) +{ +#ifdef __WXMOTIF__ + return win->GetClientXWindow(); +#else + return win->GetClientAreaWindow(); +#endif +} #ifdef OLD_MESA // workaround for bug in Mesa's glx.c @@ -111,7 +118,7 @@ void wxGLContext::SwapBuffers() if (m_glContext) { Display* display = (Display*) wxGetDisplay(); - glXSwapBuffers(display, (Window) m_window->GetClientAreaWindow()); + glXSwapBuffers(display, (Window) wxGetClientAreaWindow(m_window)); } } @@ -120,7 +127,7 @@ void wxGLContext::SetCurrent() if (m_glContext) { Display* display = (Display*) wxGetDisplay(); - glXMakeCurrent(display, (Window) m_window->GetClientAreaWindow(), + glXMakeCurrent(display, (Window) wxGetClientAreaWindow(m_window), m_glContext );; } } @@ -136,7 +143,11 @@ void wxGLContext::SetColour(const char *colour) the_colour->Green(), the_colour->Blue()); } else { +#ifdef __WXMOTIF__ + the_colour->AllocColour(m_window->GetXDisplay()); +#else the_colour->CalcPixel(wxTheApp->GetMainColormap(wxGetDisplay())); +#endif GLint pix = (GLint)the_colour->GetPixel(); if(pix == -1) { @@ -297,7 +308,7 @@ bool wxGLCanvas::Create( wxWindow *parent, } else { // By default, we use the visual of xwindow // NI: is this really senseful ? opengl in e.g. color index mode ? - XGetWindowAttributes(display, (Window) GetClientAreaWindow(), &xwa); + XGetWindowAttributes(display, (Window)wxGetClientAreaWindow(this), &xwa); vi_templ.visualid = XVisualIDFromVisual(xwa.visual); vi = XGetVisualInfo(display, VisualIDMask, &vi_templ, &n); if(!vi) return FALSE; -- 2.45.2