DO NOT REPLY TO THIS MESSAGE.  INSTEAD, POST ANY RESPONSES TO THE LINK BELOW.

[STR New]

Link: http://www.fltk.org/str.php?L2260
Version: 1.3-current


OpenGL subwindows that are embedded in Fl_Tabs widgets don't hide
correctly, when tabs are switched on Mac OS X. It has been observed that
it works okay on Windows and Linux though.

Please see the discussion of the problem at:
<http://www.fltk.org/newsgroups.php?gfltk.general+Q%22FLTK%20Tab%20switching+not+hiding+GL+context%22>

Greg provided a demo program in:
<http://www.fltk.org/newsgroups.php?gfltk.general+v:29299>

I attached this demo program as gl_tabs.cxx.

The effect can be seen best when resizing the window after switching tabs.


Link: http://www.fltk.org/str.php?L2260
Version: 1.3-current
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Tabs.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Gl_Window.H>
#include <FL/gl.h>
//
// Simple tabs example with openGL widgets in each tab. -erco 9/12/09
//
class MyGlWindow : public Fl_Gl_Window {
    char graphic; // 'x' or '+'
    void draw() {
        // First time? init viewport, etc.
        if (!valid()) {
            valid(1);
            glLoadIdentity();
            glViewport(0,0,w(),h());
            glOrtho(-w(),w(),-h(),h(),-1,1);
        }
        // Clear screen
        glClear(GL_COLOR_BUFFER_BIT);
        switch(graphic) {
            case 'x': // Draw white 'x'
                glColor3f(1.0, 1.0, 1.0);
                glBegin(GL_LINE_STRIP); glVertex2f(w(), h()); 
glVertex2f(-w(),-h()); glEnd();
                glBegin(GL_LINE_STRIP); glVertex2f(w(),-h()); glVertex2f(-w(), 
h()); glEnd();
                break;
            case '+': // Draw white '+'
                glColor3f(1.0, 1.0, 1.0);
                glBegin(GL_LINE_STRIP); glVertex2f(w()/2, h()); 
glVertex2f(w()/2,-h()); glEnd();
                glBegin(GL_LINE_STRIP); glVertex2f(w(),h()/2); glVertex2f(-w(), 
h()/2); glEnd();
                break;
        }
    }
    // HANDLE WINDOW RESIZING
    //    If window reshaped, need to readjust viewport/ortho
    //
    void resize(int X,int Y,int W,int H) {
        Fl_Gl_Window::resize(X,Y,W,H);
        glLoadIdentity();
        glViewport(0,0,W,H);
        glOrtho(-W,W,-H,H,-1,1);
        redraw();
    }
public:
    // CONSTRUCTOR
    MyGlWindow(int X,int Y,int W,int H,const char*L=0) : 
Fl_Gl_Window(X,Y,W,H,L) {
        graphic = 'x';
        end();
    }
    void Graphic(char val) {
        graphic = val;
    }
};

int main(int argc, char *argv[]) {
    Fl_Window *win = new Fl_Window(500,200,"Tabs/openGL Example");
    {
        Fl_Tabs *tabs = new Fl_Tabs(10,10,500-20,200-20);
        {
            // Aaa tab
            Fl_Group *x_tab = new Fl_Group(10,35,500-20,200-45,"'x'");
            {
                MyGlWindow *gl = new MyGlWindow(x_tab->x()+10, x_tab->y()+10, 
x_tab->w()-20, x_tab->h()-20);
                gl->Graphic('x');
            }
            x_tab->end();

            // Bbb tab
            Fl_Group *plus_tab = new Fl_Group(10,35,500-10,200-35,"'+'");
            {
                MyGlWindow *gl = new MyGlWindow(plus_tab->x()+10, 
plus_tab->y()+10, plus_tab->w()-20, plus_tab->h()-20);
                gl->Graphic('+');
            }
            plus_tab->end();
        }
        tabs->end();
    }
    win->end();
    win->resizable(win);
    win->show();
    return(Fl::run());
}
_______________________________________________
fltk-bugs mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-bugs

Reply via email to