From 92595e43f60aeb8f2c2d4308d2c9235d07bbcaa2 Mon Sep 17 00:00:00 2001 From: Santeri Nogelainen Date: Thu, 14 Mar 2019 21:57:39 +0200 Subject: [PATCH 1/6] slider border thickness --- .../Objects/Drawables/DrawableSlider.cs | 1 + .../Objects/Drawables/Pieces/SliderBody.cs | 35 +++++++++++++++++-- osu.Game/Skinning/LegacySkinDecoder.cs | 4 +++ osu.Game/Skinning/SkinConfiguration.cs | 2 ++ 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 57ea0abdd8..1e7155ced9 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -160,6 +160,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { base.SkinChanged(skin, allowFallback); + Body.BorderSize = skin.GetValue(s => s.SliderBorderSize) ?? Body.BorderSize; Body.AccentColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderTrackOverride") ? s.CustomColours["SliderTrackOverride"] : (Color4?)null) ?? Body.AccentColour; Body.BorderColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderBorder") ? s.CustomColours["SliderBorder"] : (Color4?)null) ?? Body.BorderColour; Ball.AccentColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderBall") ? s.CustomColours["SliderBall"] : (Color4?)null) ?? Ball.AccentColour; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 2f5c326bda..a4b27b2ee9 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -64,6 +64,21 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces } } + /// + /// Used to size the path border. + /// + public int BorderSize { + get => path.BorderSize; + set { + if (path.BorderSize == value) + return; + + path.BorderSize = value; + + container.ForceRedraw(); + } + } + public Quad PathDrawQuad => container.ScreenSpaceDrawQuad; protected SliderBody() @@ -130,12 +145,28 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces } } + private int borderSize = 100; + + public int BorderSize { + get => borderSize; + set { + if (borderSize == value) + return; + + borderSize = value; + + InvalidateTexture(); + } + } + + private float calucatedBorderPortion => BorderSize / 100f * border_portion; + protected override Color4 ColourAt(float position) { - if (position <= border_portion) + if (position <= calucatedBorderPortion) return BorderColour; - position -= border_portion; + position -= calucatedBorderPortion; return new Color4(AccentColour.R, AccentColour.G, AccentColour.B, (opacity_at_edge - (opacity_at_edge - opacity_at_centre) * position / gradient_portion) * AccentColour.A); } } diff --git a/osu.Game/Skinning/LegacySkinDecoder.cs b/osu.Game/Skinning/LegacySkinDecoder.cs index 96a9116c51..50d7191f08 100644 --- a/osu.Game/Skinning/LegacySkinDecoder.cs +++ b/osu.Game/Skinning/LegacySkinDecoder.cs @@ -33,6 +33,10 @@ namespace osu.Game.Skinning case @"CursorExpand": skin.CursorExpand = pair.Value != "0"; break; + case @"SliderBorderSize": + if (int.TryParse(pair.Value, out int size)) + skin.SliderBorderSize = size; + break; } break; diff --git a/osu.Game/Skinning/SkinConfiguration.cs b/osu.Game/Skinning/SkinConfiguration.cs index 82faec4e9d..bd6393db36 100644 --- a/osu.Game/Skinning/SkinConfiguration.cs +++ b/osu.Game/Skinning/SkinConfiguration.cs @@ -25,6 +25,8 @@ namespace osu.Game.Skinning public int HitCircleOverlap { get; set; } + public int? SliderBorderSize { get; set; } + public bool? CursorExpand { get; set; } = true; } } From cbb7498a42d6311b94ca07f939fb72dd0c7ac532 Mon Sep 17 00:00:00 2001 From: Santeri Nogelainen Date: Sat, 16 Mar 2019 12:41:03 +0200 Subject: [PATCH 2/6] Border size to float, add min and max size, other small changes --- .../Objects/Drawables/DrawableSlider.cs | 2 +- .../Objects/Drawables/Pieces/SliderBody.cs | 20 +++++++++++++------ osu.Game/Skinning/LegacySkinDecoder.cs | 4 +++- osu.Game/Skinning/SkinConfiguration.cs | 2 +- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 1e7155ced9..d76612e26d 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -160,7 +160,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { base.SkinChanged(skin, allowFallback); - Body.BorderSize = skin.GetValue(s => s.SliderBorderSize) ?? Body.BorderSize; + Body.BorderSize = skin.GetValue(s => s.SliderBorderSize) ?? Body.BorderSize; Body.AccentColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderTrackOverride") ? s.CustomColours["SliderTrackOverride"] : (Color4?)null) ?? Body.AccentColour; Body.BorderColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderBorder") ? s.CustomColours["SliderBorder"] : (Color4?)null) ?? Body.BorderColour; Ball.AccentColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderBall") ? s.CustomColours["SliderBall"] : (Color4?)null) ?? Ball.AccentColour; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index a4b27b2ee9..9340d32bd9 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -67,7 +67,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces /// /// Used to size the path border. /// - public int BorderSize { + public float BorderSize + { get => path.BorderSize; set { if (path.BorderSize == value) @@ -107,6 +108,9 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces private class SliderPath : SmoothPath { + private const float border_max_size = 10f; + private const float border_min_size = 0f; // = no border + private const float border_portion = 0.128f; private const float gradient_portion = 1 - border_portion; @@ -145,28 +149,32 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces } } - private int borderSize = 100; + private float borderSize = 1f; - public int BorderSize { + public float BorderSize + { get => borderSize; set { if (borderSize == value) return; + if (value < border_min_size || value > border_max_size) + return; + borderSize = value; InvalidateTexture(); } } - private float calucatedBorderPortion => BorderSize / 100f * border_portion; + private float calculatedBorderPortion => BorderSize * border_portion; protected override Color4 ColourAt(float position) { - if (position <= calucatedBorderPortion) + if (calculatedBorderPortion != 0f && position <= calculatedBorderPortion) return BorderColour; - position -= calucatedBorderPortion; + position -= calculatedBorderPortion; return new Color4(AccentColour.R, AccentColour.G, AccentColour.B, (opacity_at_edge - (opacity_at_edge - opacity_at_centre) * position / gradient_portion) * AccentColour.A); } } diff --git a/osu.Game/Skinning/LegacySkinDecoder.cs b/osu.Game/Skinning/LegacySkinDecoder.cs index 50d7191f08..1f530de4fb 100644 --- a/osu.Game/Skinning/LegacySkinDecoder.cs +++ b/osu.Game/Skinning/LegacySkinDecoder.cs @@ -2,6 +2,8 @@ // See the LICENCE file in the repository root for full licence text. using osu.Game.Beatmaps.Formats; +using System; +using System.Globalization; namespace osu.Game.Skinning { @@ -34,7 +36,7 @@ namespace osu.Game.Skinning skin.CursorExpand = pair.Value != "0"; break; case @"SliderBorderSize": - if (int.TryParse(pair.Value, out int size)) + if (Single.TryParse(pair.Value, NumberStyles.Number, CultureInfo.CreateSpecificCulture("en-US"), out float size)) skin.SliderBorderSize = size; break; } diff --git a/osu.Game/Skinning/SkinConfiguration.cs b/osu.Game/Skinning/SkinConfiguration.cs index bd6393db36..043622f8ce 100644 --- a/osu.Game/Skinning/SkinConfiguration.cs +++ b/osu.Game/Skinning/SkinConfiguration.cs @@ -25,7 +25,7 @@ namespace osu.Game.Skinning public int HitCircleOverlap { get; set; } - public int? SliderBorderSize { get; set; } + public float? SliderBorderSize { get; set; } public bool? CursorExpand { get; set; } = true; } From b624ecabde67901b254a67a7037a6f1bb54c1cfe Mon Sep 17 00:00:00 2001 From: Santeri Nogelainen Date: Sat, 16 Mar 2019 12:47:37 +0200 Subject: [PATCH 3/6] Max = 8 --- osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 9340d32bd9..b99f79afcb 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -108,8 +108,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces private class SliderPath : SmoothPath { - private const float border_max_size = 10f; - private const float border_min_size = 0f; // = no border + private const float border_max_size = 8f; + private const float border_min_size = 0f; private const float border_portion = 0.128f; private const float gradient_portion = 1 - border_portion; From 41e13aef239b02b3407ab9fd0094e767d84147ae Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 12 May 2019 22:53:03 +0900 Subject: [PATCH 4/6] Use more standard parsing method --- osu.Game/Skinning/LegacySkinDecoder.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game/Skinning/LegacySkinDecoder.cs b/osu.Game/Skinning/LegacySkinDecoder.cs index f18b10384e..30280e2ffb 100644 --- a/osu.Game/Skinning/LegacySkinDecoder.cs +++ b/osu.Game/Skinning/LegacySkinDecoder.cs @@ -1,4 +1,4 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Game.Beatmaps.Formats; @@ -37,8 +37,7 @@ namespace osu.Game.Skinning skin.CursorExpand = pair.Value != "0"; break; case @"SliderBorderSize": - if (Single.TryParse(pair.Value, NumberStyles.Number, CultureInfo.CreateSpecificCulture("en-US"), out float size)) - skin.SliderBorderSize = size; + skin.SliderBorderSize = Parsing.ParseFloat(pair.Value); break; } From 487a56549efb9097d0cd3ca4245f939b2957138c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 12 May 2019 22:53:12 +0900 Subject: [PATCH 5/6] Fix CI issues --- .../Objects/Drawables/Pieces/SliderBody.cs | 6 ++++-- osu.Game/Skinning/LegacySkinDecoder.cs | 5 ++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index b99f79afcb..83d4e9f453 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -70,7 +70,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces public float BorderSize { get => path.BorderSize; - set { + set + { if (path.BorderSize == value) return; @@ -154,7 +155,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces public float BorderSize { get => borderSize; - set { + set + { if (borderSize == value) return; diff --git a/osu.Game/Skinning/LegacySkinDecoder.cs b/osu.Game/Skinning/LegacySkinDecoder.cs index 30280e2ffb..ecb112955c 100644 --- a/osu.Game/Skinning/LegacySkinDecoder.cs +++ b/osu.Game/Skinning/LegacySkinDecoder.cs @@ -1,9 +1,7 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Game.Beatmaps.Formats; -using System; -using System.Globalization; namespace osu.Game.Skinning { @@ -36,6 +34,7 @@ namespace osu.Game.Skinning case @"CursorExpand": skin.CursorExpand = pair.Value != "0"; break; + case @"SliderBorderSize": skin.SliderBorderSize = Parsing.ParseFloat(pair.Value); break; From daa2786dbd1a91ea95153c90b20ea39056d1f0d1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 12 May 2019 23:08:42 +0900 Subject: [PATCH 6/6] Use a constant for the default value --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs | 2 +- osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 61d41bb246..05cb42d853 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -160,7 +160,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { base.SkinChanged(skin, allowFallback); - Body.BorderSize = skin.GetValue(s => s.SliderBorderSize) ?? 1; + Body.BorderSize = skin.GetValue(s => s.SliderBorderSize) ?? SliderBody.DEFAULT_BORDER_SIZE; Body.AccentColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderTrackOverride") ? s.CustomColours["SliderTrackOverride"] : (Color4?)null) ?? AccentColour; Body.BorderColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderBorder") ? s.CustomColours["SliderBorder"] : (Color4?)null) ?? Color4.White; Ball.AccentColour = skin.GetValue(s => s.CustomColours.ContainsKey("SliderBall") ? s.CustomColours["SliderBall"] : (Color4?)null) ?? AccentColour; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 83d4e9f453..25e1aebd18 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -14,6 +14,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { public abstract class SliderBody : CompositeDrawable { + public const float DEFAULT_BORDER_SIZE = 1; + private readonly SliderPath path; protected Path Path => path; @@ -150,7 +152,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces } } - private float borderSize = 1f; + private float borderSize = DEFAULT_BORDER_SIZE; public float BorderSize {