From cb1513b37466189fad1044a429a80516200a12a1 Mon Sep 17 00:00:00 2001
From: smoogipoo <smoogipoo@smgi.me>
Date: Tue, 31 Mar 2020 11:23:33 +0900
Subject: [PATCH 1/4] Add mania key area skinning

---
 .../Skinning/TestSceneKeyArea.cs              |  58 ++++++++
 .../TestSceneColumn.cs                        |   1 -
 osu.Game.Rulesets.Mania/ManiaSkinComponent.cs |   1 +
 .../Skinning/LegacyKeyArea.cs                 | 113 ++++++++++++++++
 .../Skinning/ManiaLegacySkinTransformer.cs    |   8 +-
 osu.Game.Rulesets.Mania/UI/Column.cs          |  10 +-
 .../UI/Components/ColumnKeyArea.cs            | 124 ------------------
 .../UI/Components/DefaultKeyArea.cs           | 114 ++++++++++++++++
 .../LegacyManiaSkinConfigurationLookup.cs     |   2 +
 9 files changed, 298 insertions(+), 133 deletions(-)
 create mode 100644 osu.Game.Rulesets.Mania.Tests/Skinning/TestSceneKeyArea.cs
 create mode 100644 osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs
 delete mode 100644 osu.Game.Rulesets.Mania/UI/Components/ColumnKeyArea.cs
 create mode 100644 osu.Game.Rulesets.Mania/UI/Components/DefaultKeyArea.cs

diff --git a/osu.Game.Rulesets.Mania.Tests/Skinning/TestSceneKeyArea.cs b/osu.Game.Rulesets.Mania.Tests/Skinning/TestSceneKeyArea.cs
new file mode 100644
index 0000000000..1e6f00205a
--- /dev/null
+++ b/osu.Game.Rulesets.Mania.Tests/Skinning/TestSceneKeyArea.cs
@@ -0,0 +1,58 @@
+// 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 System;
+using System.Collections.Generic;
+using osu.Framework.Allocation;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
+using osu.Game.Rulesets.Mania.Skinning;
+using osu.Game.Rulesets.Mania.UI.Components;
+using osu.Game.Skinning;
+using osuTK;
+
+namespace osu.Game.Rulesets.Mania.Tests.Skinning
+{
+    public class TestSceneKeyArea : ManiaSkinnableTestScene
+    {
+        public override IReadOnlyList<Type> RequiredTypes => new[]
+        {
+            typeof(DefaultKeyArea),
+            typeof(LegacyKeyArea)
+        };
+
+        [BackgroundDependencyLoader]
+        private void load()
+        {
+            SetContents(() => new FillFlowContainer
+            {
+                Anchor = Anchor.Centre,
+                Origin = Anchor.Centre,
+                RelativeSizeAxes = Axes.Both,
+                Size = new Vector2(0.8f),
+                Direction = FillDirection.Horizontal,
+                Children = new Drawable[]
+                {
+                    new ColumnTestContainer(0, ManiaAction.Key1)
+                    {
+                        RelativeSizeAxes = Axes.Both,
+                        Width = 0.5f,
+                        Child = new SkinnableDrawable(new ManiaSkinComponent(ManiaSkinComponents.KeyArea), _ => new DefaultKeyArea())
+                        {
+                            RelativeSizeAxes = Axes.Both
+                        },
+                    },
+                    new ColumnTestContainer(1, ManiaAction.Key2)
+                    {
+                        RelativeSizeAxes = Axes.Both,
+                        Width = 0.5f,
+                        Child = new SkinnableDrawable(new ManiaSkinComponent(ManiaSkinComponents.KeyArea), _ => new DefaultKeyArea())
+                        {
+                            RelativeSizeAxes = Axes.Both
+                        },
+                    },
+                }
+            });
+        }
+    }
+}
diff --git a/osu.Game.Rulesets.Mania.Tests/TestSceneColumn.cs b/osu.Game.Rulesets.Mania.Tests/TestSceneColumn.cs
index d94a986dae..9aad08c433 100644
--- a/osu.Game.Rulesets.Mania.Tests/TestSceneColumn.cs
+++ b/osu.Game.Rulesets.Mania.Tests/TestSceneColumn.cs
@@ -28,7 +28,6 @@ namespace osu.Game.Rulesets.Mania.Tests
         {
             typeof(Column),
             typeof(ColumnBackground),
-            typeof(ColumnKeyArea),
             typeof(ColumnHitObjectArea)
         };
 
