UNPKG

starling-framework

Version:

A fast, productive library for 2D cross-platform development.

433 lines (369 loc) 19.6 kB
import BitmapData from "openfl/display/BitmapData"; import Matrix from "openfl/geom/Matrix"; import Matrix3D from "openfl/geom/Matrix3D"; import Point from "openfl/geom/Point"; import Rectangle from "openfl/geom/Rectangle"; import Vector3D from "openfl/geom/Vector3D"; import FragmentFilter from "./../filters/FragmentFilter"; import Painter from "./../rendering/Painter"; import DisplayObjectContainer from "./DisplayObjectContainer"; import Stage from "./Stage"; import EventDispatcher from "./../events/EventDispatcher"; declare namespace starling.display { /** Dispatched when an object is added to a parent. */ // @:meta(Event(name="added", type="starling.events.Event")) /** Dispatched when an object is connected to the stage (directly or indirectly). */ // @:meta(Event(name="addedToStage", type="starling.events.Event")) /** Dispatched when an object is removed from its parent. */ // @:meta(Event(name="removed", type="starling.events.Event")) /** Dispatched when an object is removed from the stage and won't be rendered any longer. */ // @:meta(Event(name="removedFromStage", type="starling.events.Event")) /** Dispatched once every frame on every object that is connected to the stage. */ // @:meta(Event(name="enterFrame", type="starling.events.EnterFrameEvent")) /** Dispatched when an object is touched. Bubbles. */ // @:meta(Event(name="touch", type="starling.events.TouchEvent")) /** Dispatched when a key on the keyboard is released. */ // @:meta(Event(name="keyUp", type="starling.events.KeyboardEvent")) /** Dispatched when a key on the keyboard is pressed. */ // @:meta(Event(name="keyDown", type="starling.events.KeyboardEvent")) /** * The DisplayObject class is the base class for all objects that are rendered on the * screen. * * <p><strong>The Display Tree</strong></p> * * <p>In Starling, all displayable objects are organized in a display tree. Only objects that * are part of the display tree will be displayed (rendered).</p> * * <p>The display tree consists of leaf nodes (Image, Quad) that will be rendered directly to * the screen, and of container nodes (subclasses of "DisplayObjectContainer", like "Sprite"). * A container is simply a display object that has child nodes - which can, again, be either * leaf nodes or other containers.</p> * * <p>At the base of the display tree, there is the Stage, which is a container, too. To create * a Starling application, you create a custom Sprite subclass, and Starling will add an * instance of this class to the stage.</p> * * <p>A display object has properties that define its position in relation to its parent * (x, y), as well as its rotation and scaling factors (scaleX, scaleY). Use the * <code>alpha</code> and <code>visible</code> properties to make an object translucent or * invisible.</p> * * <p>Every display object may be the target of touch events. If you don't want an object to be * touchable, you can disable the "touchable" property. When it's disabled, neither the object * nor its children will receive any more touch events.</p> * * <strong>Transforming coordinates</strong> * * <p>Within the display tree, each object has its own local coordinate system. If you rotate * a container, you rotate that coordinate system - and thus all the children of the * container.</p> * * <p>Sometimes you need to know where a certain point lies relative to another coordinate * system. That's the purpose of the method <code>getTransformationMatrix</code>. It will * create a matrix that represents the transformation of a point in one coordinate system to * another.</p> * * <strong>Customization</strong> * * <p>DisplayObject is an abstract class, which means you cannot instantiate it directly, * but have to use one of its many subclasses instead. For leaf nodes, this is typically * 'Mesh' or its subclasses 'Quad' and 'Image'. To customize rendering of these objects, * you can use fragment filters (via the <code>filter</code>-property on 'DisplayObject') * or mesh styles (via the <code>style</code>-property on 'Mesh'). Look at the respective * class documentation for more information.</p> * * @see DisplayObjectContainer * @see Sprite * @see Stage * @see Mesh * @see starling.filters.FragmentFilter * @see starling.styles.MeshStyle */ export class DisplayObject extends EventDispatcher { /** Disposes all resources of the display object. * GPU buffers are released, event listeners are removed, filters and masks are disposed. */ public dispose():void; /** Removes the object from its parent, if it has one, and optionally disposes it. */ public removeFromParent(dispose?:boolean):void; /** Creates a matrix that represents the transformation from the local coordinate system * to another. If you pass an <code>out</code>-matrix, the result will be stored in this matrix * instead of creating a new object. */ public getTransformationMatrix(targetSpace:DisplayObject, out?:Matrix):Matrix; /** Returns a rectangle that completely encloses the object as it appears in another * coordinate system. If you pass an <code>out</code>-rectangle, the result will be stored in this * rectangle instead of creating a new object. */ public getBounds(targetSpace:DisplayObject, out?:Rectangle):Rectangle; /** Returns the object that is found topmost beneath a point in local coordinates, or nil * if the test fails. Untouchable and invisible objects will cause the test to fail. */ public hitTest(localPoint:Point):DisplayObject; /** Checks if a certain point is inside the display object's mask. If there is no mask, * this method always returns <code>true</code> (because having no mask is equivalent * to having one that's infinitely big). */ public hitTestMask(localPoint:Point):boolean; /** Transforms a point from the local coordinate system to global (stage) coordinates. * If you pass an <code>out</code>-point, the result will be stored in this point instead of * creating a new object. */ public localToGlobal(localPoint:Point, out?:Point):Point; /** Transforms a point from global (stage) coordinates to the local coordinate system. * If you pass an <code>out</code>-point, the result will be stored in this point instead of * creating a new object. */ public globalToLocal(globalPoint:Point, out?:Point):Point; /** Renders the display object with the help of a painter object. Never call this method * directly, except from within another render method. * * @param painter Captures the current render state and provides utility functions * for rendering. */ public render(painter:Painter):void; /** Moves the pivot point to a certain position within the local coordinate system * of the object. If you pass no arguments, it will be centered. */ public alignPivot(horizontalAlign?:string, verticalAlign?:string):void; /** Draws the object into a BitmapData object. * * <p>This is achieved by drawing the object into the back buffer and then copying the * pixels of the back buffer into a texture. This also means that the returned bitmap * data cannot be bigger than the current viewPort.</p> * * @param out If you pass null, the object will be created for you. * If you pass a BitmapData object, it should have the size of the * object bounds, multiplied by the current contentScaleFactor. * @param color The RGB color value with which the bitmap will be initialized. * @param alpha The alpha value with which the bitmap will be initialized. */ public drawToBitmapData(out?:BitmapData, color?:number, alpha?:number):BitmapData; // 3D transformation /** Creates a matrix that represents the transformation from the local coordinate system * to another. This method supports three dimensional objects created via 'Sprite3D'. * If you pass an <code>out</code>-matrix, the result will be stored in this matrix * instead of creating a new object. */ public getTransformationMatrix3D(targetSpace:DisplayObject, out?:Matrix3D):Matrix3D; /** Transforms a 3D point from the local coordinate system to global (stage) coordinates. * This is achieved by projecting the 3D point onto the (2D) view plane. * * <p>If you pass an <code>out</code>-point, the result will be stored in this point instead of * creating a new object.</p> */ public local3DToGlobal(localPoint:Vector3D, out?:Point):Point; /** Transforms a point from global (stage) coordinates to the 3D local coordinate system. * If you pass an <code>out</code>-vector, the result will be stored in this point instead of * creating a new object. */ public globalToLocal3D(globalPoint:Point, out?:Vector3D):Vector3D; // render cache /** Forces the object to be redrawn in the next frame. * This will prevent the object to be drawn from the render cache. * * <p>This method is called every time the object changes in any way. When creating * custom mesh styles or any other custom rendering code, call this method if the object * needs to be redrawn.</p> * * <p>If the object needs to be redrawn just because it does not support the render cache, * call <code>painter.excludeFromCache()</code> in the object's render method instead. * That way, Starling's <code>skipUnchangedFrames</code> policy won't be disrupted.</p> */ public setRequiresRedraw():void; /** Indicates if the object needs to be redrawn in the upcoming frame, i.e. if it has * changed its location relative to the stage or some other aspect of its appearance * since it was last rendered. */ public readonly requiresRedraw:boolean; protected get_requiresRedraw():boolean; // stage event handling /** @protected */ // public /*override*/ dispatchEvent(event:Event):void; // enter frame event optimization // To avoid looping through the complete display tree each frame to find out who's // listening to ENTER_FRAME events, we manage a list of them manually in the Stage class. // We need to take care that (a) it must be dispatched only when the object is // part of the stage, (b) it must not cause memory leaks when the user forgets to call // dispose and (c) there might be multiple listeners for this event. /** @inheritDoc */ public /*override*/ addEventListener(type:string, listener:Function):void; /** @inheritDoc */ public /*override*/ removeEventListener(type:string, listener:Function):void; /** @inheritDoc */ public /*override*/ removeEventListeners(type?:string):void; // properties /** The transformation matrix of the object relative to its parent. * * <p>If you assign a custom transformation matrix, Starling will try to figure out * suitable values for <code>x, y, scaleX, scaleY,</code> and <code>rotation</code>. * However, if the matrix was created in a different way, this might not be possible. * In that case, Starling will apply the matrix, but not update the corresponding * properties.</p> * * <p>CAUTION: not a copy, but the actual object!</p> */ public transformationMatrix:Matrix; protected get_transformationMatrix():Matrix; protected set_transformationMatrix(matrix:Matrix):Matrix; /** The 3D transformation matrix of the object relative to its parent. * * <p>For 2D objects, this property returns just a 3D version of the 2D transformation * matrix. Only the 'Sprite3D' class supports real 3D transformations.</p> * * <p>CAUTION: not a copy, but the actual object!</p> */ public readonly transformationMatrix3D:Matrix3D; protected get_transformationMatrix3D():Matrix3D; /** Indicates if this object or any of its parents is a 'Sprite3D' object. */ public readonly is3D:boolean; protected get_is3D():boolean; /** Indicates if the mouse cursor should transform into a hand while it's over the sprite. * @default false */ public useHandCursor:boolean; protected get_useHandCursor():boolean; protected set_useHandCursor(value:boolean):boolean; /** The bounds of the object relative to the local coordinates of the parent. */ public readonly bounds:Rectangle; protected get_bounds():Rectangle; /** The width of the object in pixels. * Note that for objects in a 3D space (connected to a Sprite3D), this value might not * be accurate until the object is part of the display list. */ public width:number; protected get_width():number; protected set_width(value:number):number; /** The height of the object in pixels. * Note that for objects in a 3D space (connected to a Sprite3D), this value might not * be accurate until the object is part of the display list. */ public height:number; protected get_height():number; protected set_height(value:number):number; /** The x coordinate of the object relative to the local coordinates of the parent. */ public x:number; protected get_x():number; protected set_x(value:number):number; /** The y coordinate of the object relative to the local coordinates of the parent. */ public y:number; protected get_y():number; protected set_y(value:number):number; /** The x coordinate of the object's origin in its own coordinate space (default: 0). */ public pivotX:number; protected get_pivotX():number; protected set_pivotX(value:number):number; /** The y coordinate of the object's origin in its own coordinate space (default: 0). */ public pivotY:number; protected get_pivotY():number; protected set_pivotY(value:number):number; /** The horizontal scale factor. '1' means no scale, negative values flip the object. * @default 1 */ public scaleX:number; protected get_scaleX():number; protected set_scaleX(value:number):number; /** The vertical scale factor. '1' means no scale, negative values flip the object. * @default 1 */ public scaleY:number; protected get_scaleY():number; protected set_scaleY(value:number):number; /** Sets both 'scaleX' and 'scaleY' to the same value. The getter simply returns the * value of 'scaleX' (even if the scaling values are different). @default 1 */ public scale:number; protected get_scale():number; protected set_scale(value:number):number; /** The horizontal skew angle in radians. */ public skewX:number; protected get_skewX():number; protected set_skewX(value:number):number; /** The vertical skew angle in radians. */ public skewY:number; protected get_skewY():number; protected set_skewY(value:number):number; /** The rotation of the object in radians. (In Starling, all angles are measured * in radians.) */ public rotation:number; protected get_rotation():number; protected set_rotation(value:number):number; /** The opacity of the object. 0 = transparent, 1 = opaque. @default 1 */ public alpha:number; protected get_alpha():number; protected set_alpha(value:number):number; /** The visibility of the object. An invisible object will be untouchable. */ public visible:boolean; protected get_visible():boolean; protected set_visible(value:boolean):boolean; /** Indicates if this object (and its children) will receive touch events. */ public touchable:boolean; protected get_touchable():boolean; protected set_touchable(value:boolean):boolean; /** The blend mode determines how the object is blended with the objects underneath. * @default auto * @see starling.display.BlendMode */ public blendMode:string; protected get_blendMode():string; protected set_blendMode(value:string):string; /** The name of the display object (default: null). Used by 'getChildByName()' of * display object containers. */ public name:string; protected get_name():string; protected set_name(value:string):string; /** The filter that is attached to the display object. The <code>starling.filters</code> * package contains several classes that define specific filters you can use. To combine * several filters, assign an instance of the <code>FilterChain</code> class; to remove * all filters, assign <code>null</code>. * * <p>Beware that a filter instance may only be used on one object at a time! Furthermore, * when you remove or replace a filter, it is NOT disposed automatically (since you might * want to reuse it on a different object).</p> * * @default null * @see starling.filters.FragmentFilter * @see starling.filters.FilterChain */ public filter:FragmentFilter; protected get_filter():FragmentFilter; protected set_filter(value:FragmentFilter):FragmentFilter; /** The display object that acts as a mask for the current object. * Assign <code>null</code> to remove it. * * <p>A pixel of the masked display object will only be drawn if it is within one of the * mask's polygons. Texture pixels and alpha values of the mask are not taken into * account. The mask object itself is never visible.</p> * * <p>If the mask is part of the display list, masking will occur at exactly the * location it occupies on the stage. If it is not, the mask will be placed in the local * coordinate system of the target object (as if it was one of its children).</p> * * <p>For rectangular masks, you can use simple quads; for other forms (like circles * or arbitrary shapes) it is recommended to use a 'Canvas' instance.</p> * * <p><strong>Note:</strong> a mask will typically cause at least two additional draw * calls: one to draw the mask to the stencil buffer and one to erase it. However, if the * mask object is an instance of <code>starling.display.Quad</code> and is aligned * parallel to the stage axes, rendering will be optimized: instead of using the * stencil buffer, the object will be clipped using the scissor rectangle. That's * faster and reduces the number of draw calls, so make use of this when possible.</p> * * <p><strong>Note:</strong> AIR apps require the <code>depthAndStencil</code> node * in the application descriptor XMLs to be enabled! Otherwise, stencil masking won't * work.</p> * * @see Canvas * @default null */ public mask:DisplayObject; protected get_mask():DisplayObject; protected set_mask(value:DisplayObject):DisplayObject; /** Indicates if the masked region of this object is set to be inverted.*/ public maskInverted:boolean; protected get_maskInverted():boolean; protected set_maskInverted(value:boolean):boolean; /** The display object container that contains this display object. */ public readonly parent:DisplayObjectContainer; protected get_parent():DisplayObjectContainer; /** The topmost object in the display tree the object is part of. */ public readonly base:DisplayObject; protected get_base():DisplayObject; /** The root object the display object is connected to (i.e. an instance of the class * that was passed to the Starling constructor), or null if the object is not connected * to the stage. */ public readonly root:DisplayObject; protected get_root():DisplayObject; /** The stage the display object is connected to, or null if it is not connected * to the stage. */ public readonly stage:Stage; protected get_stage():Stage; } } export default starling.display.DisplayObject;