1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-17 16:42:53 +08:00
osu-lazer/osu.Game/Graphics/Containers/Markdown/OsuMarkdownListItem.cs
2021-04-30 10:59:23 +07:00

90 lines
2.5 KiB
C#

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Containers.Markdown;
using osuTK;
namespace osu.Game.Graphics.Containers.Markdown
{
public class OsuMarkdownListItem : CompositeDrawable
{
private readonly int level;
private readonly int order;
private readonly bool isOrdered;
private const float ordered_left_padding = 30;
private const float unordered_left_padding = 20;
[Resolved]
private IMarkdownTextComponent parentTextComponent { get; set; }
public FillFlowContainer Content { get; }
public OsuMarkdownListItem(int level, int order)
{
this.level = level;
this.order = order;
isOrdered = order != 0;
AutoSizeAxes = Axes.Y;
RelativeSizeAxes = Axes.X;
Padding = new MarginPadding { Left = isOrdered ? ordered_left_padding : unordered_left_padding };
InternalChildren = new Drawable[]
{
Content = new FillFlowContainer
{
AutoSizeAxes = Axes.Y,
RelativeSizeAxes = Axes.X,
Direction = FillDirection.Vertical,
Spacing = new Vector2(10, 10),
}
};
}
[BackgroundDependencyLoader]
private void load()
{
var marker = parentTextComponent.CreateSpriteText();
marker.Text = createTextMarker();
if (isOrdered)
{
marker.X = -ordered_left_padding;
}
else
{
marker.Font = OsuFont.GetFont(size: marker.Font.Size / 2);
marker.Origin = Anchor.Centre;
marker.X = -unordered_left_padding / 2;
marker.Y = marker.Font.Size;
}
AddInternal(marker);
}
private string createTextMarker()
{
if (isOrdered)
{
return $"{order}.";
}
switch (level)
{
case 1:
return "●";
case 2:
return "○";
default:
return "■";
}
}
}
}