diff --git a/osu.Game.Rulesets.Mania/ManiaSkinComponent.cs b/osu.Game.Rulesets.Mania/ManiaSkinComponent.cs
index 5340ebc01f..da5993ef26 100644
--- a/osu.Game.Rulesets.Mania/ManiaSkinComponent.cs
+++ b/osu.Game.Rulesets.Mania/ManiaSkinComponent.cs
@@ -19,5 +19,6 @@ namespace osu.Game.Rulesets.Mania
 
     public enum ManiaSkinComponents
     {
+        KeyArea
     }
 }
diff --git a/osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs b/osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs
new file mode 100644
index 0000000000..8a57953d60
--- /dev/null
+++ b/osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs
@@ -0,0 +1,113 @@
+// 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.Bindables;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
+using osu.Framework.Graphics.Sprites;
+using osu.Framework.Input.Bindings;
+using osu.Game.Rulesets.Mania.UI;
+using osu.Game.Rulesets.UI.Scrolling;
+using osu.Game.Skinning;
+using osuTK;
+
+namespace osu.Game.Rulesets.Mania.Skinning
+{
+    public class LegacyKeyArea : CompositeDrawable, IKeyBindingHandler<ManiaAction>
+    {
+        private readonly IBindable<ScrollingDirection> direction = new Bindable<ScrollingDirection>();
+
+        private Container directionContainer;
+        private Sprite upSprite;
+        private Sprite downSprite;
+
+        [Resolved(CanBeNull = true)]
+        private ManiaStage stage { get; set; }
+
+        [Resolved]
+        private Column column { get; set; }
+
+        public LegacyKeyArea()
+        {
+            RelativeSizeAxes = Axes.Both;
+        }
+
+        [BackgroundDependencyLoader]
+        private void load(ISkinSource skin, IScrollingInfo scrollingInfo)
+        {
+            int fallbackColumn = column.Index % 2 + 1;
+
+            string upImage = skin.GetConfig<LegacyManiaSkinConfigurationLookup, string>(
+                                 new LegacyManiaSkinConfigurationLookup(stage?.Columns.Count ?? 4, LegacyManiaSkinConfigurationLookups.KeyImage, column.Index))?.Value
+                             ?? $"mania-key{fallbackColumn}";
+
+            string downImage = skin.GetConfig<LegacyManiaSkinConfigurationLookup, string>(
+                                   new LegacyManiaSkinConfigurationLookup(stage?.Columns.Count ?? 4, LegacyManiaSkinConfigurationLookups.KeyImageDown, column.Index))?.Value
+                               ?? $"mania-key{fallbackColumn}D";
+
+            InternalChild = directionContainer = new Container
+            {
+                RelativeSizeAxes = Axes.X,
+                AutoSizeAxes = Axes.Y,
+                Children = new Drawable[]
+                {
+                    upSprite = new Sprite
+                    {
+                        Origin = Anchor.BottomCentre,
+                        Texture = skin.GetTexture(upImage),
+                        RelativeSizeAxes = Axes.X,
+                        Width = 1
+                    },
+                    downSprite = new Sprite
+                    {
+                        Origin = Anchor.BottomCentre,
+                        Texture = skin.GetTexture(downImage),
+                        RelativeSizeAxes = Axes.X,
+                        Width = 1,
+                        Alpha = 0
+                    }
+                }
+            };
+
+            direction.BindTo(scrollingInfo.Direction);
+            direction.BindValueChanged(onDirectionChanged, true);
+        }
+
+        private void onDirectionChanged(ValueChangedEvent<ScrollingDirection> direction)
+        {
+            if (direction.NewValue == ScrollingDirection.Up)
+            {
+                directionContainer.Anchor = directionContainer.Origin = Anchor.TopCentre;
+                upSprite.Anchor = downSprite.Anchor = Anchor.TopCentre;
+                upSprite.Scale = downSprite.Scale = new Vector2(1, -1);
+            }
+            else
+            {
+                directionContainer.Anchor = directionContainer.Origin = Anchor.BottomCentre;
+                upSprite.Anchor = downSprite.Anchor = Anchor.BottomCentre;
+                upSprite.Scale = downSprite.Scale = Vector2.One;
+            }
+        }
+
+        public bool OnPressed(ManiaAction action)
+        {
+            if (action == column.Action.Value)
+            {
+                upSprite.FadeTo(0);
+                downSprite.FadeTo(1);
+            }
+
+            return false;
+        }
+
+        public void OnReleased(ManiaAction action)
+        {
+            if (action == column.Action.Value)
+            {
+                upSprite.FadeTo(1);
+                downSprite.FadeTo(0);
+            }
+        }
+    }
+}
diff --git a/osu.Game.Rulesets.Mania/Skinning/ManiaLegacySkinTransformer.cs b/osu.Game.Rulesets.Mania/Skinning/ManiaLegacySkinTransformer.cs
index ffc69fae49..b71e7b9f14 100644
--- a/osu.Game.Rulesets.Mania/Skinning/ManiaLegacySkinTransformer.cs
+++ b/osu.Game.Rulesets.Mania/Skinning/ManiaLegacySkinTransformer.cs
@@ -38,10 +38,16 @@ namespace osu.Game.Rulesets.Mania.Skinning
                 case GameplaySkinComponent<HitResult> resultComponent:
                     return getResult(resultComponent);
 
