mousewheel support on all platforms (X11,Darwin,Win32,Java14) and in the core (bug...
[org.ibex.core.git] / src / org / ibex / Box.java
index 1b10383..6bd6ddf 100644 (file)
@@ -166,6 +166,7 @@ public final class Box extends JSScope implements Scheduler.Task {
 
     // Instance Methods /////////////////////////////////////////////////////////////////////
 
+    public int fontSize() { return (font == null ? DEFAULT_FONT : font).pointsize; }
 
     /** invoked when a resource needed to render ourselves finishes loading */
     public void perform() throws JSExn {
@@ -566,6 +567,11 @@ public final class Box extends JSScope implements Scheduler.Task {
         case "Enter":         if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
         case "Leave":         if (!test(STOP_UPWARD_PROPAGATION) && parent != null) parent.putAndTriggerTraps(name, value);
 
+        case "HScroll":       if (!test(STOP_UPWARD_PROPAGATION) && parent != null)
+            parent.putAndTriggerTraps(name, N(((Number)value).floatValue() * ((float)parent.fontSize()) / ((float)fontSize())));
+        case "VScroll":       if (!test(STOP_UPWARD_PROPAGATION) && parent != null)
+            parent.putAndTriggerTraps(name, N(((Number)value).floatValue() * ((float)parent.fontSize()) / ((float)fontSize())));
+
         case "_Move":         propagateDownward(name, value, false);
         case "_Press1":       propagateDownward(name, value, false);
         case "_Press2":       propagateDownward(name, value, false);
@@ -581,6 +587,8 @@ public final class Box extends JSScope implements Scheduler.Task {
         case "_DoubleClick3": propagateDownward(name, value, false);
         case "_KeyPressed":   propagateDownward(name, value, false);
         case "_KeyReleased":  propagateDownward(name, value, false);
+        case "_HScroll":      propagateDownward(name, value, false);
+        case "_VScroll":      propagateDownward(name, value, false);
 
         case "PosChange":     return;
         case "SizeChange":    return;
@@ -681,13 +689,16 @@ public final class Box extends JSScope implements Scheduler.Task {
         if (wasinside || isinside)
             for(Box child = getChild(treeSize() - 1); child != null; child = child.prevSibling()) {
                 boolean save_stop = child.test(STOP_UPWARD_PROPAGATION);
+                Object value2 = value;
+                if (name.equals("_HScroll") || name.equals("_VScroll"))
+                    value2 = N(((Number)value).floatValue() * ((float)child.fontSize()) / (float)fontSize());
                 if (obscured || !child.inside(x - child.x, y - child.y)) {
-                    child.propagateDownward(name, value, true);
+                    child.propagateDownward(name, value2, true);
                 } else try {
                     found = true;
                     child.clear(STOP_UPWARD_PROPAGATION);
-                    if (name != null) child.putAndTriggerTrapsAndCatchExceptions(name, value);
-                    else child.propagateDownward(name, value, obscured);
+                    if (name != null) child.putAndTriggerTrapsAndCatchExceptions(name, value2);
+                    else child.propagateDownward(name, value2, obscured);
                 } finally {
                     if (save_stop) child.set(STOP_UPWARD_PROPAGATION); else child.clear(STOP_UPWARD_PROPAGATION);
                 }