diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2001-08-05 14:00:15 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2001-08-05 14:00:15 +0000 |
| commit | 51050b38d82ca53bb71c85d2031f9777e6dd373e (patch) | |
| tree | e7e8958a5b433cd8b84e7e312d421ce8c6a84400 /src/Fl_Adjuster.cxx | |
| parent | 03f49329ff670c072aaddabf8f1beaf4f69e5bd9 (diff) | |
Keyboard nav for valuators.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1555 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Adjuster.cxx')
| -rw-r--r-- | src/Fl_Adjuster.cxx | 114 |
1 files changed, 71 insertions, 43 deletions
diff --git a/src/Fl_Adjuster.cxx b/src/Fl_Adjuster.cxx index dc8a39b50..b591ed0c3 100644 --- a/src/Fl_Adjuster.cxx +++ b/src/Fl_Adjuster.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Adjuster.cxx,v 1.5.2.3 2001/01/22 15:13:39 easysw Exp $" +// "$Id: Fl_Adjuster.cxx,v 1.5.2.3.2.1 2001/08/05 14:00:15 easysw Exp $" // // Adjuster widget for the Fast Light Tool Kit (FLTK). // @@ -61,6 +61,7 @@ void Fl_Adjuster::draw() { y()+dy+(H-mediumarrow_height)/2, W, H); slowarrow.draw(x()+2*dx+(W-slowarrow_width)/2, y()+(H-slowarrow_width)/2, W, H); + if (Fl::focus() == this) draw_focus(); } int Fl_Adjuster::handle(int event) { @@ -68,54 +69,81 @@ int Fl_Adjuster::handle(int event) { int delta; int mx = Fl::event_x(); switch (event) { - case FL_PUSH: - ix = mx; - if (w()>=h()) - drag = 3*(mx-x())/w() + 1; - else - drag = 3-3*(Fl::event_y()-y()-1)/h(); - handle_push(); - redraw(); - return 1; - case FL_DRAG: - if (w() >= h()) { - delta = x()+(drag-1)*w()/3; // left edge of button - if (mx < delta) - delta = mx-delta; - else if (mx > (delta+w()/3)) // right edge of button - delta = mx-delta-w()/3; + case FL_PUSH: + take_focus(); + ix = mx; + if (w()>=h()) + drag = 3*(mx-x())/w() + 1; else - delta = 0; - } else { - if (mx < x()) - delta = mx-x(); - else if (mx > (x()+w())) - delta = mx-x()-w(); - else - delta = 0; - } - switch (drag) { - case 3: v = increment(previous_value(), delta); break; - case 2: v = increment(previous_value(), delta*10); break; - default:v = increment(previous_value(), delta*100); break; - } - handle_drag(soft() ? softclamp(v) : clamp(v)); - return 1; - case FL_RELEASE: - if (Fl::event_is_click()) { // detect click but no drag - if (Fl::event_state()&0xF0000) delta = -10; - else delta = 10; + drag = 3-3*(Fl::event_y()-y()-1)/h(); + handle_push(); + redraw(); + return 1; + case FL_DRAG: + if (w() >= h()) { + delta = x()+(drag-1)*w()/3; // left edge of button + if (mx < delta) + delta = mx-delta; + else if (mx > (delta+w()/3)) // right edge of button + delta = mx-delta-w()/3; + else + delta = 0; + } else { + if (mx < x()) + delta = mx-x(); + else if (mx > (x()+w())) + delta = mx-x()-w(); + else + delta = 0; + } switch (drag) { case 3: v = increment(previous_value(), delta); break; case 2: v = increment(previous_value(), delta*10); break; default:v = increment(previous_value(), delta*100); break; } handle_drag(soft() ? softclamp(v) : clamp(v)); - } - drag = 0; - redraw(); - handle_release(); - return 1; + return 1; + case FL_RELEASE: + if (Fl::event_is_click()) { // detect click but no drag + if (Fl::event_state()&0xF0000) delta = -10; + else delta = 10; + switch (drag) { + case 3: v = increment(previous_value(), delta); break; + case 2: v = increment(previous_value(), delta*10); break; + default:v = increment(previous_value(), delta*100); break; + } + handle_drag(soft() ? softclamp(v) : clamp(v)); + } + drag = 0; + redraw(); + handle_release(); + return 1; + case FL_KEYBOARD : + switch (Fl::event_key()) { + case FL_Up: + if (w() > h()) return 0; + handle_drag(clamp(increment(value(),-1))); + return 1; + case FL_Down: + if (w() > h()) return 0; + handle_drag(clamp(increment(value(),1))); + return 1; + case FL_Left: + if (w() < h()) return 0; + handle_drag(clamp(increment(value(),-1))); + return 1; + case FL_Right: + if (w() < h()) return 0; + handle_drag(clamp(increment(value(),1))); + return 1; + default: + return 0; + } + break; + case FL_FOCUS: + case FL_UNFOCUS: + redraw(); + return 1; } return 0; } @@ -130,5 +158,5 @@ Fl_Adjuster::Fl_Adjuster(int x, int y, int w, int h, const char* l) } // -// End of "$Id: Fl_Adjuster.cxx,v 1.5.2.3 2001/01/22 15:13:39 easysw Exp $". +// End of "$Id: Fl_Adjuster.cxx,v 1.5.2.3.2.1 2001/08/05 14:00:15 easysw Exp $". // |
