Skip to content
Roman Shapiro edited this page Feb 24, 2020 · 23 revisions

Overview

This entry describes in detail how Myra deals with images.

IBrush

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

IImage extends IBrush with Size property:

Myra provides 3 IRenderable implementation: TextureRegion, NinePatchRegion and ColoredRegion.

TextureRegion

TextureRegion describes rectangle in the texture. TextureRegion implements IRenderable. Therefore following code will work:

// 'texture' is object of type Texture2D
widget.Background = 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);

NinePatchRegion

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});

ColoredRegion

ColoredRegion represents TextureRegion and Color. It could be used when one needs to draw single TextureRegion in multiple colors. I.e. following code will work:

widget.Background = new ColoredRegion(textureRegion, Color.Blue);

And following

image.Renderable = new ColoredRegion(ninePatchRegion, Color.Red);

Myra default assets contain white TextureRegion. It could be used if one needs to make solid renderable filled with specified color. I.e. following code will make widget's background violet:

widget.Background = new ColoredRegion(DefaultAssets.WhiteRegion, Color.Violet);

TextureRegionAtlas

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();