On Tue, Apr 3, 2012 at 10:50 AM, Greg Ercolano <[email protected]> wrote: > There might be a way to do it with a combo of group resizables, but > I'd take the route of doing custom resize() calculations myself.. > see the MyThreeGroups::resize() method below: > > #include <FL/Fl.H> > #include <FL/Fl_Window.H> > #include <FL/Fl_Group.H> > #include <FL/Fl_Button.H> > #include <FL/Fl_Box.H> > // > // Demonstrate 3 groups with custom sizing - erco 04/03/12 > // > // 3 horiz groups in a window. > // -top group resizes both horiz and vert > // -middle group resizes only horiz > // -bottom group resizes both horiz and vert > // So the top and bottom will always be the same size. > // Middle group height remains constant. > // > void MakeFourButtons(int X,int Y,int W,int H) { > new Fl_Button(X+20, Y+20, 100,25,"A"); > new Fl_Button(X+W-20-100,Y+20, 100,25,"B"); > new Fl_Button(X+20, Y+H-20-25,100,25,"C"); > new Fl_Button(X+W-20-100,Y+H-20-25,100,25,"D"); > } > class MyThreeGroups : public Fl_Group { > Fl_Group *top; > Fl_Group *mid; > Fl_Group *bot; > public: > MyThreeGroups(int X,int Y,int W,int H) : Fl_Group(X,Y,W,H) { > Fl_Align center = FL_ALIGN_CENTER|FL_ALIGN_INSIDE; > top = new Fl_Group(0, 0,300,150,"Top"); top->align(center); > top->box(FL_FLAT_BOX); top->color(45); top->begin(); > MakeFourButtons(top->x(), top->y(), top->w(), top->h()); > top->end(); > mid = new Fl_Group(0,150,300,150,"Mid"); mid->align(center); > mid->box(FL_FLAT_BOX); mid->color(47); mid->begin(); > MakeFourButtons(mid->x(), mid->y(), mid->w(), mid->h()); > mid->end(); > bot = new Fl_Group(0,300,300,150,"Bot"); bot->align(center); > bot->box(FL_FLAT_BOX); bot->color(49); bot->begin(); > MakeFourButtons(bot->x(), bot->y(), bot->w(), bot->h()); > bot->end(); > } > // CUSTOM RESIZE CODE FOR TOP/MID/BOT SIZING > void resize(int X,int Y,int W,int H) { > // Calculate height of top+bottom groups > int tbh = (H-mid->h())/2; > // Calculate y positions for top/mid/bot > int top_y = Y; > int mid_y = Y+tbh; > int bot_y = mid_y+mid->h(); > // Apply new sizes > top->resize(X,top_y,W,tbh); > mid->resize(X,mid_y,W,mid->h()); > bot->resize(X,bot_y,W,tbh); > // Children were repositioned > init_sizes(); > } > }; > int main() { > Fl_Window win(300,450); > win.begin(); > MyThreeGroups grp(0,0,300,450); > win.end(); > win.resizable(grp); > win.show(); > return(Fl::run()); > }
Thank you Greg for the speedy solution. I figured it must require a more in depth solution than simply playing around with the group placements. Sometimes I can achieve what I want by creating invisible groups. Didn't help in this case. Thanks for the code example, very helpful. If you ever visit Vancouver Canada I'll buy you a Cappuccino. Cheers -- Robert Arkiletian Eric Hamber Secondary, Vancouver, Canada _______________________________________________ fltk mailing list [email protected] http://lists.easysw.com/mailman/listinfo/fltk

