-
-
Notifications
You must be signed in to change notification settings - Fork 93
Images
This entry describes in detail how Myra deals with images.
IBrush represents something that can draw itself in the specified rectangle with the specified color:
public interface IBrush
{
void Draw(SpriteBatch batch, Rectangle dest, Color color);
}
Many widgets properties such as Widget.Background or Menu.SelectionBackground have IBrush type. The most simple implementation of IBrush is SolidBrush. Thus following code sets SolidBrush as widget.Background:
widget.Background = new SolidBrush(Color.Red); // SolidBrush from Color
widget.Background = new SolidBrush("#808000FF"); // SolidBrush from RGBA string
widget.Background = new SolidBrush("#FFA500"); // SolidBrush from RGB string
IImage extends IBrush with Size property:
public interface IImage: IBrush
{
Point Size { get; }
}
Widgets properties such as Image.Renderable or TextBox.Cursor have IImage type. Myra provides 2 IImage implementation: TextureRegion and NinePatchRegion.
TextureRegion describes rectangle in the texture. TextureRegion implements IImage. Therefore following code will work:
// 'texture' is object of type Texture2D
image.Renderable = new TextureRegion(texture, new Rectangle(10, 10, 50, 50));
Also following:
// If 2nd parameter is omitted, then TextureRegion covers the whole texture
image.Renderable = new TextureRegion(texture);
_Note. It's also possible to use TextureRegion as IBrush. However usually it wont make much sense, since it would result in the TextureRegion streched over the rectangle IBrush is drawn at.
NinePatchRegion represents region with unstrechable border and strechable center. It could be used following way:
widget.Background = new NinePatchRegion(texture, new Rectangle(10, 10, 50, 50),
new PaddingInfo {Left = 2, Right = 2,
Top = 2, Bottom = 2});
_Note. Since NinePatchRegion is stretchable, it makes a lot of sense to use it as IBrush. In fact all backgrounds of the Myra widgets are NinePatchRegion.
TextureRegionAtlas is collection of texture regions(each could be nine patch) accessible by string key.
It could be serialized to xml with following look: default_ui_skin_atlas.xml
Following code loads it from xml:
// 'xml' is string
TextureRegionAtlas spriteSheet = TextureRegionAtlas.FromXml(xml, UIBitmap);
And following code saves it to xml:
string xml = spriteSheet.ToXml();