Skip to content

Commit db93937

Browse files
authored
Merge pull request #594 from inc0der-forks/add-scroll-mouse-button-property
add mouse button option for drag scrolling
2 parents b44e521 + 090f90b commit db93937

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

haxe/ui/constants/MouseButton.hx

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package haxe.ui.constants;
2+
3+
enum abstract MouseButton(String) from String to String {
4+
var LEFT = 'left';
5+
var MIDDLE = 'middle';
6+
var RIGHT = 'right';
7+
}

haxe/ui/containers/ScrollView.hx

+37-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package haxe.ui.containers;
22

3+
import haxe.ui.constants.MouseButton;
34
import haxe.ui.actions.ActionType;
45
import haxe.ui.behaviours.Behaviour;
56
import haxe.ui.behaviours.DataBehaviour;
@@ -49,6 +50,7 @@ class ScrollView extends InteractiveComponent implements IScroller {
4950
@:clonable @:behaviour(VScrollPageSize) public var vscrollPageSize:Float;
5051
@:clonable @:behaviour(VScrollThumbSize) public var vscrollThumbSize:Null<Float>;
5152
@:clonable @:behaviour(ThumbSize) public var thumbSize:Null<Float>;
53+
@:clonable @:behaviour(DefaultBehaviour, MouseButton.LEFT) public var scrollMouseButton:MouseButton;
5254
@:clonable @:behaviour(ScrollModeBehaviour, ScrollMode.DRAG) public var scrollMode:ScrollMode;
5355
@:clonable @:behaviour(ScrollPolicyBehaviour) public var scrollPolicy:ScrollPolicy;
5456
@:clonable @:behaviour(HScrollPolicyBehaviour) public var horizontalScrollPolicy:ScrollPolicy;
@@ -689,9 +691,13 @@ class ScrollViewEvents extends haxe.ui.events.Events {
689691
}
690692

691693
if (_scrollview.scrollMode == ScrollMode.DRAG || _scrollview.scrollMode == ScrollMode.INERTIAL) {
692-
registerEvent(MouseEvent.MOUSE_DOWN, onMouseDown);
693-
} else if (hasEvent(MouseEvent.MOUSE_DOWN, onMouseDown)) {
694-
unregisterEvent(MouseEvent.MOUSE_DOWN, onMouseDown);
694+
registerEvent(MouseEvent.MIDDLE_MOUSE_DOWN, onMiddleMouseDown);
695+
registerEvent(MouseEvent.MOUSE_DOWN, onLeftMouseDown);
696+
registerEvent(MouseEvent.RIGHT_MOUSE_DOWN, onRightMouseDown);
697+
} else if (hasEvent(MouseEvent.MOUSE_DOWN, onLeftMouseDown)) {
698+
unregisterEvent(MouseEvent.MIDDLE_MOUSE_DOWN, onMiddleMouseDown);
699+
unregisterEvent(MouseEvent.MOUSE_DOWN, onLeftMouseDown);
700+
unregisterEvent(MouseEvent.RIGHT_MOUSE_DOWN, onRightMouseDown);
695701
}
696702

697703
if (_scrollview.hasEvent(UIEvent.SHOWN) == false) {
@@ -736,7 +742,9 @@ class ScrollViewEvents extends haxe.ui.events.Events {
736742
vscroll.unregisterEvent(ScrollEvent.SCROLL, onVScrollScroll);
737743
}
738744

739-
unregisterEvent(MouseEvent.MOUSE_DOWN, onMouseDown);
745+
unregisterEvent(MouseEvent.MIDDLE_MOUSE_DOWN, onMiddleMouseDown);
746+
unregisterEvent(MouseEvent.RIGHT_MOUSE_DOWN, onRightMouseDown);
747+
unregisterEvent(MouseEvent.MOUSE_DOWN, onLeftMouseDown);
740748
unregisterEvent(MouseEvent.MOUSE_WHEEL, onMouseWheel);
741749
unregisterEvent(UIEvent.SHOWN, onShown);
742750
unregisterEvent(UIEvent.COMPONENT_ADDED, onComponentAdded);
@@ -807,6 +815,27 @@ class ScrollViewEvents extends haxe.ui.events.Events {
807815
private function onVScrollScroll(event:UIEvent) {
808816
_target.dispatch(new ScrollEvent(ScrollEvent.SCROLL));
809817
}
818+
819+
@:access(haxe.ui.core.Component)
820+
private function onLeftMouseDown(event:MouseEvent) {
821+
if (_scrollview.scrollMouseButton == MouseButton.LEFT) {
822+
onMouseDown(event);
823+
}
824+
}
825+
826+
@:access(haxe.ui.core.Component)
827+
private function onMiddleMouseDown(event:MouseEvent) {
828+
if (_scrollview.scrollMouseButton == MouseButton.MIDDLE) {
829+
onMouseDown(event);
830+
}
831+
}
832+
833+
@:access(haxe.ui.core.Component)
834+
private function onRightMouseDown(event:MouseEvent) {
835+
if (_scrollview.scrollMouseButton == MouseButton.RIGHT) {
836+
onMouseDown(event);
837+
}
838+
}
810839

811840
private var _offset:Point;
812841
private static inline var INERTIAL_TIME_CONSTANT:Int = 325;
@@ -867,6 +896,8 @@ class ScrollViewEvents extends haxe.ui.events.Events {
867896
}
868897

869898
Screen.instance.registerEvent(MouseEvent.MOUSE_MOVE, onMouseMove);
899+
Screen.instance.registerEvent(MouseEvent.MIDDLE_MOUSE_UP, onMouseUp);
900+
Screen.instance.registerEvent(MouseEvent.RIGHT_MOUSE_UP, onMouseUp);
870901
Screen.instance.registerEvent(MouseEvent.MOUSE_UP, onMouseUp);
871902
}
872903

@@ -967,6 +998,8 @@ class ScrollViewEvents extends haxe.ui.events.Events {
967998

968999
private function onMouseUp(event:MouseEvent) {
9691000
Screen.instance.unregisterEvent(MouseEvent.MOUSE_MOVE, onMouseMove);
1001+
Screen.instance.unregisterEvent(MouseEvent.MIDDLE_MOUSE_UP, onMouseUp);
1002+
Screen.instance.unregisterEvent(MouseEvent.RIGHT_MOUSE_UP, onMouseUp);
9701003
Screen.instance.unregisterEvent(MouseEvent.MOUSE_UP, onMouseUp);
9711004

9721005
if (_scrollview.scrollMode == ScrollMode.INERTIAL) {

0 commit comments

Comments
 (0)