-                case ManiaSkinComponent _:
+                case ManiaSkinComponent maniaComponent:
                     if (!isLegacySkin.Value)
                         return null;
 
+                    switch (maniaComponent.Component)
+                    {
+                        case ManiaSkinComponents.KeyArea:
+                            return new LegacyKeyArea();
+                    }
+
                     break;
             }
 
diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs
index 0eccd27944..62c1afde7d 100644
--- a/osu.Game.Rulesets.Mania/UI/Column.cs
+++ b/osu.Game.Rulesets.Mania/UI/Column.cs
@@ -15,6 +15,7 @@ using osu.Game.Rulesets.Mania.Objects.Drawables;
 using osu.Game.Rulesets.Mania.Objects.Drawables.Pieces;
 using osu.Game.Rulesets.Mania.UI.Components;
 using osu.Game.Rulesets.UI.Scrolling;
+using osu.Game.Skinning;
 using osuTK;
 
 namespace osu.Game.Rulesets.Mania.UI
@@ -33,7 +34,6 @@ namespace osu.Game.Rulesets.Mania.UI
         public readonly Bindable<ManiaAction> Action = new Bindable<ManiaAction>();
 
         private readonly ColumnBackground background;
-        private readonly ColumnKeyArea keyArea;
         private readonly ColumnHitObjectArea hitObjectArea;
 
         internal readonly Container TopLevelContainer;
@@ -71,10 +71,9 @@ namespace osu.Game.Rulesets.Mania.UI
                         }
                     }
                 },
-                keyArea = new ColumnKeyArea
+                new SkinnableDrawable(new ManiaSkinComponent(ManiaSkinComponents.KeyArea), _ => new DefaultKeyArea())
                 {
-                    RelativeSizeAxes = Axes.X,
-                    Height = ManiaStage.HIT_TARGET_POSITION,
+                    RelativeSizeAxes = Axes.Both
                 },
                 background,
                 TopLevelContainer = new Container { RelativeSizeAxes = Axes.Both }
@@ -95,8 +94,6 @@ namespace osu.Game.Rulesets.Mania.UI
                     Top = dir.NewValue == ScrollingDirection.Up ? NotePiece.NOTE_HEIGHT / 2 : 0,
                     Bottom = dir.NewValue == ScrollingDirection.Down ? NotePiece.NOTE_HEIGHT / 2 : 0
                 };
-
-                keyArea.Anchor = keyArea.Origin = dir.NewValue == ScrollingDirection.Up ? Anchor.TopLeft : Anchor.BottomLeft;
             }, true);
         }
 
@@ -131,7 +128,6 @@ namespace osu.Game.Rulesets.Mania.UI
                 accentColour = value;
 
                 background.AccentColour = value;
-                keyArea.AccentColour = value;
                 hitObjectArea.AccentColour = value;
             }
         }
