|
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 ] | |