Author: matt
Date: 2010-02-26 12:44:35 -0800 (Fri, 26 Feb 2010)
New Revision: 7161
Log:
Fixed Scrollbar events when max is less than min (STR #2283)

Modified:
   branches/branch-1.3/CHANGES
   branches/branch-1.3/src/Fl_Scrollbar.cxx

Modified: branches/branch-1.3/CHANGES
===================================================================
--- branches/branch-1.3/CHANGES 2010-02-26 18:18:29 UTC (rev 7160)
+++ branches/branch-1.3/CHANGES 2010-02-26 20:44:35 UTC (rev 7161)
@@ -1,5 +1,6 @@
 CHANGES IN FLTK 1.3.0
 
+       - Fixed Scrollbar events when max is less than min (STR #2283)
        - Added argument-less constructor in Fuid Widget Class
        - Fixed menu item counting issue in Fluid (STR #2322)
        - Added Fl_Menu_::find_item by callback

Modified: branches/branch-1.3/src/Fl_Scrollbar.cxx
===================================================================
--- branches/branch-1.3/src/Fl_Scrollbar.cxx    2010-02-26 18:18:29 UTC (rev 
7160)
+++ branches/branch-1.3/src/Fl_Scrollbar.cxx    2010-02-26 20:44:35 UTC (rev 
7161)
@@ -36,23 +36,32 @@
 #define REPEAT .05
 
 void Fl_Scrollbar::increment_cb() {
-  int ls = maximum()>=minimum() ? linesize_ : -linesize_;
+  char inv = maximum()<minimum();
+  int ls = inv ? -linesize_ : linesize_;
   int i;
   switch (pushed_) {
-  case 1:
-    i = -ls;
-    break;
-  default:
-    i =  ls;
-    break;
-  case 5:
-    i = -int((maximum()-minimum())*slider_size()/(1.0-slider_size())) + ls;
-    if (i > -ls) i = -ls;
-    break;
-  case 6:
-    i =  int((maximum()-minimum())*slider_size()/(1.0-slider_size())) - ls;
-    if (i < ls) i = ls;
-    break;
+    case 1: // clicked on arrow left
+      i = -ls;
+      break;
+    default: // clicked on arrow right
+      i =  ls;
+      break;
+    case 5: // clicked into the box next to the slider on the left
+      i = -(int((maximum()-minimum())*slider_size()/(1.0-slider_size())));
+      if (inv) {
+        if (i<-ls) i = -ls;
+      } else {
+        if (i>-ls) i = -ls; // err
+      }
+      break;
+    case 6: // clicked into the box next to the slider on the right
+      i = (int((maximum()-minimum())*slider_size()/(1.0-slider_size())));
+      if (inv) {
+        if (i>ls) i = ls;
+      } else {
+        if (i<ls) i = ls; // err
+      }
+      break;
   }
   handle_drag(clamp(value() + i));
 }
@@ -133,11 +142,13 @@
   case FL_MOUSEWHEEL :
     if (horizontal()) {
       if (Fl::e_dx==0) return 0;
-      handle_drag(clamp(value() + linesize_ * Fl::e_dx));
+      int ls = maximum()>=minimum() ? linesize_ : -linesize_;
+      handle_drag(clamp(value() + ls * Fl::e_dx));
       return 1;
     } else {
       if (Fl::e_dy==0) return 0;
-      handle_drag(clamp(value() + linesize_ * Fl::e_dy));
+      int ls = maximum()>=minimum() ? linesize_ : -linesize_;
+      handle_drag(clamp(value() + ls * Fl::e_dy));
       return 1;
     }
   case FL_SHORTCUT:

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to