starling-framework
Version:
A fast, productive library for 2D cross-platform development.
275 lines (239 loc) • 13 kB
TypeScript
import DisplayObjectContainer from "./../../starling/display/DisplayObjectContainer";
import BitmapFont from "./../../starling/text/BitmapFont";
import Starling from "./../../starling/core/Starling";
import RectangleUtil from "./../../starling/utils/RectangleUtil";
import ArgumentError from "openfl/errors/ArgumentError";
import Sprite from "./../../starling/display/Sprite";
import Quad from "./../../starling/display/Quad";
import Matrix from "openfl/geom/Matrix";
import TrueTypeCompositor from "./../../starling/text/TrueTypeCompositor";
import SystemUtil from "./../../starling/utils/SystemUtil";
import Rectangle from "openfl/geom/Rectangle";
import TextFormat from "./../../starling/text/TextFormat";
import TextOptions from "./../../starling/text/TextOptions";
import MeshBatch from "./../../starling/display/MeshBatch";
import Painter from "./../rendering/Painter";
import DisplayObject from "./../display/DisplayObject";
import Point from "openfl/geom/Point";
import MeshStyle from "./../styles/MeshStyle";
import ITextCompositor from "./ITextCompositor";
declare namespace starling.text
{
/** A TextField displays text, using either standard true type fonts, custom bitmap fonts,
* or a custom text representation.
*
* <p>Access the <code>format</code> property to modify the appearance of the text, like the
* font name and size, a color, the horizontal and vertical alignment, etc. The border property
* is useful during development, because it lets you see the bounds of the TextField.</p>
*
* <p>There are several types of fonts that can be displayed:</p>
*
* <ul>
* <li>Standard TrueType fonts. This renders the text just like a conventional Flash
* TextField. It is recommended to embed the font, since you cannot be sure which fonts
* are available on the client system, and since this enhances rendering quality.
* Simply pass the font name to the corresponding property.</li>
* <li>Bitmap fonts. If you need speed or fancy font effects, use a bitmap font instead.
* That is a font that has its glyphs rendered to a texture atlas. To use it, first
* register the font with the method <code>registerBitmapFont</code>, and then pass
* the font name to the corresponding property of the text field.</li>
* <li>Custom text compositors. Any class implementing the <code>ITextCompositor</code>
* interface can be used to render text. If the two standard options are not sufficient
* for your needs, such a compositor might do the trick.</li>
* </ul>
*
* <p>For bitmap fonts, we recommend one of the following tools:</p>
*
* <ul>
* <li>Windows: <a href="http://www.angelcode.com/products/bmfont">Bitmap Font Generator</a>
* from Angel Code (free). Export the font data as an XML file and the texture as a png
* with white characters on a transparent background (32 bit).</li>
* <li>Mac OS: <a href="http://glyphdesigner.71squared.com">Glyph Designer</a> from
* 71squared or <a href="http://http://www.bmglyph.com">bmGlyph</a> (both commercial).
* They support Starling natively.</li>
* <li>Cross-Platform: <a href="http://kvazars.com/littera/">Littera</a> or
* <a href="http://renderhjs.net/shoebox/">ShoeBox</a> are great tools, as well.
* Both are free to use and were built with Adobe AIR.</li>
* </ul>
*
* <p>When using a bitmap font, the 'color' property is used to tint the font texture. This
* works by multiplying the RGB values of that property with those of the texture's pixel.
* If your font contains just a single color, export it in plain white and change the 'color'
* property to any value you like (it defaults to zero, which means black). If your font
* contains multiple colors, change the 'color' property to <code>Color.WHITE</code> to get
* the intended result.</p>
*
* <strong>Batching of TextFields</strong>
*
* <p>Normally, TextFields will require exactly one draw call. For TrueType fonts, you cannot
* avoid that; bitmap fonts, however, may be batched if you enable the "batchable" property.
* This makes sense if you have several TextFields with short texts that are rendered one
* after the other (e.g. subsequent children of the same sprite), or if your bitmap font
* texture is in your main texture atlas.</p>
*
* <p>The recommendation is to activate "batchable" if it reduces your draw calls (use the
* StatsDisplay to check this) AND if the text fields contain no more than about 15-20
* characters. For longer texts, the batching would take up more CPU time than what is saved
* by avoiding the draw calls.</p>
*/
export class TextField extends DisplayObjectContainer
{
/** Create a new text field with the given properties. */
public constructor(width:number, height:number, text?:string, format?:TextFormat);
/** Disposes the underlying texture data. */
public /*override*/ dispose():void;
/** @inheritDoc */
public /*override*/ render(painter:Painter):void;
/** Forces the text to be recomposed before rendering it in the upcoming frame. Any changes
* of the TextField itself will automatically trigger recomposition; changes in its
* parents or the viewport, however, need to be processed manually. For example, you
* might want to force recomposition to fix blurring caused by a scale factor change.
*/
public setRequiresRecomposition():void;
// properties
protected readonly isHorizontalAutoSize:boolean;
protected get_isHorizontalAutoSize():boolean;
protected readonly isVerticalAutoSize:boolean;
protected get_isVerticalAutoSize():boolean;
/** Returns the bounds of the text within the text field. */
public readonly textBounds:Rectangle;
protected get_textBounds():Rectangle;
/** @inheritDoc */
public /*override*/ getBounds(targetSpace:DisplayObject, out?:Rectangle):Rectangle;
/** Returns the bounds of the text within the text field in the given coordinate space. */
public getTextBounds(targetSpace:DisplayObject, out?:Rectangle):Rectangle;
/** @inheritDoc */
public /*override*/ hitTest(localPoint:Point):DisplayObject;
/** @inheritDoc */
protected /*override*/ set_width(value:number):number;
/** @inheritDoc */
protected /*override*/ set_height(value:number):number;
/** The displayed text. */
public text:string;
protected get_text():string;
protected set_text(value:string):string;
/** The format describes how the text will be rendered, describing the font name and size,
* color, alignment, etc.
*
* <p>Note that you can edit the font properties directly; there's no need to reassign
* the format for the changes to show up.</p>
*
* <listing>
* textField:TextField = new TextField(100, 30, "Hello Starling");
* textField.format.font = "Arial";
* textField.format.color = Color.RED;</listing>
*
* @default Verdana, 12 pt, black, centered
*/
public format:TextFormat;
protected get_format():TextFormat;
protected set_format(value:TextFormat):TextFormat;
/** The options that describe how the letters of a text should be assembled.
* This class basically collects all the TextField's properties that are needed
* during text composition. Since an instance of 'TextOptions' is passed to the
* constructor, you can pass custom options to the compositor. */
protected readonly options:TextOptions;
protected get_options():TextOptions;
/** Draws a border around the edges of the text field. Useful for visual debugging.
* @default false */
public border:boolean;
public get_border():boolean;
public set_border(value:boolean):boolean;
/** Indicates whether the font size is automatically reduced if the complete text does
* not fit into the TextField. @default false */
public autoScale:boolean;
protected get_autoScale():boolean;
protected set_autoScale(value:boolean):boolean;
/** Specifies the type of auto-sizing the TextField will do.
* Note that any auto-sizing will implicitly deactivate all auto-scaling.
* @default none */
public autoSize:string;
protected get_autoSize():string;
protected set_autoSize(value:string):string;
/** Indicates if the text should be wrapped at word boundaries if it does not fit into
* the TextField otherwise. @default true */
public wordWrap:boolean;
protected get_wordWrap():boolean;
protected set_wordWrap(value:boolean):boolean;
/** Indicates if TextField should be batched on rendering.
*
* <p>This works only with bitmap fonts, and it makes sense only for TextFields with no
* more than 10-15 characters. Otherwise, the CPU costs will exceed any gains you get
* from avoiding the additional draw call.</p>
*
* @default false
*/
public batchable:boolean;
protected get_batchable():boolean;
protected set_batchable(value:boolean):boolean;
/** Indicates if text should be interpreted as HTML code. For a description
* of the supported HTML subset, refer to the classic Flash 'TextField' documentation.
* Clickable hyperlinks and images are not supported. Only works for
* TrueType fonts! @default false */
public isHtmlText:boolean;
protected get_isHtmlText():boolean;
protected set_isHtmlText(value:boolean):boolean;
// #if flash
// /** An optional style sheet to be used for HTML text. For more information on style
// * sheets, please refer to the StyleSheet class in the ActionScript 3 API reference.
// * @default null */
// public styleSheet:StyleSheet;
// protected get_styleSheet():StyleSheet;
// protected set_styleSheet(value:StyleSheet):StyleSheet;
// #end
/** Controls whether or not the instance snaps to the nearest pixel. This can prevent the
* object from looking blurry when it's not exactly aligned with the pixels of the screen.
* @default true */
public pixelSnapping:boolean;
protected get_pixelSnapping():boolean;
protected set_pixelSnapping(value:boolean):boolean;
/** The mesh style that is used to render the text.
* Note that a style instance may only be used on one mesh at a time. */
public style:MeshStyle;
protected get_style():MeshStyle;
protected set_style(value:MeshStyle):MeshStyle;
/** The Context3D texture format that is used for rendering of all TrueType texts.
* The default provides a good compromise between quality and memory consumption;
* use <pre>Context3DTextureFormat.BGRA</pre> for the highest quality.
*
* @default Context3DTextureFormat.BGRA_PACKED */
public static defaultTextureFormat:string;
protected static get_defaultTextureFormat():string;
protected static set_defaultTextureFormat(value:string):string;
/** The default compositor used to arrange the letters of the text.
* If a specific compositor was registered for a font, it takes precedence.
*
* @default TrueTypeCompositor
*/
public static defaultCompositor:ITextCompositor;
protected static get_defaultCompositor():ITextCompositor;
protected static set_defaultCompositor(value:ITextCompositor):ITextCompositor;
/** Updates the list of embedded fonts. Call this method when you loaded a TrueType font
* at runtime so that Starling can recognize it as such. */
public static updateEmbeddedFonts():void;
// compositor registration
/** Makes a text compositor (like a <code>BitmapFont</code>) available to any TextField in
* the current stage3D context. The font is identified by its <code>name</code> (not
* case sensitive). */
public static registerCompositor(compositor:ITextCompositor, name:string):void;
/** Unregisters the text compositor and, optionally, disposes it. */
public static unregisterCompositor(name:string, dispose?:boolean):void;
/** Returns a registered text compositor (or null, if the font has not been registered).
* The name is not case sensitive. */
public static getCompositor(name:string):ITextCompositor;
/** Makes a bitmap font available at any TextField in the current stage3D context.
* The font is identified by its <code>name</code> (not case sensitive).
* Per default, the <code>name</code> property of the bitmap font will be used, but you
* can pass a custom name, as well. @return the name of the font. */
// @:deprecated("replaced by `registerCompositor`")
public static registerBitmapFont(bitmapFont:BitmapFont, name?:string):string;
/** Unregisters the bitmap font and, optionally, disposes it. */
// @:deprecated("replaced by `unregisterCompositor`")
public static unregisterBitmapFont(name:string, dispose?:boolean):void;
/** Returns a registered bitmap font compositor (or null, if no compositor has been
* registered with that name, or if it's not a bitmap font). The name is not case
* sensitive. */
public static getBitmapFont(name:string):BitmapFont;
}
}
export default starling.text.TextField;