summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Spitzak <spitzak@gmail.com>1999-03-09 07:26:28 +0000
committerBill Spitzak <spitzak@gmail.com>1999-03-09 07:26:28 +0000
commit92ff32aa80dbccb9468bf96b5b0ccf5580805d64 (patch)
tree7501b58cadc966b224c666a85784f225ae087b5c
parent95e27d43f117a9cdc8a6dace63c689d0017321e6 (diff)
Fixes to Fl_Dial so it stops moving when you drag to ends of region.
git-svn-id: file:///fltk/svn/fltk/trunk@379 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--src/Fl_Dial.cxx16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/Fl_Dial.cxx b/src/Fl_Dial.cxx
index f8a1744f9..8dfc7a8c9 100644
--- a/src/Fl_Dial.cxx
+++ b/src/Fl_Dial.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Dial.cxx,v 1.8 1999/03/08 21:44:30 carl Exp $"
+// "$Id: Fl_Dial.cxx,v 1.9 1999/03/09 07:26:28 bill Exp $"
//
// Circular dial widget for the Fast Light Tool Kit (FLTK).
//
@@ -104,6 +104,7 @@ int Fl_Dial::handle(int event, int x, int y, int w, int h) {
case FL_PUSH:
handle_push();
case FL_DRAG: {
+ double oldangle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1;
double angle;
static double last = 0.0;
double val = value();
@@ -112,11 +113,12 @@ int Fl_Dial::handle(int event, int x, int y, int w, int h) {
if (!mx && !my) return 1;
angle = atan2((float)-my, (float)-mx) + M_PI;
angle = (angle*360) / (2*M_PI) + 90;
- if (angle >= 360.0) angle -= 360.0;
- if (a2 >= 360 && angle <= (a2-360)) angle += 360;
- if (angle < a1 || angle > a2) {
- if ((last - a1) < (a2 - last)) val = minimum();
- else val = maximum();
+ while (angle < oldangle-180) angle += 360;
+ while (angle > oldangle+180) angle -= 360;
+ if (angle <= a1) {
+ val = minimum();
+ } else if (angle >= a2) {
+ val = maximum();
} else {
val = minimum() + (maximum()-minimum())*(angle-a1)/(a2-a1);
last = angle;
@@ -143,5 +145,5 @@ Fl_Dial::Fl_Dial(int x, int y, int w, int h, const char* l)
}
//
-// End of "$Id: Fl_Dial.cxx,v 1.8 1999/03/08 21:44:30 carl Exp $".
+// End of "$Id: Fl_Dial.cxx,v 1.9 1999/03/09 07:26:28 bill Exp $".
//