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