import { TouchEvent as TouchEventAway } from '@awayjs/scene'; import { InteractiveObject } from '../display/InteractiveObject'; import { Event } from './Event'; import { DisplayObject } from '../display/DisplayObject'; import { AVMStage } from '@awayfl/swf-loader'; import { Point } from '@awayjs/core'; import { SecurityDomain } from '../SecurityDomain'; /** /// @eventType flash.events.TouchEvent.TOUCH_BEGIN [Event(name="touchBegin", type="flash.events.TouchEvent")] /// @eventType flash.events.TouchEvent.TOUCH_END [Event(name="touchEnd", type="flash.events.TouchEvent")] /// @eventType flash.events.TouchEvent.TOUCH_MOVE [Event(name="touchMove", type="flash.events.TouchEvent")] /// @eventType flash.events.TouchEvent.TOUCH_OUT [Event(name="touchOut", type="flash.events.TouchEvent")] /// @eventType flash.events.TouchEvent.TOUCH_OVER [Event(name="touchOver", type="flash.events.TouchEvent")] /// @eventType flash.events.TouchEvent.TOUCH_ROLL_OUT [Event(name="touchRollOut", type="flash.events.TouchEvent")] /// @eventType flash.events.TouchEvent.TOUCH_ROLL_OVER [Event(name="touchRollOver", type="flash.events.TouchEvent")] /// @eventType flash.events.TouchEvent.TOUCH_TAP [Event(name="touchTap", type="flash.events.TouchEvent")] * The TouchEvent class lets you handle events on devices that detect user contact with * the device (such as a finger on a touch screen). * When a user interacts with a device such as a mobile phone or tablet with a touch screen, the user typically * touches the screen with his or her fingers or a pointing device. You can develop applications that respond to * basic touch events (such as a single finger tap) with the TouchEvent class. * Create event listeners using the event types defined in this class. * For user interaction with multiple points of contact * (such as several fingers moving across a touch screen at the same time) use * the related GestureEvent, PressAndTapGestureEvent, and TransformGestureEvent classes. * And, use the properties and methods of these classes * to construct event handlers that respond to the user touching the device. *

Use the Multitouch class to determine the current environment's support for touch interaction, * and to * manage the support of touch interaction if the current environment supports it.

*

Note: * When objects are nested on the display list, touch events target the deepest possible * nested object that is visible in the display list. This object is called the target node. To have a target node's * ancestor (an object containing the target node in the display list) receive notification of a touch event, use * EventDispatcher.addEventListener() * on the ancestor node with the type parameter set to the specific * touch event you want to detect.

*/ export class TouchEvent extends Event { public static PROXIMITY_BEGIN: string; public static PROXIMITY_END: string; public static PROXIMITY_MOVE: string; public static PROXIMITY_OUT: string; public static PROXIMITY_OVER: string; public static PROXIMITY_ROLL_OUT: string; public static PROXIMITY_ROLL_OVER: string; /** * Defines the value of the type property of a TOUCH_BEGIN touch event object. * * The dispatched TouchEvent object has the following properties:PropertyValuealtKeytrue * if the Alt key is active (Windows or Linux).bubblestruecancelablefalse; * there is no default behavior to cancel.commandKeytrue on the Mac if the Command key is active; * false if it is inactive. Always false on Windows.controlKeytrue if the Ctrl or Control key is active; * false if it is inactive.ctrlKeytrue on Windows or Linux if the Ctrl key is active. * true on Mac if either the Ctrl key or the Command key is active. Otherwise, * #false.currentTargetThe object that is actively processing the Event * object with an event listener.eventPhaseThe current phase in the event * flow.isRelatedObjectInaccessibletrue if the relatedObject property * is set to null because of security sandbox rules.localX * The horizontal coordinate at which the event occurred relative to the containing sprite. * localYThe vertical coordinate at which the event occurred relative to the containing sprite.pressure * A value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0.related * ObjectA reference to a display list object related to the event.shiftKey * true if the Shift key is active; false if it is inactive.sizeX * Width of the contact area.sizeYHeight of the contact area.stageX * The horizontal coordinate at which the event occurred in global stage coordinates.stageY * The vertical coordinate at which the event occurred in global stage coordinates.target * The InteractiveObject instance under the touching device. * The target is not always the object in the display list * that registered the event listener. Use the currentTarget * property to access the object in the display list that is currently processing the event.touchPoint * IDA unique identification number (as an int) assigned to the touch point. */ public static TOUCH_BEGIN: string = 'touchBegin'; /** * Defines the value of the type property of a TOUCH_END touch event object. * * The dispatched TouchEvent object has the following properties:PropertyValuealtKey * true if the Alt key is active (Windows or Linux).bubblestruecancelablefalse; * there is no default behavior to cancel.commandKeytrue on the Mac if the Command key is active; * false if it is inactive. Always false on Windows.controlKeytrue if the Ctrl or Control key is active; * false if it is inactive.ctrlKeytrue on Windows or Linux if the Ctrl key is active. * true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.currentTarget * The object that is actively processing the Event * object with an event listener.eventPhaseThe current phase in the event flow.isRelatedObjectInaccessible * true if the relatedObject property is set to null because of security sandbox rules.localX * The horizontal coordinate at which the event occurred relative to the containing sprite.localY * The vertical coordinate at which the event occurred relative to the containing sprite. * pressureA value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0.related * ObjectA reference to a display list object related to the event.shiftKey * true if the Shift key is active; false if it is inactive.sizeX * Width of the contact area.sizeYHeight of the contact area.stageX * The horizontal coordinate at which the event occurred in global stage coordinates.stageY * The vertical coordinate at which the event occurred in global stage coordinates. * targetThe InteractiveObject instance under the touching device. * The target is not always the object in the display list * that registered the event listener. Use the currentTarget * property to access the object in the display list that is currently processing the event. * touchPointIDA unique identification number (as an int) assigned to the touch point. */ public static TOUCH_END: string = 'touchEnd'; /** * Defines the value of the type property of a TOUCH_MOVE touch event object. * * The dispatched TouchEvent object has the following properties:PropertyValue * altKeytrue if the Alt key is active (Windows or Linux).bubblestruecancelablefalse; * there is no default behavior to cancel.commandKeytrue on the Mac if the Command key is active; * false if it is inactive. Always false on Windows.controlKeytrue if the Ctrl or Control key is active; * false if it is inactive.ctrlKeytrue on Windows or Linux if the Ctrl key is active. * true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.currentTarget * The object that is actively processing the Event * object with an event listener.eventPhaseThe current phase in the event flow.isRelatedObjectInaccessible * true if the relatedObject property is set to null because of security sandbox rules.localX * The horizontal coordinate at which the event occurred relative to the containing sprite.localY * The vertical coordinate at which the event occurred relative to the containing sprite.pressure * A value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0.related * ObjectA reference to a display list object related to the event.shiftKeytrue * if the Shift key is active; false if it is inactive.sizeXWidth of the contact area.sizeY * Height of the contact area.stageXThe horizontal coordinate * at which the event occurred in global stage coordinates. * stageYThe vertical coordinate at which the event occurred in global stage coordinates. * targetThe InteractiveObject instance under the touching device. * The target is not always the object in the display list * that registered the event listener. Use the currentTarget * property to access the object in the display list that is currently processing the event. * touchPointIDA unique identification number (as an int) assigned to the touch point. */ public static TOUCH_MOVE: string = 'touchMove'; /** * Defines the value of the type property of a TOUCH_OUT touch event object. * * The dispatched TouchEvent object has the following properties: * PropertyValuealtKeytrue if the Alt key is active (Windows or Linux).bubblestruecancelablefalse; * there is no default behavior to cancel.commandKeytrue on the Mac if the Command key is active; * false if it is inactive. Always false on Windows.controlKeytrue if the Ctrl or Control key is active; * false if it is inactive.ctrlKeytrue on Windows or Linux if the Ctrl key is active. * true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.currentTarget * The object that is actively processing the Event * object with an event listener.eventPhaseThe current phase in the event flow.isRelatedObjectInaccessibletrue * if the relatedObject property is set to null because of security sandbox rules.localX * The horizontal coordinate at which the event occurred relative to the containing sprite.localY * The vertical coordinate at which the event occurred relative to the containing sprite.pressure * A value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0.relatedObject * A reference to a display list object related to the event.shiftKeytrue if the Shift key is active; * false if it is inactive.sizeXWidth of the contact area.sizeYHeight of the contact area.stageX * The horizontal coordinate at which the event occurred in global stage coordinates.stageY * The vertical coordinate at which the event occurred in global stage coordinates.target * The InteractiveObject instance under the touching device. * The target is not always the object in the display list * that registered the event listener. Use the currentTarget * property to access the object in the display list that is currently processing the event.touchPoint * IDA unique identification number (as an int) assigned to the touch point. */ public static TOUCH_OUT: string = 'touchOut'; /** * Defines the value of the type property of a TOUCH_OVER touch event object. * * The dispatched TouchEvent object has the following properties:PropertyValuealtKey * true if the Alt key is active (Windows or Linux).bubblestruecancelablefalse; * there is no default behavior to cancel.commandKeytrue on the Mac if the Command key is active; * false if it is inactive. Always false on Windows.controlKeytrue if the Ctrl or Control key is active; false * if it is inactive.ctrlKeytrue on Windows or Linux if the Ctrl key is active. * true on Mac if either the Ctrl key or the Command key is active. Otherwise, * false.currentTargetThe object that is actively processing the Event * object with an event listener.eventPhaseThe current phase in the event * flow.isRelatedObjectInaccessibletrue if the relatedObject property * is set to null because of security sandbox rules. * localXThe horizontal coordinate at which the event occurred relative to the containing sprite.localY * The vertical coordinate at which the event occurred relative to the containing sprite.pressure * A value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0.relatedObject * A reference to a display list object related to the event.shiftKeytrue * if the Shift key is active; false if it is inactive.sizeXWidth of the contact area.sizeY * Height of the contact area.stageXThe horizontal coordinate at which * the event occurred in global stage coordinates.stageYThe vertical coordinate * at which the event occurred in global stage coordinates.target * The InteractiveObject instance under the touching device. * The target is not always the object in the display list * that registered the event listener. Use the currentTarget * property to access the object in the display list that is currently processing the event. * touchPointIDA unique identification number (as an int) assigned to the touch point. */ public static TOUCH_OVER: string = 'touchOver'; /** * Defines the value of the type property of a TOUCH_ROLL_OUT touch event object. * * The dispatched TouchEvent object has the following properties:PropertyValuealtKeytrue * if the Alt key is active (Windows or Linux).bubblestruecancelablefalse; there is no default behavior to cancel. * commandKeytrue on the Mac if the Command key is active; false if it is inactive. * Always false on Windows.controlKeytrue if the Ctrl or Control key is active; * false if it is inactive.ctrlKeytrue on Windows or Linux if the Ctrl key is active. * true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.currentTarget * The object that is actively processing the Event * object with an event listener.eventPhaseThe current phase in the event flow.isRelatedObjectInaccessibletrue * if the relatedObject property is set to null because of security sandbox rules.localX * The horizontal coordinate at which the event occurred relative to the containing sprite.localY * The vertical coordinate at which the event occurred relative to the containing sprite.pressure * A value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0.relatedObject * A reference to a display list object related to the event.shiftKeytrue if the Shift key is active; * false if it is inactive.sizeXWidth of the contact area.sizeYHeight of the contact area.stageX * The horizontal coordinate at which the event occurred in global stage coordinates.stageY * The vertical coordinate at which the event occurred in global stage coordinates.target * The InteractiveObject instance under the touching device. * The target is not always the object in the display list * that registered the event listener. Use the currentTarget * property to access the object in the display list that is currently processing the event.touchPointID * A unique identification number (as an int) assigned to the touch point. */ public static TOUCH_ROLL_OUT: string = 'touchRollOut'; /** * Defines the value of the type property of a TOUCH_ROLL_OVER touch event object. * * The dispatched TouchEvent object has the following properties:PropertyValuealtKey * true if the Alt key is active (Windows or Linux).bubblestruecancelablefalse; * #there is no default behavior to cancel.commandKeytrue on the Mac if the Command key is active; * false if it is inactive. Always false on Windows.controlKeytrue if the Ctrl or Control key is active; * false if it is inactive.ctrlKeytrue on Windows or Linux if the Ctrl key is active. * true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.currentTarget * The object that is actively processing the Event * object with an event listener.eventPhaseThe current phase in the event flow.isRelatedObjectInaccessibletrue * if the relatedObject property is set to null because of security sandbox rules.localX * The horizontal coordinate at which the event occurred relative to the containing sprite.localY * The vertical coordinate at which the event occurred relative to the containing sprite.pressure * A value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0.relatedObject * A reference to a display list object related to the event.shiftKeytrue if the Shift key is active; * false if it is inactive.sizeXWidth of the contact area.sizeYHeight of the contact area.stageX * The horizontal coordinate at which the event occurred in global stage coordinates.stageY * The vertical coordinate at which the event occurred in global stage coordinates.target * The InteractiveObject instance under the touching device. * The target is not always the object in the display list * that registered the event listener. Use the currentTarget * property to access the object in the display list that is currently processing the event.touchPointID * A unique identification number (as an int) assigned to the touch point. */ public static TOUCH_ROLL_OVER: string = 'touchRollOver'; /** * Defines the value of the type property of a TOUCH_TAP touch event object. * * The dispatched TouchEvent object has the following properties:PropertyValuealtKeytrue * if the Alt key is active (Windows or Linux).bubblestruecancelablefalse; * there is no default behavior to cancel.commandKeytrue on the Mac if the Command key is active; * false if it is inactive. Always false on Windows.controlKeytrue if the Ctrl or Control key is active; * false if it is inactive.ctrlKeytrue on Windows or Linux if the Ctrl key is active. * true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.currentTarget * The object that is actively processing the Event * object with an event listener.eventPhaseThe current phase in the event flow.isRelatedObjectInaccessibletrue * if the relatedObject property is set to null because of security sandbox rules.localX * The horizontal coordinate at which the event occurred relative to the containing sprite.localY * The vertical coordinate at which the event occurred relative to the containing sprite. * pressureA value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, * the value is 1.0.relatedObjectA reference to a display list object related to the event.shiftKey * true if the Shift key is active; false if it is inactive.sizeXWidth of the contact area.sizeY * Height of the contact area.stageX * The horizontal coordinate at which the event occurred in global stage coordinates. * stageYThe vertical coordinate at which the event occurred in global stage coordinates.target * The InteractiveObject instance under the touching device. * The target is not always the object in the display list * that registered the event listener. Use the currentTarget * property to access the object in the display list that is currently processing the event.touchPointID * A unique identification number (as an int) assigned to the touch point. */ public static TOUCH_TAP: string = 'touchTap'; private adaptee: TouchEventAway; // AS -> JS Bindings private _localX: number; private _localY: number; private _stageX: number; private _stageY: number; private _ctrlKey: boolean; private _altKey: boolean; private _shiftKey: boolean; /** * Indicates whether the Alt key is active (true) or inactive (false). * Supported for Windows and Linux operating systems only. * @internal Reserved in case Desktop Player wants to capture this key in a future implementation. * The Option key modifier on Macintosh system must be represented using this key modifier. So far, it seems * only the Windows version is hooked up. */ public get altKey(): boolean { return this._altKey; } public set altKey(value: boolean) { this._altKey = value; } /** * On Windows or Linux, indicates whether the Ctrl key is active (true) or inactive (false). * On Macintosh, indicates whether either the Control key or the Command key is activated. */ public get ctrlKey(): boolean { return this._ctrlKey; } public set ctrlKey(value: boolean) { this._ctrlKey = value; } /** * Indicates whether the first point of contact is mapped to mouse events. */ public get isPrimaryTouchPoint (): boolean {return false;} public set isPrimaryTouchPoint (value: boolean) {} /** * If true, the relatedObject property is set to null for * reasons related to security sandboxes. If the nominal value of relatedObject is a reference to a * DisplayObject in another sandbox, relatedObject is set to * null unless there is permission in both directions across this sandbox boundary. Permission is * established by calling Security.allowDomain() from a SWF file, or by providing * a policy file from the server of an image file, and setting the LoaderContext.checkPolicyFile * property when loading the image. */ public get isRelatedObjectInaccessible (): boolean {return false;} public set isRelatedObjectInaccessible (value: boolean) {} /** * The horizontal coordinate at which the event occurred relative to the containing sprite. */ get localX(): number { return (this._localX / 20) | 0; } set localX(value: number) { this._localX = (value * 20) | 0; } /** * The vertical coordinate at which the event occurred relative to the containing sprite. */ get localY(): number { return (this._localY / 20) | 0; } set localY(value: number) { this._localY = (value * 20) | 0; } /** * A value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0. */ public get pressure (): number { return 0;} public set pressure (value: number) {} /** * A reference to a display list object that is related to the event. For example, when a touchOut event occurs, * relatedObject represents the display list object to which the pointing device now points. * This property applies to the touchOut, touchOver, touchRollOut, and touchRollOver events. * The value of this property can be null in two circumstances: if there is no related object, * or there is a related object, but it is in a security sandbox to which you don't have access. * Use the isRelatedObjectInaccessible() property to determine which of these reasons applies. */ public get relatedObject (): InteractiveObject { return null; } public set relatedObject (value: InteractiveObject) { } /** * Indicates whether the Shift key is active (true) or inactive * (false). */ public get shiftKey(): boolean { return this._shiftKey; } public set shiftKey(value: boolean) { this._shiftKey = value; } /** * Width of the contact area. * @langversion 3.0 */ public get sizeX (): number { return 0;} public set sizeX (value: number) {} /** * Height of the contact area. */ public get sizeY (): number { return 0;} public set sizeY (value: number) {} /** * The horizontal coordinate at which the event occurred in global Stage coordinates. * This property is calculated when the localX property is set. */ get stageX(): number { return this._stageX; } /** * The vertical coordinate at which the event occurred in global Stage coordinates. * This property is calculated when the localY property is set. */ public get stageY (): number { return 0;} /** * A unique identification number (as an int) assigned to the touch point. */ public get touchPointID (): number { return 0;} public set touchPointID (value: number) {} /** * Creates a copy of the TouchEvent object and sets the value of each property to match that of the original. * @return A new TouchEvent object with property values that match those of the original. */ public clone (): Event { return null; } /** * Returns a string that contains all the properties of the TouchEvent object. * The string is in the following format: * [TouchEvent type=value bubbles=value cancelable=value ... ] * @return A string that contains all the properties of the TouchEvent object. */ public toString (): string {return '';} /** * Creates an Event object that contains information about touch events. * Event objects are passed as parameters to event listeners. * @param type The type of the event. Possible values are: TouchEvent.TOUCH_BEGIN, * TouchEvent.TOUCH_END, TouchEvent.TOUCH_MOVE, * TouchEvent.TOUCH_OUT, TouchEvent.TOUCH_OVER, * TouchEvent.TOUCH_ROLL_OUT, TouchEvent.TOUCH_ROLL_OVER, * and TouchEvent.TOUCH_TAP. * @param bubbles Determines whether the Event object participates in the bubbling phase of the event flow. * @param cancelable Determines whether the Event object can be canceled. * @param touchPointID A unique identification number (as an int) assigned to the touch point. * @param isPrimaryTouchPoint Indicates whether the first point of contact is mapped to mouse events. * @param localX The horizontal coordinate at which the event occurred relative to the containing sprite. * @param localY The vertical coordinate at which the event occurred relative to the containing sprite. * @param sizeX Width of the contact area. * @param sizeY Height of the contact area. * @param pressure A value between 0.0 and 1.0 indicating force of the contact with the device. * If the device does not support detecting the pressure, the value is 1.0. * @param relatedObject The complementary InteractiveObject instance that is affected by the event. * For example, when a touchOut event occurs, * relatedObject represents the display list object to which the pointing device now points. * @param ctrlKey On Windows or Linux, indicates whether the Ctrl key is activated. * On Mac, indicates whether either the Ctrl key or the Command key is activated. * @param altKey Indicates whether the Alt key is activated (Windows or Linux only). * @param shiftKey Indicates whether the Shift key is activated. * @param commandKey (AIR only) Indicates whether the Command key is activated (Mac only). * This parameter is for Adobe AIR only; do not set it for Flash Player content. * @param controlKey (AIR only) Indicates whether the Control or Ctrl key is activated. * This parameter is for Adobe AIR only; do not set it for Flash Player content. */ constructor (type: string, bubbles: boolean = true, cancelable: boolean = false, touchPointID: number = 0, isPrimaryTouchPoint: boolean = false, localX: number = NaN, localY: number = NaN, sizeX: number = NaN, sizeY: number = NaN, pressure: number = NaN, relatedObject: InteractiveObject = null, ctrlKey: boolean = false, altKey: boolean = false, shiftKey: boolean = false) { super(type, bubbles, cancelable); this._localX = localX; this._localY = localY; this._ctrlKey = ctrlKey; this._altKey = altKey; this._shiftKey = shiftKey; } /** * Instructs Flash Player or Adobe AIR to render after processing of this event completes, * if the display list has been modified. */ public updateAfterEvent () { } /* added to clone events from away to as3web. */ public fillFromAway (awayEvent: TouchEventAway) { //console.log("cloneFromAway not implemented yet in flash/MouseEvent"); this.adaptee = awayEvent; // todo: set targets correctly this.target = awayEvent.target.adapter || ( this.sec).flash.display.DisplayObject.axClass._activeStage; this.currentTarget = awayEvent.currentTarget.adapter || ( this.sec).flash.display.DisplayObject.axClass._activeStage; this.ctrlKey = awayEvent.ctrlKey; this.shiftKey = awayEvent.shiftKey; const stagePoint = AVMStage.instance().unprojectPoint(new Point(awayEvent.screenX, awayEvent.screenY), ( this.target).stage.adaptee); this._stageX = stagePoint.x; this._stageY = stagePoint.y; //todo: translate more stuff from awayjs to as3 //result.screenX = this.screenX; //result.screenY = this.screenY; /* result.view = awayEvent.view; result.entity = awayEvent.entity; result.renderable = awayEvent.renderable; result.material = awayEvent.material; result.uv = awayEvent.uv; result.position = awayEvent.position; result.normal = awayEvent.normal; result.elementIndex = awayEvent.elementIndex; */ //result._iParentEvent = awayEvent; //result._iAllowedToPropagate = awayEvent._iAllowedToPropagate; } }