~~NOTOC~~
====== StyledBitmapFont ======
---- dataentry extension ----
author_mail : daniel@gamua.com Daniel Sperl
description : Allows to colorize chars and words within a BitmapFont TextField
compatible : v2.3
tags : MeshStyle, color, text, bitmap fonts
homepage_url : https://gist.github.com/PrimaryFeather/aae25c1d92a5a0c18d655415e1488ed2
----
===== Overview =====
This extension requires Starling 2.3 or the very latest head revision from GitHub.
This extension allows to colorize parts of a TextField, similar to what's possible with HTML text. Decorate the substring to be colorized with a simple XML-like syntax.
{{ :extensions:red-green-blue.png?nolink |}}
This extension consists of the class //StyledBitmapFont//.
That's what you have to use instead of the standard //BitmapFont// class when instantiating the font.
In the example below, the font is instantiated from two embedded files.
[Embed(source="../fonts/Ubuntu-R.png")]
private static const BmpFontTexture:Class;
[Embed(source="../fonts/Ubuntu-R.fnt", mimeType="application/octet-stream")]
private static const BmpFont:Class;
public function Demo_StyledBitmapFont()
{
var fontTexture:Texture = Texture.fromEmbeddedAsset(BmpFontTexture);
var fontXml:XML = XML(new BmpFont());
var bitmapFont:BitmapFont = new StyledBitmapFont(fontTexture, fontXml);
TextField.registerCompositor(bitmapFont, bitmapFont.name);
var text:String = "Let's do it with {style color=#ff0000}style{/style}!"
var textField:TextField = new TextField(700, 200, text);
textField.format.setTo(bitmapFont.name, 30, 0x0);
addChild(textField);
}
The color itself is assigned through tags in the following form:
{style color=#RRGGBB}text{/style}
Just like in standard XML, tags can be nested.
Unfortunately, the current version of the AssetManager does not make it easy to use this custom class instead of the standard //BitmapFont// class. But it's possible!
First, you need to tell it to keep the font XMLs:
assetManager.keepFontXmls = true;
When all assets are processed, create the //StyledBitmapFont// and let it replace the previous font.
var oldFont:BitmapFont = TextField.getBitmapFont("myFont");
var newFont:StyledBitmapFont = new StyledBitmapFont(
oldFont.texture, assetManager.getXml("myFont"));
TextField.registerCompositor(newFont, newFont.name);
Yeah, I'd like to enhance this workflow in future Starling versions. m(
===== Changelog =====
* //2017/11/10//: First public version
===== Source Code =====
%gist(aae25c1d92a5a0c18d655415e1488ed2)%
===== User Comments =====
//Feel free to edit this part of the page if you want to add information that's lacking in the above description.\\
Questions are better asked in the [[http://forum.starling-framework.org|forum]], though.//