mirror of
https://github.com/SK-la/osu-framework.git
synced 2026-03-13 11:20:31 +00:00
220 lines
7.8 KiB
C#
220 lines
7.8 KiB
C#
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu-framework/master/LICENCE
|
|
|
|
using System.Globalization;
|
|
using osu.Framework.Graphics;
|
|
using osu.Framework.Graphics.Containers;
|
|
using osu.Framework.Graphics.Shapes;
|
|
using osu.Framework.Graphics.Sprites;
|
|
using osu.Framework.Testing;
|
|
using OpenTK;
|
|
using OpenTK.Graphics;
|
|
|
|
namespace osu.Framework.Tests.Visual
|
|
{
|
|
public class TestCaseCoordinateSpaces : TestCase
|
|
{
|
|
public TestCaseCoordinateSpaces()
|
|
{
|
|
AddStep("0-1 space", () => loadCase(0));
|
|
AddStep("0-150 space", () => loadCase(1));
|
|
AddStep("50-200 space", () => loadCase(2));
|
|
AddStep("150-(-50) space", () => loadCase(3));
|
|
AddStep("0-300 space", () => loadCase(4));
|
|
AddStep("-250-250 space", () => loadCase(5));
|
|
}
|
|
|
|
private void loadCase(int i)
|
|
{
|
|
Clear();
|
|
|
|
HorizontalVisualiser h;
|
|
Add(h = new HorizontalVisualiser
|
|
{
|
|
Size = new Vector2(200, 50),
|
|
X = 150
|
|
});
|
|
|
|
switch (i)
|
|
{
|
|
case 0:
|
|
h.CreateMarkerAt(-0.1f);
|
|
h.CreateMarkerAt(0);
|
|
h.CreateMarkerAt(0.1f);
|
|
h.CreateMarkerAt(0.3f);
|
|
h.CreateMarkerAt(0.7f);
|
|
h.CreateMarkerAt(0.9f);
|
|
h.CreateMarkerAt(1f);
|
|
h.CreateMarkerAt(1.1f);
|
|
break;
|
|
case 1:
|
|
h.RelativeChildSize = new Vector2(150, 1);
|
|
h.CreateMarkerAt(0);
|
|
h.CreateMarkerAt(50);
|
|
h.CreateMarkerAt(100);
|
|
h.CreateMarkerAt(150);
|
|
h.CreateMarkerAt(200);
|
|
h.CreateMarkerAt(250);
|
|
break;
|
|
case 2:
|
|
h.RelativeChildOffset = new Vector2(50, 0);
|
|
h.RelativeChildSize = new Vector2(150, 1);
|
|
h.CreateMarkerAt(0);
|
|
h.CreateMarkerAt(50);
|
|
h.CreateMarkerAt(100);
|
|
h.CreateMarkerAt(150);
|
|
h.CreateMarkerAt(200);
|
|
h.CreateMarkerAt(250);
|
|
break;
|
|
case 3:
|
|
h.RelativeChildOffset = new Vector2(150, 0);
|
|
h.RelativeChildSize = new Vector2(-200, 1);
|
|
h.CreateMarkerAt(0);
|
|
h.CreateMarkerAt(50);
|
|
h.CreateMarkerAt(100);
|
|
h.CreateMarkerAt(150);
|
|
h.CreateMarkerAt(200);
|
|
h.CreateMarkerAt(250);
|
|
break;
|
|
case 4:
|
|
h.RelativeChildOffset = new Vector2(0, 0);
|
|
h.RelativeChildSize = new Vector2(300, 1);
|
|
h.CreateMarkerAt(0);
|
|
h.CreateMarkerAt(50);
|
|
h.CreateMarkerAt(100);
|
|
h.CreateMarkerAt(150);
|
|
h.CreateMarkerAt(200);
|
|
h.CreateMarkerAt(250);
|
|
break;
|
|
case 5:
|
|
h.RelativeChildOffset = new Vector2(-250, 0);
|
|
h.RelativeChildSize = new Vector2(500, 1);
|
|
h.CreateMarkerAt(-300);
|
|
h.CreateMarkerAt(-200);
|
|
h.CreateMarkerAt(-100);
|
|
h.CreateMarkerAt(0);
|
|
h.CreateMarkerAt(100);
|
|
h.CreateMarkerAt(200);
|
|
h.CreateMarkerAt(300);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private class HorizontalVisualiser : Visualiser
|
|
{
|
|
protected override void Update()
|
|
{
|
|
base.Update();
|
|
|
|
Left.Text = $"X = {RelativeChildOffset.X.ToString(CultureInfo.InvariantCulture)}";
|
|
Right.Text = $"X = {(RelativeChildOffset.X + RelativeChildSize.X).ToString(CultureInfo.InvariantCulture)}";
|
|
}
|
|
}
|
|
|
|
private abstract class Visualiser : Container
|
|
{
|
|
public new Vector2 RelativeChildSize
|
|
{
|
|
protected get { return innerContainer.RelativeChildSize; }
|
|
set { innerContainer.RelativeChildSize = value; }
|
|
}
|
|
|
|
public new Vector2 RelativeChildOffset
|
|
{
|
|
protected get { return innerContainer.RelativeChildOffset; }
|
|
set { innerContainer.RelativeChildOffset = value; }
|
|
}
|
|
|
|
private readonly Container innerContainer;
|
|
|
|
protected readonly SpriteText Left;
|
|
protected readonly SpriteText Right;
|
|
|
|
protected Visualiser()
|
|
{
|
|
Height = 50;
|
|
|
|
InternalChildren = new Drawable[]
|
|
{
|
|
new Box
|
|
{
|
|
Name = "Left marker",
|
|
Colour = Color4.Gray,
|
|
RelativeSizeAxes = Axes.Y,
|
|
},
|
|
Left = new SpriteText
|
|
{
|
|
Anchor = Anchor.BottomLeft,
|
|
Origin = Anchor.TopCentre,
|
|
Y = 6
|
|
},
|
|
new Box
|
|
{
|
|
Name = "Centre line",
|
|
Anchor = Anchor.CentreLeft,
|
|
Origin = Anchor.CentreLeft,
|
|
Colour = Color4.Gray,
|
|
RelativeSizeAxes = Axes.X
|
|
},
|
|
innerContainer = new Container
|
|
{
|
|
RelativeSizeAxes = Axes.Both
|
|
},
|
|
new Box
|
|
{
|
|
Name = "Right marker",
|
|
Anchor = Anchor.TopRight,
|
|
Origin = Anchor.TopRight,
|
|
Colour = Color4.Gray,
|
|
RelativeSizeAxes = Axes.Y
|
|
},
|
|
Right = new SpriteText
|
|
{
|
|
Anchor = Anchor.BottomRight,
|
|
Origin = Anchor.TopCentre,
|
|
Y = 6
|
|
},
|
|
};
|
|
}
|
|
|
|
public void CreateMarkerAt(float x)
|
|
{
|
|
innerContainer.Add(new Container
|
|
{
|
|
Anchor = Anchor.CentreLeft,
|
|
Origin = Anchor.Centre,
|
|
RelativePositionAxes = Axes.Both,
|
|
AutoSizeAxes = Axes.Both,
|
|
X = x,
|
|
Colour = Color4.Yellow,
|
|
Children = new Drawable[]
|
|
{
|
|
new Box
|
|
{
|
|
Name = "Centre marker horizontal",
|
|
Anchor = Anchor.Centre,
|
|
Origin = Anchor.Centre,
|
|
Size = new Vector2(8, 1)
|
|
},
|
|
new Box
|
|
{
|
|
Name = "Centre marker vertical",
|
|
Anchor = Anchor.Centre,
|
|
Origin = Anchor.Centre,
|
|
Size = new Vector2(1, 8)
|
|
},
|
|
new SpriteText
|
|
{
|
|
Anchor = Anchor.BottomCentre,
|
|
Origin = Anchor.TopCentre,
|
|
Y = 6,
|
|
BypassAutoSizeAxes = Axes.Both,
|
|
Text = x.ToString(CultureInfo.InvariantCulture)
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|