forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			231 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			231 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package kha.input; | ||
|  | 
 | ||
|  | @:allow(kha.SystemImpl) | ||
|  | class Pen { | ||
|  | 	/** | ||
|  | 	 * Get current Pen. | ||
|  | 	 * @param num (optional) pen id (0 by default). | ||
|  | 	 */ | ||
|  | 	public static function get(num: Int = 0): Pen { | ||
|  | 		return SystemImpl.getPen(num); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Creates event handlers from passed functions. | ||
|  | 	 * @param downListener (optional) function with `x:Int`,`y:Int`,`pressure:Float` arguments, fired when a pen is pressed down. `pressure` is force of pressure on the screen in the range from `0` to `1`. | ||
|  | 	 * @param upListener (optional) function with `x:Int`,`y:Int`,`pressure:Float` arguments, fired when a pen is released. | ||
|  | 	 * @param moveListener (optional) function with `x:Int`,`y:Int`,`pressure:Float` arguments, fired when a pen is moved. | ||
|  | 	 */ | ||
|  | 	public function notify(?downListener: Int->Int->Float->Void, ?upListener: Int->Int->Float->Void, ?moveListener: Int->Int->Float->Void): Void { | ||
|  | 		notifyWindowed(0, downListener, upListener, moveListener); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Creates event handlers from passed functions specific to the pen's eraser.
 | ||
|  | 	 * @param downListener function with `x:Int`,`y:Int`,`pressure:Float` arguments, fired when an eraser is pressed down. `pressure` is force of pressure on the screen in the range from `0` to `1`. | ||
|  | 	 * @param upListener function with `x:Int`,`y:Int`,`pressure:Float` arguments, fired when an eraser is released. | ||
|  | 	 * @param moveListener function with `x:Int`,`y:Int`,`pressure:Float` arguments, fired when an eraser is moved. | ||
|  | 	 */ | ||
|  | 	public function notifyEraser(eraserDownListener: Int->Int->Float->Void, eraserUpListener: Int->Int->Float->Void, | ||
|  | 			eraserMoveListener: Int->Int->Float->Void): Void { | ||
|  | 		notifyEraserWindowed(0, eraserDownListener, eraserUpListener, eraserMoveListener); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Removes event handlers from the passed functions that were passed to `notify` function. | ||
|  | 	 */ | ||
|  | 	public function remove(?downListener: Int->Int->Float->Void, ?upListener: Int->Int->Float->Void, ?moveListener: Int->Int->Float->Void): Void { | ||
|  | 		removeWindowed(0, downListener, upListener, moveListener); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Removes event handlers from the passed functions that were passed to `notifyEraser` function. | ||
|  | 	 */ | ||
|  | 	public function removeEraser(eraserDownListener: Int->Int->Float->Void, eraserUpListener: Int->Int->Float->Void, | ||
|  | 			eraserMoveListener: Int->Int->Float->Void): Void { | ||
|  | 		removeEraserWindowed(0, eraserDownListener, eraserUpListener, eraserMoveListener); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Creates event handlers from passed functions like `notify` function, but only for window with `windowId:Int` id argument. The windows are not supported by all the targets. | ||
|  | 	 */ | ||
|  | 	public function notifyWindowed(windowId: Int, ?downListener: Int->Int->Float->Void, ?upListener: Int->Int->Float->Void, | ||
|  | 			?moveListener: Int->Int->Float->Void): Void { | ||
|  | 		if (downListener != null) { | ||
|  | 			if (windowDownListeners == null) { | ||
|  | 				windowDownListeners = []; | ||
|  | 			} | ||
|  | 			while (windowDownListeners.length <= windowId) { | ||
|  | 				windowDownListeners.push([]); | ||
|  | 			} | ||
|  | 			windowDownListeners[windowId].push(downListener); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (upListener != null) { | ||
|  | 			if (windowUpListeners == null) { | ||
|  | 				windowUpListeners = []; | ||
|  | 			} | ||
|  | 			while (windowUpListeners.length <= windowId) { | ||
|  | 				windowUpListeners.push([]); | ||
|  | 			} | ||
|  | 			windowUpListeners[windowId].push(upListener); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (moveListener != null) { | ||
|  | 			if (windowMoveListeners == null) { | ||
|  | 				windowMoveListeners = []; | ||
|  | 			} | ||
|  | 			while (windowMoveListeners.length <= windowId) { | ||
|  | 				windowMoveListeners.push([]); | ||
|  | 			} | ||
|  | 			windowMoveListeners[windowId].push(moveListener); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Creates event handlers from passed functions like `notifyEraser` function, but only for window with `windowId:Int` id argument. The windows are not supported by all the targets. | ||
|  | 	 */ | ||
|  | 	public function notifyEraserWindowed(windowId: Int, eraserDownListener: Int->Int->Float->Void, eraserUpListener: Int->Int->Float->Void, | ||
|  | 			eraserMoveListener: Int->Int->Float->Void): Void { | ||
|  | 		if (eraserDownListener != null) { | ||
|  | 			if (windowEraserDownListeners == null) { | ||
|  | 				windowEraserDownListeners = []; | ||
|  | 			} | ||
|  | 			while (windowEraserDownListeners.length <= windowId) { | ||
|  | 				windowEraserDownListeners.push([]); | ||
|  | 			} | ||
|  | 			windowEraserDownListeners[windowId].push(eraserDownListener); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (eraserUpListener != null) { | ||
|  | 			if (windowEraserUpListeners == null) { | ||
|  | 				windowEraserUpListeners = []; | ||
|  | 			} | ||
|  | 			while (windowEraserUpListeners.length <= windowId) { | ||
|  | 				windowEraserUpListeners.push([]); | ||
|  | 			} | ||
|  | 			windowEraserUpListeners[windowId].push(eraserUpListener); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (eraserMoveListener != null) { | ||
|  | 			if (windowEraserMoveListeners == null) { | ||
|  | 				windowEraserMoveListeners = []; | ||
|  | 			} | ||
|  | 			while (windowEraserMoveListeners.length <= windowId) { | ||
|  | 				windowEraserMoveListeners.push([]); | ||
|  | 			} | ||
|  | 			windowEraserMoveListeners[windowId].push(eraserMoveListener); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Removes event handlers for `windowId:Int` from the passed functions that were passed to `notifyWindowed` function. | ||
|  | 	 */ | ||
|  | 	public function removeWindowed(windowId: Int, ?downListener: Int->Int->Float->Void, ?upListener: Int->Int->Float->Void, | ||
|  | 			?moveListener: Int->Int->Float->Void): Void { | ||
|  | 		if (downListener != null && windowDownListeners != null) { | ||
|  | 			if (windowId < windowDownListeners.length) { | ||
|  | 				windowDownListeners[windowId].remove(downListener); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (upListener != null && windowUpListeners != null) { | ||
|  | 			if (windowId < windowUpListeners.length) { | ||
|  | 				windowUpListeners[windowId].remove(upListener); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (moveListener != null && windowMoveListeners != null) { | ||
|  | 			if (windowId < windowMoveListeners.length) { | ||
|  | 				windowMoveListeners[windowId].remove(moveListener); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Removes event handlers for `windowId:Int` from the passed functions that were passed to `notifyEraserWindowed` function. | ||
|  | 	 */ | ||
|  | 	public function removeEraserWindowed(windowId: Int, eraserDownListener: Int->Int->Float->Void, eraserUpListener: Int->Int->Float->Void, | ||
|  | 			eraserMoveListener: Int->Int->Float->Void): Void { | ||
|  | 		if (eraserDownListener != null && windowEraserDownListeners != null) { | ||
|  | 			if (windowId < windowEraserDownListeners.length) { | ||
|  | 				windowEraserDownListeners[windowId].remove(eraserDownListener); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (eraserUpListener != null && windowEraserUpListeners != null) { | ||
|  | 			if (windowId < windowEraserUpListeners.length) { | ||
|  | 				windowEraserUpListeners[windowId].remove(eraserUpListener); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (eraserMoveListener != null && windowEraserMoveListeners != null) { | ||
|  | 			if (windowId < windowEraserMoveListeners.length) { | ||
|  | 				windowEraserMoveListeners[windowId].remove(eraserMoveListener); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static var instance: Pen; | ||
|  | 
 | ||
|  | 	var windowDownListeners: Array<Array<Int->Int->Float->Void>>; | ||
|  | 	var windowUpListeners: Array<Array<Int->Int->Float->Void>>; | ||
|  | 	var windowMoveListeners: Array<Array<Int->Int->Float->Void>>; | ||
|  | 
 | ||
|  | 	var windowEraserDownListeners: Array<Array<Int->Int->Float->Void>>; | ||
|  | 	var windowEraserUpListeners: Array<Array<Int->Int->Float->Void>>; | ||
|  | 	var windowEraserMoveListeners: Array<Array<Int->Int->Float->Void>>; | ||
|  | 
 | ||
|  | 	function new() { | ||
|  | 		instance = this; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function sendDownEvent(windowId: Int, x: Int, y: Int, pressure: Float): Void { | ||
|  | 		if (windowDownListeners != null) { | ||
|  | 			for (listener in windowDownListeners[windowId]) { | ||
|  | 				listener(x, y, pressure); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function sendUpEvent(windowId: Int, x: Int, y: Int, pressure: Float): Void { | ||
|  | 		if (windowUpListeners != null) { | ||
|  | 			for (listener in windowUpListeners[windowId]) { | ||
|  | 				listener(x, y, pressure); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function sendMoveEvent(windowId: Int, x: Int, y: Int, pressure: Float): Void { | ||
|  | 		if (windowMoveListeners != null) { | ||
|  | 			for (listener in windowMoveListeners[windowId]) { | ||
|  | 				listener(x, y, pressure); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function sendEraserDownEvent(windowId: Int, x: Int, y: Int, pressure: Float): Void { | ||
|  | 		if (windowEraserDownListeners != null) { | ||
|  | 			for (listener in windowEraserDownListeners[windowId]) { | ||
|  | 				listener(x, y, pressure); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function sendEraserUpEvent(windowId: Int, x: Int, y: Int, pressure: Float): Void { | ||
|  | 		if (windowEraserUpListeners != null) { | ||
|  | 			for (listener in windowEraserUpListeners[windowId]) { | ||
|  | 				listener(x, y, pressure); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function sendEraserMoveEvent(windowId: Int, x: Int, y: Int, pressure: Float): Void { | ||
|  | 		if (windowEraserMoveListeners != null) { | ||
|  | 			for (listener in windowEraserMoveListeners[windowId]) { | ||
|  | 				listener(x, y, pressure); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | } |