From 241b5130006cb289441a2e4706cfaa08ec3c2989 Mon Sep 17 00:00:00 2001 From: andy840119 Date: Sat, 30 Apr 2022 20:48:51 +0800 Subject: [PATCH 1/2] Add the base test case for testing position for those type of shaders. - No shader. - Outline shader(with different size). - Shadow shader(with different size). - Outline and shadow shader(with different size). --- .../TestSceneKaraokeSpriteTextTransforms.cs | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 osu.Framework.Font.Tests/Visual/Sprites/TestSceneKaraokeSpriteTextTransforms.cs diff --git a/osu.Framework.Font.Tests/Visual/Sprites/TestSceneKaraokeSpriteTextTransforms.cs b/osu.Framework.Font.Tests/Visual/Sprites/TestSceneKaraokeSpriteTextTransforms.cs new file mode 100644 index 0000000..546591f --- /dev/null +++ b/osu.Framework.Font.Tests/Visual/Sprites/TestSceneKaraokeSpriteTextTransforms.cs @@ -0,0 +1,201 @@ +// Copyright (c) karaoke.dev . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; +using osu.Framework.Extensions; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Font.Tests.Helper; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Shaders; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Timing; +using osuTK; +using osuTK.Graphics; + +namespace osu.Framework.Font.Tests.Visual.Sprites +{ + public class TestSceneKaraokeSpriteTextTransforms : BackgroundGridTestScene + { + private const string left_text_color = "#FFDD77"; + private const string left_outline_color = "#CCA532"; + private const string left_shadow_color = "#6B5B2D"; + + private const string right_text_color = "#AA88FF"; + private const string right_outline_color = "#5932CC"; + private const string right_shadow_color = "#3D2D6B"; + + private const double start_time = 1000; + private const double end_time = 5000; + private const double exrea_time = 500; + + private readonly ManualClock manualClock = new(); + private readonly TestKaraokeSpriteText karaokeSpriteText; + + public TestSceneKaraokeSpriteTextTransforms() + { + Child = karaokeSpriteText = new TestKaraokeSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + LeftTextColour = Color4Extensions.FromHex(left_text_color), + RightTextColour = Color4Extensions.FromHex(right_text_color), + Clock = new FramedClock(manualClock), + Scale = new Vector2(2), + }; + + AddLabel("Load lyric"); + + AddStep("Single character", () => + { + karaokeSpriteText.Text = "カ"; + karaokeSpriteText.TimeTags = TestCaseTagHelper.ParseTimeTags(new[] { $"[0,start]:{start_time}", $"[0,end]:{end_time}" }); + karaokeSpriteText.Font = FontUsage.Default.With(size: 120); + }); + + AddStep("Multiple character", () => + { + karaokeSpriteText.Text = "カラオケ"; + karaokeSpriteText.TimeTags = TestCaseTagHelper.ParseTimeTags(new[] { $"[0,start]:{start_time}", "[1,start]:2000", "[2,start]:3000", "[3,start]:4000", $"[3,end]:{end_time}" }); + karaokeSpriteText.Font = FontUsage.Default.With(size: 60); + }); + + AddLabel("Timing"); + + AddSliderStep("Adjust clock time", 0, end_time + exrea_time, start_time - exrea_time, time => + { + manualClock.CurrentTime = time; + }); + + AddStep("Move to start time", () => + { + manualClock.CurrentTime = start_time; + }); + + AddStep("Move to end time", () => + { + manualClock.CurrentTime = end_time; + }); + } + + [Test] + public void TestNoneShader() + { + AddStep("Clear shader", () => + { + karaokeSpriteText.LeftTextColour = Color4Extensions.FromHex(left_text_color); + karaokeSpriteText.RightTextColour = Color4Extensions.FromHex(right_text_color); + karaokeSpriteText.LeftLyricTextShaders = null; + karaokeSpriteText.RightLyricTextShaders = null; + }); + } + + [Test] + public void TestApplyOutlineShader() + { + AddStep("Apply shader", () => + { + karaokeSpriteText.LeftTextColour = Color4.White; + karaokeSpriteText.RightTextColour = Color4.White; + karaokeSpriteText.LeftLyricTextShaders = new[] + { + GetShaderByType().With(s => + { + s.Radius = 10; + s.Colour = Color4Extensions.FromHex(left_text_color); + s.OutlineColour = Color4Extensions.FromHex(left_outline_color); + }) + }; + karaokeSpriteText.RightLyricTextShaders = new[] + { + GetShaderByType().With(s => + { + s.Radius = 10; + s.Colour = Color4Extensions.FromHex(right_text_color); + s.OutlineColour = Color4Extensions.FromHex(right_outline_color); + }) + }; + }); + } + + [Test] + public void TestApplyShadowShader() + { + AddStep("Apply shadow", () => + { + karaokeSpriteText.LeftTextColour = Color4Extensions.FromHex(left_text_color); + karaokeSpriteText.RightTextColour = Color4Extensions.FromHex(right_text_color); + karaokeSpriteText.LeftLyricTextShaders = new[] + { + GetShaderByType().With(s => + { + s.ShadowOffset = new Vector2(10); + s.ShadowColour = Color4Extensions.FromHex(left_shadow_color); + }) + }; + karaokeSpriteText.RightLyricTextShaders = new[] + { + GetShaderByType().With(s => + { + s.ShadowOffset = new Vector2(10); + s.ShadowColour = Color4Extensions.FromHex(right_shadow_color); + }) + }; + }); + } + + [Test] + public void TestApplyOutlineAndShadowShader() + { + AddStep("Apply shader", () => + { + karaokeSpriteText.LeftTextColour = Color4.White; + karaokeSpriteText.RightTextColour = Color4.White; + karaokeSpriteText.LeftLyricTextShaders = new[] + { + new StepShader + { + StepShaders = new ICustomizedShader[] + { + GetShaderByType().With(s => + { + s.Radius = 10; + s.Colour = Color4Extensions.FromHex(left_text_color); + s.OutlineColour = Color4Extensions.FromHex(left_outline_color); + }), + GetShaderByType().With(s => + { + s.ShadowOffset = new Vector2(10); + s.ShadowColour = Color4Extensions.FromHex(left_shadow_color); + }) + } + } + }; + karaokeSpriteText.RightLyricTextShaders = new[] + { + new StepShader + { + StepShaders = new ICustomizedShader[] + { + GetShaderByType().With(s => + { + s.Radius = 10; + s.Colour = Color4Extensions.FromHex(right_text_color); + s.OutlineColour = Color4Extensions.FromHex(right_outline_color); + }), + GetShaderByType().With(s => + { + s.ShadowOffset = new Vector2(10); + s.ShadowColour = Color4Extensions.FromHex(right_shadow_color); + }) + } + } + }; + }); + } + + private class TestKaraokeSpriteText : KaraokeSpriteText + { + public override bool RemoveCompletedTransforms => false; + } + } +} From d900cbbc31917e51b9ab492a361399f646af0c4a Mon Sep 17 00:00:00 2001 From: andy840119 Date: Sat, 30 Apr 2022 21:18:21 +0800 Subject: [PATCH 2/2] add test case for different sizing. --- .../TestSceneKaraokeSpriteTextTransforms.cs | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/osu.Framework.Font.Tests/Visual/Sprites/TestSceneKaraokeSpriteTextTransforms.cs b/osu.Framework.Font.Tests/Visual/Sprites/TestSceneKaraokeSpriteTextTransforms.cs index 546591f..c97ef3b 100644 --- a/osu.Framework.Font.Tests/Visual/Sprites/TestSceneKaraokeSpriteTextTransforms.cs +++ b/osu.Framework.Font.Tests/Visual/Sprites/TestSceneKaraokeSpriteTextTransforms.cs @@ -24,6 +24,9 @@ public class TestSceneKaraokeSpriteTextTransforms : BackgroundGridTestScene private const string right_outline_color = "#5932CC"; private const string right_shadow_color = "#3D2D6B"; + private const int outline_radius = 10; + private const int shadow_sizing = 10; + private const double start_time = 1000; private const double end_time = 5000; private const double exrea_time = 500; @@ -89,10 +92,11 @@ public void TestNoneShader() }); } - [Test] - public void TestApplyOutlineShader() + [TestCase(false)] + [TestCase(true)] + public void TestApplyOutlineShader(bool differentSizing) { - AddStep("Apply shader", () => + AddStep(getApplyDescription(differentSizing), () => { karaokeSpriteText.LeftTextColour = Color4.White; karaokeSpriteText.RightTextColour = Color4.White; @@ -100,7 +104,7 @@ public void TestApplyOutlineShader() { GetShaderByType().With(s => { - s.Radius = 10; + s.Radius = outline_radius; s.Colour = Color4Extensions.FromHex(left_text_color); s.OutlineColour = Color4Extensions.FromHex(left_outline_color); }) @@ -109,7 +113,7 @@ public void TestApplyOutlineShader() { GetShaderByType().With(s => { - s.Radius = 10; + s.Radius = differentSizing ? outline_radius * 2 : outline_radius; s.Colour = Color4Extensions.FromHex(right_text_color); s.OutlineColour = Color4Extensions.FromHex(right_outline_color); }) @@ -117,10 +121,11 @@ public void TestApplyOutlineShader() }); } - [Test] - public void TestApplyShadowShader() + [TestCase(false)] + [TestCase(true)] + public void TestApplyShadowShader(bool differentSizing) { - AddStep("Apply shadow", () => + AddStep(getApplyDescription(differentSizing), () => { karaokeSpriteText.LeftTextColour = Color4Extensions.FromHex(left_text_color); karaokeSpriteText.RightTextColour = Color4Extensions.FromHex(right_text_color); @@ -128,7 +133,7 @@ public void TestApplyShadowShader() { GetShaderByType().With(s => { - s.ShadowOffset = new Vector2(10); + s.ShadowOffset = new Vector2(shadow_sizing); s.ShadowColour = Color4Extensions.FromHex(left_shadow_color); }) }; @@ -136,17 +141,18 @@ public void TestApplyShadowShader() { GetShaderByType().With(s => { - s.ShadowOffset = new Vector2(10); + s.ShadowOffset = new Vector2(differentSizing ? shadow_sizing * 2 : shadow_sizing); s.ShadowColour = Color4Extensions.FromHex(right_shadow_color); }) }; }); } - [Test] - public void TestApplyOutlineAndShadowShader() + [TestCase(false)] + [TestCase(true)] + public void TestApplyOutlineAndShadowShader(bool differentSizing) { - AddStep("Apply shader", () => + AddStep(getApplyDescription(differentSizing), () => { karaokeSpriteText.LeftTextColour = Color4.White; karaokeSpriteText.RightTextColour = Color4.White; @@ -158,13 +164,13 @@ public void TestApplyOutlineAndShadowShader() { GetShaderByType().With(s => { - s.Radius = 10; + s.Radius = outline_radius; s.Colour = Color4Extensions.FromHex(left_text_color); s.OutlineColour = Color4Extensions.FromHex(left_outline_color); }), GetShaderByType().With(s => { - s.ShadowOffset = new Vector2(10); + s.ShadowOffset = new Vector2(shadow_sizing); s.ShadowColour = Color4Extensions.FromHex(left_shadow_color); }) } @@ -178,13 +184,13 @@ public void TestApplyOutlineAndShadowShader() { GetShaderByType().With(s => { - s.Radius = 10; + s.Radius = differentSizing ? outline_radius * 2 : outline_radius; s.Colour = Color4Extensions.FromHex(right_text_color); s.OutlineColour = Color4Extensions.FromHex(right_outline_color); }), GetShaderByType().With(s => { - s.ShadowOffset = new Vector2(10); + s.ShadowOffset = new Vector2(differentSizing ? shadow_sizing * 2 : shadow_sizing); s.ShadowColour = Color4Extensions.FromHex(right_shadow_color); }) } @@ -193,6 +199,9 @@ public void TestApplyOutlineAndShadowShader() }); } + private string getApplyDescription(bool applyDifferentSizing) + => applyDifferentSizing ? "Apply shader with different sizing" : "Apply shader"; + private class TestKaraokeSpriteText : KaraokeSpriteText { public override bool RemoveCompletedTransforms => false;