diff options
Diffstat (limited to 'src/Fl_Scrollbar.cxx')
| -rw-r--r-- | src/Fl_Scrollbar.cxx | 83 |
1 files changed, 39 insertions, 44 deletions
diff --git a/src/Fl_Scrollbar.cxx b/src/Fl_Scrollbar.cxx index 64071dbe2..d8d42ce80 100644 --- a/src/Fl_Scrollbar.cxx +++ b/src/Fl_Scrollbar.cxx @@ -1,7 +1,7 @@ // // Scroll bar widget for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2015 by Bill Spitzak and others. +// Copyright 1998-2022 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -196,61 +196,56 @@ int Fl_Scrollbar::handle(int event) { } void Fl_Scrollbar::draw() { - if (damage()&FL_DAMAGE_ALL) draw_box(); - int X = x()+Fl::box_dx(box()); - int Y = y()+Fl::box_dy(box()); - int W = w()-Fl::box_dw(box()); - int H = h()-Fl::box_dh(box()); + if (damage() & FL_DAMAGE_ALL) draw_box(); + int X = x() + Fl::box_dx(box()); + int Y = y() + Fl::box_dy(box()); + int W = w() - Fl::box_dw(box()); + int H = h() - Fl::box_dh(box()); + Fl_Rect ab; // arrow box + + int inset = 3; + if (W < 8 || H < 8) + inset = 2; + if (horizontal()) { - if (W < 3*H) {Fl_Slider::draw(X,Y,W,H); return;} - Fl_Slider::draw(X+H,Y,W-2*H,H); + if (W < 3*H) { + Fl_Slider::draw(X, Y, W, H); + return; + } + Fl_Slider::draw(X+H, Y, W-2*H, H); if (damage()&FL_DAMAGE_ALL) { draw_box((pushed_==1) ? fl_down(slider()) : slider(), X, Y, H, H, selection_color()); draw_box((pushed_==2) ? fl_down(slider()) : slider(), X+W-H, Y, H, H, selection_color()); - if (active_r()) - fl_color(labelcolor()); - else - fl_color(fl_inactive(labelcolor())); - int w1 = (H-4)/3; if (w1 < 1) w1 = 1; - int x1 = X+(H-w1-1)/2; - int yy1 = Y+(H-2*w1-1)/2; - if (Fl::is_scheme("gtk+")) { - fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1-1, yy1+w1, x1+w1, yy1); - x1 += (W-H); - fl_polygon(x1, yy1, x1+1, yy1+w1, x1, yy1+2*w1, x1+w1, yy1+w1); - } else { - fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1, yy1); - x1 += (W-H); - fl_polygon(x1, yy1, x1, yy1+2*w1, x1+w1, yy1+w1); - } + + Fl_Color arrowcolor = active_r() ? labelcolor() : fl_inactive(labelcolor()); + ab = Fl_Rect(X, Y, H, H); + ab.inset(inset); + fl_draw_arrow(ab, FL_ARROW_SINGLE, FL_ORIENT_LEFT, arrowcolor); // left arrow + ab = Fl_Rect(X+W-H, Y, H, H); + ab.inset(inset); + fl_draw_arrow(ab, FL_ARROW_SINGLE, FL_ORIENT_RIGHT, arrowcolor); // right arrow } } else { // vertical - if (H < 3*W) {Fl_Slider::draw(X,Y,W,H); return;} - Fl_Slider::draw(X,Y+W,W,H-2*W); - if (damage()&FL_DAMAGE_ALL) { + if (H < 3*W) { + Fl_Slider::draw(X, Y, W, H); + return; + } + Fl_Slider::draw(X, Y+W, W, H-2*W); + if (damage() & FL_DAMAGE_ALL) { draw_box((pushed_==1) ? fl_down(slider()) : slider(), X, Y, W, W, selection_color()); draw_box((pushed_==2) ? fl_down(slider()) : slider(), X, Y+H-W, W, W, selection_color()); - if (active_r()) - fl_color(labelcolor()); - else - fl_color(fl_inactive(labelcolor())); - int w1 = (W-4)/3; if (w1 < 1) w1 = 1; - int x1 = X+(W-2*w1-1)/2; - int yy1 = Y+(W-w1-1)/2; - if (Fl::is_scheme("gtk+")) { - fl_polygon(x1, yy1+w1, x1+w1, yy1+w1-1, x1+2*w1, yy1+w1, x1+w1, yy1); - yy1 += H-W; - fl_polygon(x1, yy1, x1+w1, yy1+1, x1+w1, yy1+w1); - fl_polygon(x1+w1, yy1+1, x1+2*w1, yy1, x1+w1, yy1+w1); - } else { - fl_polygon(x1, yy1+w1, x1+2*w1, yy1+w1, x1+w1, yy1); - yy1 += H-W; - fl_polygon(x1, yy1, x1+w1, yy1+w1, x1+2*w1, yy1); - } + + Fl_Color arrowcolor = active_r() ? labelcolor() : fl_inactive(labelcolor()); + ab = Fl_Rect(X, Y, W, W); + ab.inset(inset); + fl_draw_arrow(ab, FL_ARROW_SINGLE, FL_ORIENT_UP, arrowcolor); // up arrow + ab = Fl_Rect(X, Y+H-W, W, W); + ab.inset(inset); + fl_draw_arrow(ab, FL_ARROW_SINGLE, FL_ORIENT_DOWN, arrowcolor); // down arrow } } } |
