summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti <silenio>2008-06-13 19:31:43 +0000
committerSilenio Quarti <silenio>2008-06-13 19:31:43 +0000
commit0479445ea161c359597bce014f4edffc387571e2 (patch)
tree5daad440fb2b208e1d264831d9bf554bdf09e0cc
parent932d450a4f72f04fe01a716839f938ce69cfa9f7 (diff)
downloadeclipse.platform.swt-0479445ea161c359597bce014f4edffc387571e2.tar.gz
eclipse.platform.swt-0479445ea161c359597bce014f4edffc387571e2.tar.xz
eclipse.platform.swt-0479445ea161c359597bce014f4edffc387571e2.zip
230120 - Mouse scrolling support in Cocoa applications (SWT.MouseWheel implemented)
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java46
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java42
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java6
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java14
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java8
5 files changed, 85 insertions, 31 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java
index 85a5743278..5e255e36b8 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java
@@ -683,6 +683,16 @@ Point minimumSize (int wHint, int Hint, boolean changed) {
return new Point (width, height);
}
+void pageDown(int id, int sel, int sender) {
+ if ((state & CANVAS) != 0) return;
+ super.pageDown(id, sel, sender);
+}
+
+void pageUp(int id, int sel, int sender) {
+ if ((state & CANVAS) != 0) return;
+ super.pageUp(id, sel, sender);
+}
+
void releaseChildren (boolean destroy) {
Control [] children = _getChildren ();
for (int i=0; i<children.length; i++) {
@@ -712,6 +722,42 @@ void resized () {
}
}
+void scrollWheel (int id, int sel, int theEvent) {
+ if ((state & CANVAS) != 0) {
+ NSEvent nsEvent = new NSEvent(theEvent);
+ float delta = nsEvent.deltaY();
+ if (delta != 0) {
+ if (hooks (SWT.MouseWheel) || filters (SWT.MouseWheel)) {
+ if (!sendMouseEvent(nsEvent, SWT.MouseWheel, true)) {
+ return;
+ }
+ }
+ }
+ boolean handled = false;
+ ScrollBar bar = verticalBar;
+ if (delta != 0 && bar != null && bar.getEnabled ()) {
+ int selection = Math.max (0, (int)(0.5f + bar.getSelection () - bar.getIncrement () * delta));
+ bar.setSelection (selection);
+ Event event = new Event ();
+ event.detail = delta > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;
+ bar.sendEvent (SWT.Selection, event);
+ handled = true;
+ }
+ bar = horizontalBar;
+ delta = nsEvent.deltaX ();
+ if (delta != 0 && bar != null && bar.getEnabled ()) {
+ int selection = Math.max (0, (int)(0.5f + bar.getSelection () - bar.getIncrement () * delta));
+ bar.setSelection (selection);
+ Event event = new Event ();
+ event.detail = delta > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;
+ bar.sendEvent (SWT.Selection, event);
+ handled = true;
+ }
+ if (!handled) view.superview().scrollWheel(nsEvent);
+ return;
+ }
+ super.scrollWheel (id, sel, theEvent);
+}
/**
* Sets the background drawing mode to the argument which should
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
index 36ad059312..b421598c69 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
@@ -1523,6 +1523,18 @@ Decorations menuShell () {
return parent.menuShell ();
}
+void scrollWheel (int id, int sel, int theEvent) {
+ if (hooks (SWT.MouseWheel) || filters (SWT.MouseWheel)) {
+ NSEvent nsEvent = new NSEvent(theEvent);
+ if (nsEvent.deltaY() != 0) {
+ if (!sendMouseEvent(nsEvent, SWT.MouseWheel, true)) {
+ return;
+ }
+ }
+ }
+ super.scrollWheel(id, sel, theEvent);
+}
+
boolean setInputState (Event event, NSEvent nsEvent, int type) {
if (nsEvent == null) return true;
int modifierFlags = nsEvent.modifierFlags();
@@ -2246,27 +2258,27 @@ void sendFocusEvent (int type, boolean post) {
}
boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
- int button = 0;
+ Event event = new Event ();
switch (type) {
case SWT.MouseDown:
case SWT.MouseUp:
case SWT.MouseDoubleClick:
- button = nsEvent.buttonNumber();
+ int button = nsEvent.buttonNumber();
switch (button) {
- case 0: button = 1; break;
- case 1: button = 3; break;
- case 2: button = 2; break;
- case 3: button = 4; break;
- case 4: button = 5; break;
+ case 0: event.button = 1; break;
+ case 1: event.button = 3; break;
+ case 2: event.button = 2; break;
+ case 3: event.button = 4; break;
+ case 4: event.button = 5; break;
}
break;
+ case SWT.MouseWheel:
+ event.detail = SWT.SCROLL_LINE;
+ float delta = nsEvent.deltaY();
+ event.count = delta > 0 ? Math.max (1, (int)delta) : Math.min (-1, (int)delta);
+ break;
}
- Event event = new Event ();
- event.button = button;
-// event.detail = detail;
- if (button != 0) {
- event.count = nsEvent.clickCount();
- }
+ if (event.button != 0) event.count = nsEvent.clickCount();
NSPoint windowPoint = view.window().convertScreenToBase(NSEvent.mouseLocation());
NSPoint point = view.convertPoint_fromView_(windowPoint, null);
event.x = (int) point.x;
@@ -2281,10 +2293,6 @@ boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
return event.doit;
}
-boolean sendMouseWheel (short wheelAxis, int wheelDelta) {
- return false;
-}
-
void setBackground () {
// redrawWidget (handle, false);
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
index 82ebaa29fe..eece063376 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
@@ -1677,6 +1677,8 @@ void initClasses () {
OS.class_addIvar(cls, SWT_OBJECT, OS.PTR_SIZEOF, (byte)(Math.log(OS.PTR_SIZEOF) / Math.log(2)), "i");
OS.class_addMethod(cls, OS.sel_sendVerticalSelection, proc2, "@:");
OS.class_addMethod(cls, OS.sel_sendHorizontalSelection, proc2, "@:");
+ OS.class_addMethod(cls, OS.sel_pageDown_1, proc3, "@:@");
+ OS.class_addMethod(cls, OS.sel_pageUp_1, proc3, "@:@");
addEventMethods(cls, proc2, proc3);
addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
OS.objc_registerClassPair(cls);
@@ -3420,6 +3422,10 @@ int windowDelegateProc(int id, int sel, int arg0) {
widget.helpRequested(arg0);
} else if (sel == OS.sel_scrollWheel_1) {
widget.scrollWheel(id, sel, arg0);
+ } else if (sel == OS.sel_pageDown_1) {
+ widget.pageDown(id, sel, arg0);
+ } else if (sel == OS.sel_pageUp_1) {
+ widget.pageUp(id, sel, arg0);
}
return 0;
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java
index 620ed9339b..cc68da4cc2 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java
@@ -287,20 +287,6 @@ void sendHorizontalSelection () {
horizontalBar.sendSelection ();
}
-boolean sendMouseWheel (short wheelAxis, int wheelDelta) {
-// if ((state & CANVAS) != 0) {
-// ScrollBar bar = wheelAxis == OS.kEventMouseWheelAxisX ? horizontalBar : verticalBar;
-// if (bar != null && bar.getEnabled ()) {
-// bar.setSelection (Math.max (0, bar.getSelection () - bar.getIncrement () * wheelDelta));
-// Event event = new Event ();
-// event.detail = wheelDelta > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;
-// bar.sendEvent (SWT.Selection, event);
-// return true;
-// }
-// }
- return false;
-}
-
void sendVerticalSelection () {
verticalBar.sendSelection ();
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
index 23a3272f7f..7bdc26f16a 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
@@ -749,6 +749,14 @@ public void notifyListeners (int eventType, Event event) {
sendEvent (eventType, event);
}
+void pageDown (int id, int sel, int sender) {
+ callSuper(id, sel, sender);
+}
+
+void pageUp (int id, int sel, int sender) {
+ callSuper(id, sel, sender);
+}
+
void postEvent (int eventType) {
sendEvent (eventType, null, false);
}