forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package kha.input;
 | |
| 
 | |
| /** See `Surface.setTouchDownEventBlockBehavior` */
 | |
| enum TouchDownEventBlockBehavior {
 | |
| 	Full;
 | |
| 	None;
 | |
| 	Custom(func: (event: Dynamic) -> Bool);
 | |
| }
 | |
| 
 | |
| @:allow(kha.SystemImpl)
 | |
| @:expose
 | |
| class Surface {
 | |
| 	static var touchDownEventBlockBehavior = TouchDownEventBlockBehavior.Full;
 | |
| 
 | |
| 	/**
 | |
| 	 * Get current Surface.
 | |
| 	 * @param num (optional) surface id (0 by default).
 | |
| 	 */
 | |
| 	public static function get(num: Int = 0): Surface {
 | |
| 		if (num != 0)
 | |
| 			return null;
 | |
| 		return instance;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Allows fine grained control of touch down browser default actions (html5 only).
 | |
| 	 * @param behavior can be:
 | |
| 	 *   Full - block touch down events.
 | |
| 	 *   None - do not block touch down events.
 | |
| 	 *   Custom(func:(event:TouchEvent)->Bool) - set custom handler for touch down event (should return true if touch down event blocked).
 | |
| 	 */
 | |
| 	public static function setTouchDownEventBlockBehavior(behavior: TouchDownEventBlockBehavior): Void {
 | |
| 		touchDownEventBlockBehavior = behavior;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Creates event handlers from passed functions.
 | |
| 	 * @param touchStartListener (optional) function with `id:Int`,`x:Int`,`y:Int` arguments, fired when a surface is pressed down. The finger `id` goes from 0 increasing by one. When the finger releases the screen, the old `id` is freed up and will be occupied with pressing the next finger (when releasing a finger, the shift of ids does not occur).
 | |
| 	 * @param touchEndListener (optional) function with `id:Int`,`x:Int`,`y:Int` arguments, fired when a surface is released.
 | |
| 	 * @param moveListener (optional) function with `id:Int`,`x:Int`,`y:Int` arguments, fired when a surface is moved.
 | |
| 	 */
 | |
| 	public function notify(?touchStartListener: (id: Int, x: Int, y: Int) -> Void, ?touchEndListener: (id: Int, x: Int, y: Int) -> Void,
 | |
| 			?moveListener: (id: Int, x: Int, y: Int) -> Void): Void {
 | |
| 		if (touchStartListener != null)
 | |
| 			touchStartListeners.push(touchStartListener);
 | |
| 		if (touchEndListener != null)
 | |
| 			touchEndListeners.push(touchEndListener);
 | |
| 		if (moveListener != null)
 | |
| 			moveListeners.push(moveListener);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Removes event handlers from the passed functions that were passed to `notify` function.
 | |
| 	 */
 | |
| 	public function remove(?touchStartListener: (id: Int, x: Int, y: Int) -> Void, ?touchEndListener: (id: Int, x: Int, y: Int) -> Void,
 | |
| 			?moveListener: (id: Int, x: Int, y: Int) -> Void): Void {
 | |
| 		if (touchStartListener != null)
 | |
| 			touchStartListeners.remove(touchStartListener);
 | |
| 		if (touchEndListener != null)
 | |
| 			touchEndListeners.remove(touchEndListener);
 | |
| 		if (moveListener != null)
 | |
| 			moveListeners.remove(moveListener);
 | |
| 	}
 | |
| 
 | |
| 	static var instance: Surface;
 | |
| 
 | |
| 	var touchStartListeners: Array<Int->Int->Int->Void>;
 | |
| 	var touchEndListeners: Array<Int->Int->Int->Void>;
 | |
| 	var moveListeners: Array<Int->Int->Int->Void>;
 | |
| 
 | |
| 	function new() {
 | |
| 		touchStartListeners = new Array<Int->Int->Int->Void>();
 | |
| 		touchEndListeners = new Array<Int->Int->Int->Void>();
 | |
| 		moveListeners = new Array<Int->Int->Int->Void>();
 | |
| 		instance = this;
 | |
| 	}
 | |
| 
 | |
| 	function sendTouchStartEvent(index: Int, x: Int, y: Int): Void {
 | |
| 		for (listener in touchStartListeners) {
 | |
| 			listener(index, x, y);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	function sendTouchEndEvent(index: Int, x: Int, y: Int): Void {
 | |
| 		for (listener in touchEndListeners) {
 | |
| 			listener(index, x, y);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	function sendMoveEvent(index: Int, x: Int, y: Int): Void {
 | |
| 		for (listener in moveListeners) {
 | |
| 			listener(index, x, y);
 | |
| 		}
 | |
| 	}
 | |
| }
 |