diff --git a/CHANGES b/CHANGES index c5a6b9d56a6d09f223e35db700556361f3f3242b..22fab4bfa0dbe8fb39d707b696ba14549307414d 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,18 @@ CHANGES IN FLTK 1.1.0b7 does this for us. - The WIN32 event handler did not properly handle WM_SYNCPAINT messages. + - Fl_Tabs now uses the boxtype exclusively to draw + both the tabs and surrounding box, so alternate + box types actually work and the look is a little + nicer. + - Fixed the drawing of large areas with the new + plastic boxtypes. + - Updated the Visual C++ demo projects to use fluid + to generate the GUI files as needed. + - The demo program didn't load the right menu file + when compiled for debugging under WIN32. + - Added plastic box types to forms demo. + - Added mousewheel to keyboard demo. CHANGES IN FLTK 1.1.0b6 diff --git a/FL/Enumerations.H b/FL/Enumerations.H index b758201733c9c9ce9b5cbad5571232aa0261c28c..a894172349a8e546f2d42d4a1fc7f07461869f4e 100644 --- a/FL/Enumerations.H +++ b/FL/Enumerations.H @@ -1,5 +1,5 @@ // -// "$Id: Enumerations.H,v 1.18.2.14.2.14 2001/11/29 22:05:55 easysw Exp $" +// "$Id: Enumerations.H,v 1.18.2.14.2.15 2001/12/01 13:59:50 easysw Exp $" // // Enumerations for the Fast Light Tool Kit (FLTK). // @@ -372,5 +372,5 @@ enum Fl_Damage { #endif // -// End of "$Id: Enumerations.H,v 1.18.2.14.2.14 2001/11/29 22:05:55 easysw Exp $". +// End of "$Id: Enumerations.H,v 1.18.2.14.2.15 2001/12/01 13:59:50 easysw Exp $". // diff --git a/makesrcdist b/makesrcdist index 983a063252a04f2e761c0d5ebfb55af754fce5e2..fa9ea09d481c9139d6216bec15b3946641c9e4b5 100755 --- a/makesrcdist +++ b/makesrcdist @@ -40,20 +40,6 @@ rm -rf CVS */CVS */*/CVS rm -rf OpenGL config forms gl glut images packages themes rm makesrcdist -echo "Generating .cxx and .h files for fluid demos..." - -cd test -cp demo.menu demod.menu - -for file in *.fl; do - echo $file - fluid -c $file - if test $? != 0; then - echo Error executing fluid: $? - exit 1 - fi -done - cd .. echo "Making UNIX distribution..." diff --git a/src/Fl_Tabs.cxx b/src/Fl_Tabs.cxx index 6d7e12fbff3d52394550f83aae80bed158ad001b..af6ae0629bed941c1adec2706275dd5348328df2 100644 --- a/src/Fl_Tabs.cxx +++ b/src/Fl_Tabs.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Tabs.cxx,v 1.6.2.10.2.3 2001/11/25 16:38:11 easysw Exp $" +// "$Id: Fl_Tabs.cxx,v 1.6.2.10.2.4 2001/12/01 13:59:50 easysw Exp $" // // Tab widget for the Fast Light Tool Kit (FLTK). // @@ -34,14 +34,13 @@ #include <FL/Fl_Tabs.H> #include <FL/fl_draw.H> -#define BORDER 10 -#define TABSLOPE 5 -#define EXTRASPACE 5 +#define BORDER 2 +#define EXTRASPACE 10 // return the left edges of each tab (plus a fake left edge for a tab // past the right-hand one). These position are actually of the left // edge of the slope. They are either seperated by the correct distance -// or by TABSLOPE or by zero. +// or by EXTRASPACE or by zero. // Return value is the index of the selected item. int Fl_Tabs::tab_positions(int* p, int* w) { @@ -54,29 +53,28 @@ int Fl_Tabs::tab_positions(int* p, int* w) { if (o->visible()) selected = i; if (o->label()) { int wt = 0; int ht = 0; o->measure_label(wt,ht); - w[i] = wt+TABSLOPE+EXTRASPACE; - //if (2*TABSLOPE > w[i]) w[i] = 2*TABSLOPE; + w[i] = wt+EXTRASPACE; } else - w[i] = 2*TABSLOPE; - p[i+1] = p[i]+w[i]; + w[i] = EXTRASPACE; + p[i+1] = p[i]+w[i]+BORDER; } - int r = this->w()-TABSLOPE-1; + int r = this->w(); if (p[i] <= r) return selected; // uh oh, they are too big: // pack them against right edge: p[i] = r; for (i = children(); i--;) { int l = r-w[i]; - if (p[i+1]-TABSLOPE < l) l = p[i+1]-TABSLOPE; + if (p[i+1] < l) l = p[i+1]; if (p[i] <= l) break; p[i] = l; - r -= TABSLOPE; + r -= EXTRASPACE; } // pack them against left edge and truncate width if they still don't fit: for (i = 0; i<children(); i++) { - if (p[i] >= i*TABSLOPE) break; - p[i] = i*TABSLOPE; - int W = this->w()-1-TABSLOPE*(children()-i) - p[i]; + if (p[i] >= i*EXTRASPACE) break; + p[i] = i*EXTRASPACE; + int W = this->w()-1-EXTRASPACE*(children()-i) - p[i]; if (w[i] > W) w[i] = W; } // adjust edges according to visiblity: @@ -97,13 +95,8 @@ int Fl_Tabs::tab_height() { if (o->y()+o->h() > H2) H2 = o->y()+o->h(); } H2 = y()+h()-H2; - if (H2 > H) { - H = H2-Fl::box_dy(box()); - return (H <= 0) ? 0 : -H; - } else { - H = H-Fl::box_dy(box()); - return (H <= 0) ? 0 : H; - } + if (H2 > H) return (H2 <= 0) ? 0 : -H2; + else return (H <= 0) ? 0 : H; } // this is used by fluid to pick tabs: @@ -116,10 +109,9 @@ Fl_Widget *Fl_Tabs::which(int event_x, int event_y) { } if (event_x < x()) return 0; int p[128], w[128]; - int selected = tab_positions(p, w); - int d = (event_y-(H>=0?y():y()+h()))*TABSLOPE/H; + tab_positions(p, w); for (int i=0; i<children(); i++) { - if (event_x < x()+p[i+1]+(i<selected ? TABSLOPE-d : d)) return child(i); + if (event_x < x()+p[i+1]) return child(i); } return 0; } @@ -226,12 +218,11 @@ enum {LEFT, RIGHT, SELECTED}; void Fl_Tabs::draw() { Fl_Widget *v = value(); int H = tab_height(); + if (damage() & FL_DAMAGE_ALL) { // redraw the entire thing: fl_color(color()); fl_rectf(x(), y()+(H>=0?0:h()+H), w(), H>=0?H:-H); - fl_clip(x(), y()+(H>=0?H:0), w(), h()-(H>=0?H:-H)); - draw_box(box(), x(), y(), w(), h(), v ? v->color() : color()); - fl_pop_clip(); + draw_box(box(), x(), y()+(H>=0?H:0), w(), h()-(H>=0?H:-H), v ? v->color() : color()); if (v) draw_child(*v); } else { // redraw the child if (v) update_child(*v); @@ -248,60 +239,47 @@ void Fl_Tabs::draw() { if (v) { i = selected; draw_tab(x()+p[i], x()+p[i+1], w[i], H, a[i], SELECTED); - } else { - // draw the edge when no selection: - fl_color(H >= 0 ? FL_LIGHT3 : FL_DARK3); - fl_xyline(x(), H >= 0 ? y()+H : y()+h()+H, x()+this->w()); } } } void Fl_Tabs::draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int what) { - if (x2 < x1+W) { - if (what == LEFT) { - if (x1+W < x2+TABSLOPE) x2 = x1+W; - else x2 += TABSLOPE; - } else { - if (x1+W < x2+TABSLOPE) x1 = x2-W; - else x1 -= TABSLOPE; - } - } int sel = (what == SELECTED); - fl_color(o->color()); + int dh = Fl::box_dh(box()); + int dy = Fl::box_dy(box()); + + if ((x2 < x1+W) && what == RIGHT) x1 = x2 - W; + if (H >= 0) { - fl_polygon(x1, y()+H+sel, x1+TABSLOPE, y(), x2, y(), - x2+TABSLOPE, y()+H+sel); - fl_color(!sel && o==push_ ? FL_DARK3 : FL_LIGHT3); - fl_line(x1, y()+H, x1+TABSLOPE, y(), x2, y()); - if (sel) { - if (x1>x()) fl_xyline(x(), y()+H, x1); - if (x2+TABSLOPE < x()+w()-1) fl_xyline(x2+TABSLOPE, y()+H, x()+w()-1); - } - fl_color(!sel && o==push_ ? FL_LIGHT3 : FL_DARK3); - fl_line(x2, y(), x2+TABSLOPE, y()+H); + if (sel) fl_clip(x1, y(), x2 - x1, H + dh - dy); + else fl_clip(x1, y(), x2 - x1, H); + + H += dh; + + draw_box(box(), x1, y(), W, H, o->color()); + + o->draw_label(x1, y(), W, H, FL_ALIGN_CENTER); + + if (Fl::focus() == this && o->visible()) + draw_focus(box(), x1, y(), W, H); + + fl_pop_clip(); } else { - fl_polygon(x1, y()+h()+H-sel, x1+TABSLOPE, y()+h(), x2, y()+h(), - x2+TABSLOPE, y()+h()+H-sel); - fl_color(!sel && o==push_ ? FL_LIGHT3 : FL_DARK3); - fl_line(x1+TABSLOPE, y()+h()-1, x2, y()+h()-1, x2+TABSLOPE, y()+h()+H); - if (sel) { - if (x1>x()) fl_xyline(x(), y()+h()+H, x1); - if (x2+TABSLOPE < x()+w()-1) fl_xyline(x2+TABSLOPE, y()+h()+H,x()+w()-1); - } - fl_color(!sel && o==push_ ? FL_DARK3 : FL_LIGHT3); - fl_line(x1, y()+h()+H, x1+TABSLOPE, y()+h()-1); - } - if (W > TABSLOPE+EXTRASPACE/2) { - o->draw_label((what==LEFT ? x1 : x2-W)+(TABSLOPE+EXTRASPACE/2), - y()+(H<0?h()+H-2:0), W-(TABSLOPE+EXTRASPACE/2), - (H<0?-H:H)+3, FL_ALIGN_CENTER); + H = -H; + + if (sel) fl_clip(x1, y() + h() - H - dy, x2 - x1, H + dy); + else fl_clip(x1, y() + h() - H, x2 - x1, H); + + H += dh; + + draw_box(box(), x1, y() + h() - H, W, H, o->color()); + + o->draw_label(x1, y() + h() - H, W, H, FL_ALIGN_CENTER); if (Fl::focus() == this && o->visible()) - draw_focus(FL_FLAT_BOX, - (what==LEFT ? x1 : x2-W)+(TABSLOPE+EXTRASPACE/2), - y()+(H<0?h()+H-2:0) + 3, - W-(TABSLOPE+EXTRASPACE/2), - (H<0?-H:H)-3); + draw_focus(box(), x1, y() + h() - H, W, H); + + fl_pop_clip(); } } @@ -313,5 +291,5 @@ Fl_Tabs::Fl_Tabs(int X,int Y,int W, int H, const char *l) : } // -// End of "$Id: Fl_Tabs.cxx,v 1.6.2.10.2.3 2001/11/25 16:38:11 easysw Exp $". +// End of "$Id: Fl_Tabs.cxx,v 1.6.2.10.2.4 2001/12/01 13:59:50 easysw Exp $". // diff --git a/src/fl_plastic.cxx b/src/fl_plastic.cxx index 512337d7a76d63fc2375cfff135d9c1366888ffc..ed9eebb244cc9a26be776b28295e2a2e14df7621 100644 --- a/src/fl_plastic.cxx +++ b/src/fl_plastic.cxx @@ -1,5 +1,5 @@ // -// "$Id: fl_plastic.cxx,v 1.1.2.1 2001/11/28 21:37:35 easysw Exp $" +// "$Id: fl_plastic.cxx,v 1.1.2.2 2001/12/01 13:59:50 easysw Exp $" // // "Plastic" drawing routines for the Fast Light Tool Kit (FLTK). // @@ -119,7 +119,8 @@ static void up_frame(int x, int y, int w, int h, Fl_Color c) { static void up_box(int x, int y, int w, int h, Fl_Color c) { if (w > 30 && h > 30) { - fl_color(c); + uchar *g = fl_gray_ramp(); + fl_color(shade_color(g['W'], c)); fl_rectf(x + 2, y + 2, w - 4, h - 4); } else @@ -137,7 +138,8 @@ static void down_frame(int x, int y, int w, int h, Fl_Color c) { static void down_box(int x, int y, int w, int h, Fl_Color c) { if (w > 30 && h > 30) { - fl_color(c); + uchar *g = fl_gray_ramp(); + fl_color(shade_color(g['T'], c)); fl_rectf(x + 2, y + 2, w - 4, h - 4); } else @@ -161,5 +163,5 @@ Fl_Boxtype define_FL_PLASTIC_UP_BOX() { // -// End of "$Id: fl_plastic.cxx,v 1.1.2.1 2001/11/28 21:37:35 easysw Exp $". +// End of "$Id: fl_plastic.cxx,v 1.1.2.2 2001/12/01 13:59:50 easysw Exp $". //