diff --git a/osu.Game.Rulesets.Mania/UI/Components/ColumnKeyArea.cs b/osu.Game.Rulesets.Mania/UI/Components/ColumnKeyArea.cs
deleted file mode 100644
index 60fc2713b3..0000000000
--- a/osu.Game.Rulesets.Mania/UI/Components/ColumnKeyArea.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-// 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.Bindables;
-using osu.Framework.Extensions.Color4Extensions;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Colour;
-using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Effects;
-using osu.Framework.Graphics.Shapes;
-using osu.Framework.Input.Bindings;
-using osu.Game.Graphics;
-using osu.Game.Rulesets.UI.Scrolling;
-using osuTK;
-using osuTK.Graphics;
-
-namespace osu.Game.Rulesets.Mania.UI.Components
-{
-    public class ColumnKeyArea : CompositeDrawable, IKeyBindingHandler<ManiaAction>, IHasAccentColour
-    {
-        private const float key_icon_size = 10;
-        private const float key_icon_corner_radius = 3;
-
-        private readonly IBindable<ManiaAction> action = new Bindable<ManiaAction>();
-        private readonly IBindable<ScrollingDirection> direction = new Bindable<ScrollingDirection>();
-
-        private Container keyIcon;
-
-        [BackgroundDependencyLoader]
-        private void load(IBindable<ManiaAction> action, IScrollingInfo scrollingInfo)
-        {
-            this.action.BindTo(action);
-
-            Drawable gradient;
-
-            InternalChildren = new[]
-            {
-                gradient = new Box
-                {
-                    Name = "Key gradient",
-                    RelativeSizeAxes = Axes.Both,
-                    Alpha = 0.5f
-                },
-                keyIcon = new Container
-                {
-                    Name = "Key icon",
-                    Anchor = Anchor.Centre,
-                    Origin = Anchor.Centre,
-                    Size = new Vector2(key_icon_size),
-                    Masking = true,
-                    CornerRadius = key_icon_corner_radius,
-                    BorderThickness = 2,
-                    BorderColour = Color4.White, // Not true
-                    Children = new[]
-                    {
-                        new Box
-                        {
-                            RelativeSizeAxes = Axes.Both,
-                            Alpha = 0,
-                            AlwaysPresent = true
-                        }
-                    }
-                }
-            };
-
-            direction.BindTo(scrollingInfo.Direction);
-            direction.BindValueChanged(dir =>
-            {
-                gradient.Colour = ColourInfo.GradientVertical(
-                    dir.NewValue == ScrollingDirection.Up ? Color4.Black : Color4.Black.Opacity(0),
-                    dir.NewValue == ScrollingDirection.Up ? Color4.Black.Opacity(0) : Color4.Black);
-            }, true);
-        }
-
-        protected override void LoadComplete()
-        {
-            base.LoadComplete();
-            updateColours();
-        }
-
-        private Color4 accentColour;
-
-        public Color4 AccentColour
-        {
-            get => accentColour;
-            set
-            {
-                if (accentColour == value)
-                    return;
-
-                accentColour = value;
-
-                updateColours();
-            }
-        }
-
-        private void updateColours()
-        {
-            if (!IsLoaded)
-                return;
-
-            keyIcon.EdgeEffect = new EdgeEffectParameters
-            {
-                Type = EdgeEffectType.Glow,
-                Radius = 5,
-                Colour = accentColour.Opacity(0.5f),
-            };
-        }
-
-        public bool OnPressed(ManiaAction action)
-        {
-            if (action == this.action.Value)
-                keyIcon.ScaleTo(1.4f, 50, Easing.OutQuint).Then().ScaleTo(1.3f, 250, Easing.OutQuint);
-            return false;
-        }
-
-        public void OnReleased(ManiaAction action)
-        {
-            if (action == this.action.Value)
-                keyIcon.ScaleTo(1f, 125, Easing.OutQuint);
-        }
-    }
-}
diff --git a/osu.Game.Rulesets.Mania/UI/Components/DefaultKeyArea.cs b/osu.Game.Rulesets.Mania/UI/Components/DefaultKeyArea.cs
new file mode 100644
index 0000000000..982a18cb60
--- /dev/null
+++ b/osu.Game.Rulesets.Mania/UI/Components/DefaultKeyArea.cs
@@ -0,0 +1,114 @@
+// 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.Bindables;
+using osu.Framework.Extensions.Color4Extensions;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Colour;
+using osu.Framework.Graphics.Containers;
+using osu.Framework.Graphics.Effects;
+using osu.Framework.Graphics.Shapes;
+using osu.Framework.Input.Bindings;
+using osu.Game.Rulesets.UI.Scrolling;
+using osuTK;
+using osuTK.Graphics;
+
+namespace osu.Game.Rulesets.Mania.UI.Components
+{
+    public class DefaultKeyArea : CompositeDrawable, IKeyBindingHandler<ManiaAction>
+    {
+        private const float key_icon_size = 10;
+        private const float key_icon_corner_radius = 3;
+
+        private readonly IBindable<ScrollingDirection> direction = new Bindable<ScrollingDirection>();
+
+        private Container directionContainer;
+        private Container keyIcon;
+        private Drawable gradient;
+
+        [Resolved]
+        private Column column { get; set; }
+
+        public DefaultKeyArea()
+        {
+            RelativeSizeAxes = Axes.Both;
+        }
+
+        [BackgroundDependencyLoader]
+        private void load(IScrollingInfo scrollingInfo)
+        {
+            InternalChild = directionContainer = new Container
+            {
+                RelativeSizeAxes = Axes.X,
+                Height = ManiaStage.HIT_TARGET_POSITION,
+                Children = new[]
+                {
+                    gradient = new Box
+                    {
+                        Name = "Key gradient",
+                        RelativeSizeAxes = Axes.Both,
+                        Alpha = 0.5f
+                    },
+                    keyIcon = new Container
+                    {
+                        Name = "Key icon",
+                        Anchor = Anchor.Centre,
+                        Origin = Anchor.Centre,
+                        Size = new Vector2(key_icon_size),
+                        Masking = true,
+                        CornerRadius = key_icon_corner_radius,
+                        BorderThickness = 2,
+                        BorderColour = Color4.White, // Not true
+                        Children = new[]
+                        {
+                            new Box
+                            {
+                                RelativeSizeAxes = Axes.Both,
+                                Alpha = 0,
+                                AlwaysPresent = true
+                            }
+                        }
+                    }
+                }
+            };
+
+            keyIcon.EdgeEffect = new EdgeEffectParameters
+            {
+                Type = EdgeEffectType.Glow,
+                Radius = 5,
+                Colour = column.AccentColour.Opacity(0.5f),
+            };
+
+            direction.BindTo(scrollingInfo.Direction);
+            direction.BindValueChanged(onDirectionChanged, true);
+        }
+
+        private void onDirectionChanged(ValueChangedEvent<ScrollingDirection> direction)
+        {
+            if (direction.NewValue == ScrollingDirection.Up)
+            {
+                directionContainer.Anchor = directionContainer.Origin = Anchor.TopLeft;
+                gradient.Colour = ColourInfo.GradientVertical(Color4.Black, Color4.Black.Opacity(0));
+            }
+            else
+            {
+                directionContainer.Anchor = directionContainer.Origin = Anchor.BottomLeft;
+                gradient.Colour = ColourInfo.GradientVertical(Color4.Black.Opacity(0), Color4.Black);
+            }
+        }
+
+        public bool OnPressed(ManiaAction action)
+        {
+            if (action == column.Action.Value)
+                keyIcon.ScaleTo(1.4f, 50, Easing.OutQuint).Then().ScaleTo(1.3f, 250, Easing.OutQuint);
+            return false;
+        }
+
+        public void OnReleased(ManiaAction action)
+        {
+            if (action == column.Action.Value)
+                keyIcon.ScaleTo(1f, 125, Easing.OutQuint);
+        }
+    }
+}
diff --git a/osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs b/osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs
index bbdd445f66..bdb016d3b1 100644
--- a/osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs
+++ b/osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs
@@ -19,5 +19,7 @@ namespace osu.Game.Skinning
 
     public enum LegacyManiaSkinConfigurationLookups
     {
+        KeyImage,
+        KeyImageDown
     }
 }

