mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 12:58:33 +01:00
Allow specifying percentage-based padding for a NinePatch
This commit is contained in:
parent
2df9d6a3a8
commit
cc749103e0
4 changed files with 28 additions and 17 deletions
|
@ -24,6 +24,7 @@ Improvements
|
||||||
- Multi-target net452, making MLEM compatible with MonoGame for consoles
|
- Multi-target net452, making MLEM compatible with MonoGame for consoles
|
||||||
- Allow retrieving the cost of a calculated path when using AStar
|
- Allow retrieving the cost of a calculated path when using AStar
|
||||||
- Added trimming and AOT annotations and made MLEM trimmable
|
- Added trimming and AOT annotations and made MLEM trimmable
|
||||||
|
- Allow specifying percentage-based padding for a NinePatch
|
||||||
- **Drastically improved StaticSpriteBatch batching performance**
|
- **Drastically improved StaticSpriteBatch batching performance**
|
||||||
- **Made GenericFont and TokenizedString support UTF-32 characters like emoji**
|
- **Made GenericFont and TokenizedString support UTF-32 characters like emoji**
|
||||||
|
|
||||||
|
|
|
@ -91,8 +91,8 @@ namespace Demos {
|
||||||
TextScale = 0.1F,
|
TextScale = 0.1F,
|
||||||
PanelTexture = new NinePatch(new TextureRegion(tex, 0, 8, 24, 24), 8),
|
PanelTexture = new NinePatch(new TextureRegion(tex, 0, 8, 24, 24), 8),
|
||||||
ButtonTexture = new NinePatch(new TextureRegion(tex, 24, 8, 16, 16), 4),
|
ButtonTexture = new NinePatch(new TextureRegion(tex, 24, 8, 16, 16), 4),
|
||||||
ScrollBarBackground = new NinePatch(new TextureRegion(tex, 12, 0, 4, 8), 1, 1, 2, 2),
|
ScrollBarBackground = new NinePatch(new TextureRegion(tex, 12, 0, 4, 8), 0.25F, paddingPercent: true),
|
||||||
ScrollBarScrollerTexture = new NinePatch(new TextureRegion(tex, 8, 0, 4, 8), 1, 1, 2, 2),
|
ScrollBarScrollerTexture = new NinePatch(new TextureRegion(tex, 8, 0, 4, 8), 0.25F, paddingPercent: true),
|
||||||
LinkColor = Color.CornflowerBlue
|
LinkColor = Color.CornflowerBlue
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,6 +95,13 @@ namespace MLEM.Misc {
|
||||||
return new Padding(p.Left * scale, p.Right * scale, p.Top * scale, p.Bottom * scale);
|
return new Padding(p.Left * scale, p.Right * scale, p.Top * scale, p.Bottom * scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Scales a padding by a <see cref="Vector2"/>.
|
||||||
|
/// </summary>
|
||||||
|
public static Padding operator *(Padding p, Vector2 scale) {
|
||||||
|
return new Padding(p.Left * scale.X, p.Right * scale.X, p.Top * scale.Y, p.Bottom * scale.Y);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds two paddings together in a memberwise fashion.
|
/// Adds two paddings together in a memberwise fashion.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace MLEM.Textures {
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly TextureRegion Region;
|
public readonly TextureRegion Region;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The padding in each direction that marks where the outline area stops
|
/// The padding in each direction that marks where the outline area stops, in pixels
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly Padding Padding;
|
public readonly Padding Padding;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -33,11 +33,12 @@ namespace MLEM.Textures {
|
||||||
/// Creates a new nine patch from a texture and a padding
|
/// Creates a new nine patch from a texture and a padding
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="texture">The texture to use</param>
|
/// <param name="texture">The texture to use</param>
|
||||||
/// <param name="padding">The padding that marks where the outline area stops</param>
|
/// <param name="padding">The padding that marks where the outline area stops in pixels, or as a percentage if <paramref name="paddingPercent"/> is <see langword="true"/></param>
|
||||||
/// <param name="mode">The mode to use for drawing this nine patch, defaults to <see cref="NinePatchMode.Stretch"/></param>
|
/// <param name="mode">The mode to use for drawing this nine patch, defaults to <see cref="NinePatchMode.Stretch"/></param>
|
||||||
public NinePatch(TextureRegion texture, Padding padding, NinePatchMode mode = NinePatchMode.Stretch) {
|
/// <param name="paddingPercent">Whether the padding should represent a percentage of the underlying <paramref name="texture"/>'s size, rather than an absolute pixel amount</param>
|
||||||
|
public NinePatch(TextureRegion texture, Padding padding, NinePatchMode mode = NinePatchMode.Stretch, bool paddingPercent = false) {
|
||||||
this.Region = texture;
|
this.Region = texture;
|
||||||
this.Padding = padding;
|
this.Padding = paddingPercent ? padding * texture.Size.ToVector2() : padding;
|
||||||
this.Mode = mode;
|
this.Mode = mode;
|
||||||
this.SourceRectangles = new Rectangle[9];
|
this.SourceRectangles = new Rectangle[9];
|
||||||
for (var i = 0; i < this.SourceRectangles.Length; i++)
|
for (var i = 0; i < this.SourceRectangles.Length; i++)
|
||||||
|
@ -48,26 +49,28 @@ namespace MLEM.Textures {
|
||||||
/// Creates a new nine patch from a texture and a padding
|
/// Creates a new nine patch from a texture and a padding
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="texture">The texture to use</param>
|
/// <param name="texture">The texture to use</param>
|
||||||
/// <param name="paddingLeft">The padding on the left edge</param>
|
/// <param name="paddingLeft">The padding on the left edge in pixels, or as a percentage if <paramref name="paddingPercent"/> is <see langword="true"/></param>
|
||||||
/// <param name="paddingRight">The padding on the right edge</param>
|
/// <param name="paddingRight">The padding on the right edge in pixels, or as a percentage if <paramref name="paddingPercent"/> is <see langword="true"/></param>
|
||||||
/// <param name="paddingTop">The padding on the top edge</param>
|
/// <param name="paddingTop">The padding on the top edge in pixels, or as a percentage if <paramref name="paddingPercent"/> is <see langword="true"/></param>
|
||||||
/// <param name="paddingBottom">The padding on the bottom edge</param>
|
/// <param name="paddingBottom">The padding on the bottom edge in pixels, or as a percentage if <paramref name="paddingPercent"/> is <see langword="true"/></param>
|
||||||
/// <param name="mode">The mode to use for drawing this nine patch, defaults to <see cref="NinePatchMode.Stretch"/></param>
|
/// <param name="mode">The mode to use for drawing this nine patch, defaults to <see cref="NinePatchMode.Stretch"/></param>
|
||||||
public NinePatch(TextureRegion texture, int paddingLeft, int paddingRight, int paddingTop, int paddingBottom, NinePatchMode mode = NinePatchMode.Stretch) : this(texture, new Padding(paddingLeft, paddingRight, paddingTop, paddingBottom), mode) {}
|
/// <param name="paddingPercent">Whether the padding should represent a percentage of the underlying <paramref name="texture"/>'s size, rather than an absolute pixel amount</param>
|
||||||
|
public NinePatch(TextureRegion texture, float paddingLeft, float paddingRight, float paddingTop, float paddingBottom, NinePatchMode mode = NinePatchMode.Stretch, bool paddingPercent = false) : this(texture, new Padding(paddingLeft, paddingRight, paddingTop, paddingBottom), mode, paddingPercent) {}
|
||||||
|
|
||||||
/// <inheritdoc cref="NinePatch(TextureRegion, int, int, int, int, NinePatchMode)"/>
|
/// <inheritdoc cref="NinePatch(TextureRegion, float, float, float, float, NinePatchMode, bool)"/>
|
||||||
public NinePatch(Texture2D texture, int paddingLeft, int paddingRight, int paddingTop, int paddingBottom, NinePatchMode mode = NinePatchMode.Stretch) : this(new TextureRegion(texture), paddingLeft, paddingRight, paddingTop, paddingBottom, mode) {}
|
public NinePatch(Texture2D texture, float paddingLeft, float paddingRight, float paddingTop, float paddingBottom, NinePatchMode mode = NinePatchMode.Stretch, bool paddingPercent = false) : this(new TextureRegion(texture), paddingLeft, paddingRight, paddingTop, paddingBottom, mode, paddingPercent) {}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new nine patch from a texture and a uniform padding
|
/// Creates a new nine patch from a texture and a uniform padding
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="texture">The texture to use</param>
|
/// <param name="texture">The texture to use</param>
|
||||||
/// <param name="padding">The padding that each edge should have</param>
|
/// <param name="padding">The padding that each edge should have in pixels, or as a percentage if <paramref name="paddingPercent"/> is <see langword="true"/></param>
|
||||||
/// <param name="mode">The mode to use for drawing this nine patch, defaults to <see cref="NinePatchMode.Stretch"/></param>
|
/// <param name="mode">The mode to use for drawing this nine patch, defaults to <see cref="NinePatchMode.Stretch"/></param>
|
||||||
public NinePatch(Texture2D texture, int padding, NinePatchMode mode = NinePatchMode.Stretch) : this(new TextureRegion(texture), padding, mode) {}
|
/// <param name="paddingPercent">Whether the padding should represent a percentage of the underlying <paramref name="texture"/>'s size, rather than an absolute pixel amount</param>
|
||||||
|
public NinePatch(Texture2D texture, float padding, NinePatchMode mode = NinePatchMode.Stretch, bool paddingPercent = false) : this(new TextureRegion(texture), padding, mode, paddingPercent) {}
|
||||||
|
|
||||||
/// <inheritdoc cref="NinePatch(TextureRegion, int, NinePatchMode)"/>
|
/// <inheritdoc cref="NinePatch(TextureRegion, float, NinePatchMode, bool)"/>
|
||||||
public NinePatch(TextureRegion texture, int padding, NinePatchMode mode = NinePatchMode.Stretch) : this(texture, padding, padding, padding, padding, mode) {}
|
public NinePatch(TextureRegion texture, float padding, NinePatchMode mode = NinePatchMode.Stretch, bool paddingPercent = false) : this(texture, padding, padding, padding, padding, mode, paddingPercent) {}
|
||||||
|
|
||||||
internal RectangleF GetRectangleForIndex(RectangleF area, int index, float patchScale = 1) {
|
internal RectangleF GetRectangleForIndex(RectangleF area, int index, float patchScale = 1) {
|
||||||
var pl = this.Padding.Left * patchScale;
|
var pl = this.Padding.Left * patchScale;
|
||||||
|
|
Loading…
Reference in a new issue