|
hmm.. seems I replied too soon. I implemented the fixes but the behavior remains the same. Since Fl_Wizard is closely related to Fl_Tabs, I looked into http://www.fltk.org/str.php?L2260 and the suggested fix resolved the problem. It's Mac-specific so easy to miss.
> Thanks Greg.. that helps quite a bit. The group bounds were an earlier attempt to get things working.
>
> > On 05/18/12 23:21, david_aiken-/E1597aS9LQAvxtiuMwx3w@public.gmane.org wrote:
> > > 1. the OpenGL window overlaps all of the wizard pages. It should only appear on the first page.
> >
> > Oh, and besides moving the creation of the window,
> > I think your Fl_Group's are oddly positioned.
> >
> > Can you say why you're using:
> >
> > Fl_Group *g = new Fl_Group(0, H-60, W, 60);
> > :
> > Fl_Group *g = new Fl_Group(0, H-60, W, 60);
> > :
> > Fl_Group *g = new Fl_Group(0, H-60, W, 60);
> >
> > ..instead of:
> >
> > Fl_Group *g = new Fl_Group(0, 0, W, H);
> > :
> > Fl_Group *g = new Fl_Group(0, 0, W, H);
> > :
> > Fl_Group *g = new Fl_Group(0, 0, W, H);
> >
> > I think if you use the latter, and the mod in my last post,
> > things will work.
> >
> > I think if you were to change the box() type for your
> > groups to FL_FLAT_BOX and set the color() to FL_RED,
> > you'd see where the groups were being positioned, and
> > why you were getting strange drawing artifacts.
> > (children should be positioned within Fl_Group,
> > and if they are positioned outside of it, they draw oddly)
> >
> > FWIW, the following works for me, and can be compiled
> > with 'fltk-config --compile -use-gl foo.cxx'.
> > Changed the casing on some of the include files
> > to get it to build on linux (which cares about case).
> >
> > I'm only resolving question #1 and #3, #2 is a separate
> > issue that is pretty well covered elsewhere on resizable()
> > behavior, eg: http://fltk.org/articles.php?L415
> >
> > ---------------------------------------------------------------------
> >
> > #include <stdlib.h>
> > #include <FL/Fl.H>
> > #include <FL/Fl_Window.H>
> > #include <FL/Fl_Gl_Window.H>
> > #include <FL/Fl_Group.H>
> > #include <FL/Fl_Wizard.H>
> > #include <FL/Fl_Button.H>
> > #include <FL/Fl_Multiline_Output.H>
> > #include <FL/gl.h>
> >
> > class MyGlWindow : public Fl_Gl_Window {
> > // FIX OPENGL VIEWPORT
> > // Do this on init or when window's size is changed
> > void FixViewport(int W,int H) {
> > glLoadIdentity();
> > glViewport(0,0,W,H);
> > glOrtho(-W,W,-H,H,-1,1);
> > }
> > // DRAW METHOD
> > void draw() {
> > if (!valid()) { valid(1); FixViewport(w(), h()); } // first time? init
> > // Clear screen to bg color
> > glClearColor(0, 0, 0, 0);
> > glClear(GL_COLOR_BUFFER_BIT);
> > // Draw 'X' in fg color
> > glColor3f(1, 1, 1);
> > glBegin(GL_LINE_STRIP); glVertex2f(w(), h()); glVertex2f(-w(),-h()); glEnd();
> > glBegin(GL_LINE_STRIP); glVertex2f(w(),-h()); glVertex2f(-w(), h()); glEnd();
> > }
> > // HANDLE WINDOW RESIZING
> > void resize(int X,int Y,int W,int H) {
> > Fl_Gl_Window::resize(X,Y,W,H);
> > FixViewport(W,H);
> > redraw();
> > }
> >
> > public:
> > // OPENGL WINDOW CONSTRUCTOR
> > MyGlWindow(int X,int Y,int W,int H,const char*L=0) : Fl_Gl_Window(X,Y,W,H,L) {
> > end();
> > }
> > };
> >
> > Fl_Wizard *G_wiz = 0;
> >
> > void back_cb(Fl_Widget*,void*) {
> > G_wiz->prev();
> > }
> >
> > void next_cb(Fl_Widget*,void*) {
> > G_wiz->next();
> > }
> >
> > void done_cb(Fl_Widget*,void*) {
> > exit(0);
> > }
> >
> >
> > class MyAppWindow : public Fl_Window {
> > MyGlWindow *mygl; // opengl window
> > public:
> > // APP WINDOW CONSTRUCTOR
> > MyAppWindow(int W,int H,const char*L=0) : Fl_Window(W,H,L) {
> > G_wiz = new Fl_Wizard(0,0,W,H);
> >
> > // Wizard: page 1
> > {
> > Fl_Group *g = new Fl_Group(0, 0, W, H);
> > Fl_Button *next = new Fl_Button(290,H-30,100,25,"Next"); next->callback(next_cb);
> > mygl = new MyGlWindow(10, 10, W-20, H-80);
> > g->end();
> > }
> > // Wizard: page 2
> > G_wiz->begin();
> > {
> > Fl_Group *g = new Fl_Group(0,0,W,H);
> > Fl_Button *next = new Fl_Button(290,H-30,100,25,"Next"); next->callback(next_cb);
> > Fl_Button *back = new Fl_Button(120,H-30,100,25,"Back"); back->callback(back_cb);
> > Fl_Multiline_Output *out = new Fl_Multiline_Output(10,30,W-20,H-80,"Terms And Conditions");
> > out->labelsize(20);
> > out->align(FL_ALIGN_TOP|FL_ALIGN_LEFT);
> > out->value("This is the Second page");
> > g->end();
> > }
> > G_wiz->end();
> > // Wizard: page 3
> > G_wiz->begin();
> > {
> > Fl_Group *g = new Fl_Group(0,0,W,H);
> > Fl_Button *done = new Fl_Button(290,H-30,100,25,"Finish"); done->callback(done_cb);
> > Fl_Button *back = new Fl_Button(120,H-30,100,25,"Back"); back->callback(back_cb);
> > Fl_Multiline_Output *out = new Fl_Multiline_Output(10,30,W-20,H-80,"Finish");
> > out->labelsize(20);
> > out->align(FL_ALIGN_TOP|FL_ALIGN_LEFT);
> > out->value("This is the Last page");
> > g->end();
> > }
> > G_wiz->end();
> > end();
> > }
> > };
> > // Simple 'wizard' using fltk's new Fl_Wizard widget
> > Fl_Window *G_win = 0;
> > int main(int argc, char **argv) {
> > int w = 500, h=300;
> > G_win = new MyAppWindow(w,h,"Example Wizard");
> > G_win->resizable(G_win);
> > G_win->end();
> > G_win->show(argc, argv);
> > return Fl::run();
> > }
> >
>
[ Direct Link to Message ] | |