1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-17 20:32:56 +08:00
osu-lazer/osu.Game/Graphics/Containers/Markdown/OsuMarkdownListItem.cs

91 lines
2.5 KiB
C#
Raw Normal View History

2021-04-30 10:43:05 +08:00
// 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 Markdig.Syntax;
using osu.Framework.Allocation;
2021-04-30 10:43:05 +08:00
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Containers.Markdown;
2021-04-30 10:43:05 +08:00
using osuTK;
namespace osu.Game.Graphics.Containers.Markdown
{
public class OsuMarkdownListItem : CompositeDrawable
2021-04-30 10:43:05 +08:00
{
2021-05-06 06:13:39 +08:00
private const float ordered_left_padding = 30;
private const float unordered_left_padding = 20;
2021-04-30 11:39:48 +08:00
private readonly int level;
private readonly int order;
private readonly bool isOrdered;
[Resolved]
private IMarkdownTextComponent parentTextComponent { get; set; }
public FillFlowContainer Content { get; }
public OsuMarkdownListItem(ListItemBlock listItemBlock, int level)
2021-04-30 10:43:05 +08:00
{
2021-04-30 11:39:48 +08:00
this.level = level;
2021-05-06 06:13:54 +08:00
order = listItemBlock.Order;
isOrdered = ((ListBlock)listItemBlock.Parent).IsOrdered;
2021-04-30 11:39:48 +08:00
2021-04-30 10:43:05 +08:00
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),
}
};
2021-04-30 10:43:05 +08:00
}
[BackgroundDependencyLoader]
private void load()
{
var marker = parentTextComponent.CreateSpriteText();
marker.Text = GetTextMarker();
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);
}
2021-04-30 11:40:06 +08:00
protected virtual string GetTextMarker()
2021-04-30 11:40:06 +08:00
{
if (isOrdered)
{
return $"{order}.";
}
2021-04-30 11:40:06 +08:00
switch (level)
{
case 1:
return "●";
case 2:
return "○";
default:
return "■";
}
}
2021-04-30 10:43:05 +08:00
}
}