FLTK logo

Re: OpenGL window in Fl_Wizard

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.opengl  ]
 
Previous Message ]New Message | Reply ]Next Message ]

Re: OpenGL window in Fl_Wizard David Aiken May 20, 2012  
 
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 ]
 
     
Previous Message ]New Message | Reply ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.