From 16439f7d8eff72f8352805680735d8cc8409a90e Mon Sep 17 00:00:00 2001
From: smoogipoo <smoogipoo@smgi.me>
Date: Tue, 31 Mar 2020 15:15:49 +0900
Subject: [PATCH 2/4] Fix incorrect fallback index being used

---
 osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs b/osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs
index 8a57953d60..6afc86c4fa 100644
--- a/osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs
+++ b/osu.Game.Rulesets.Mania/Skinning/LegacyKeyArea.cs
@@ -14,7 +14,7 @@ using osuTK;
 
 namespace osu.Game.Rulesets.Mania.Skinning
 {
-    public class LegacyKeyArea : CompositeDrawable, IKeyBindingHandler<ManiaAction>
+    public class LegacyKeyArea : LegacyManiaColumnElement, IKeyBindingHandler<ManiaAction>
     {
         private readonly IBindable<ScrollingDirection> direction = new Bindable<ScrollingDirection>();
 
@@ -36,15 +36,13 @@ namespace osu.Game.Rulesets.Mania.Skinning
         [BackgroundDependencyLoader]
         private void load(ISkinSource skin, IScrollingInfo scrollingInfo)
         {
-            int fallbackColumn = column.Index % 2 + 1;
-
             string upImage = skin.GetConfig<LegacyManiaSkinConfigurationLookup, string>(
                                  new LegacyManiaSkinConfigurationLookup(stage?.Columns.Count ?? 4, LegacyManiaSkinConfigurationLookups.KeyImage, column.Index))?.Value
-                             ?? $"mania-key{fallbackColumn}";
+                             ?? $"mania-key{FallbackColumnIndex}";
 
             string downImage = skin.GetConfig<LegacyManiaSkinConfigurationLookup, string>(
                                    new LegacyManiaSkinConfigurationLookup(stage?.Columns.Count ?? 4, LegacyManiaSkinConfigurationLookups.KeyImageDown, column.Index))?.Value
-                               ?? $"mania-key{fallbackColumn}D";
+                               ?? $"mania-key{FallbackColumnIndex}D";
 
             InternalChild = directionContainer = new Container
             {

From a7eda32a6eea5822049b13373ef14fba213c9bf0 Mon Sep 17 00:00:00 2001
From: Dean Herbert <pe@ppy.sh>
Date: Tue, 31 Mar 2020 22:34:41 +0900
Subject: [PATCH 3/4] Fix missing comma

---
 osu.Game.Rulesets.Mania/ManiaSkinComponent.cs           | 2 +-
 osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/osu.Game.Rulesets.Mania/ManiaSkinComponent.cs b/osu.Game.Rulesets.Mania/ManiaSkinComponent.cs
index abb919a8af..5969a90e2c 100644
--- a/osu.Game.Rulesets.Mania/ManiaSkinComponent.cs
+++ b/osu.Game.Rulesets.Mania/ManiaSkinComponent.cs
@@ -19,7 +19,7 @@ namespace osu.Game.Rulesets.Mania
 
     public enum ManiaSkinComponents
     {
-        KeyArea
+        KeyArea,
         ColumnBackground
     }
 }
diff --git a/osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs b/osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs
index a134f5b135..79c7922ba9 100644
--- a/osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs
+++ b/osu.Game/Skinning/LegacyManiaSkinConfigurationLookup.cs
@@ -20,7 +20,7 @@ namespace osu.Game.Skinning
     public enum LegacyManiaSkinConfigurationLookups
     {
         KeyImage,
-        KeyImageDown
+        KeyImageDown,
         LightImage,
         LeftLineWidth,
         RightLineWidth

From a894b42a32e6eeffc22cc2298f2f78067e5faa5b Mon Sep 17 00:00:00 2001
From: Dean Herbert <pe@ppy.sh>
Date: Tue, 31 Mar 2020 22:41:16 +0900
Subject: [PATCH 4/4] Fix merge conflict mess

---
 osu.Game.Rulesets.Mania/UI/Column.cs | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs
index 70a18764f8..0ace5160fa 100644
--- a/osu.Game.Rulesets.Mania/UI/Column.cs
+++ b/osu.Game.Rulesets.Mania/UI/Column.cs
@@ -33,13 +33,10 @@ namespace osu.Game.Rulesets.Mania.UI
 
         public readonly Bindable<ManiaAction> Action = new Bindable<ManiaAction>();
 
-        private readonly ColumnBackground background;
-
-        private readonly ColumnKeyArea keyArea;
-
         private readonly ColumnHitObjectArea hitObjectArea;
 
         internal readonly Container TopLevelContainer;
+
         private readonly Container explosionContainer;
 
         public Column(int index)
@@ -133,8 +130,6 @@ namespace osu.Game.Rulesets.Mania.UI
 
                 accentColour = value;
 
-                background.AccentColour = value;
-                keyArea.AccentColour = value;
                 hitObjectArea.AccentColour = value;
             }
         }