diff --git a/Voile/Source/UI/Style.cs b/Voile/Source/UI/Style.cs index 466b837..52cda49 100644 --- a/Voile/Source/UI/Style.cs +++ b/Voile/Source/UI/Style.cs @@ -20,6 +20,24 @@ public class Style public Color? BorderColor { get; set; } public float CornerRadius { get; set; } public Color? TextColor { get; set; } + + /// + /// Merges this with a different one.
+ /// Properties that are not set for this will be inherited from . + ///
+ /// + /// A merged . + public Style Merge(Style overrideStyle) + { + return new Style + { + BackgroundColor = overrideStyle.BackgroundColor != default ? overrideStyle.BackgroundColor : BackgroundColor, + TextColor = overrideStyle.TextColor != default ? overrideStyle.TextColor : TextColor, + Padding = overrideStyle.Padding != default ? overrideStyle.Padding : Padding, + BorderSize = overrideStyle.BorderSize != default ? overrideStyle.BorderSize : BorderSize, + BorderColor = overrideStyle.BorderColor != default ? overrideStyle.BorderColor : BorderColor, + }; + } } public class StyleSheetLoader : ResourceLoader @@ -88,25 +106,13 @@ public class StyleSheetLoader : ResourceLoader var subKey = string.Join('.', parts.Take(i)); if (allStyles.TryGetValue(subKey, out var parentStyle)) { - merged = MergeStyles(merged, parentStyle); + merged = merged.Merge(parentStyle); } } return merged; } - private Style MergeStyles(Style baseStyle, Style overrideStyle) - { - return new Style - { - BackgroundColor = overrideStyle.BackgroundColor != default ? overrideStyle.BackgroundColor : baseStyle.BackgroundColor, - TextColor = overrideStyle.TextColor != default ? overrideStyle.TextColor : baseStyle.TextColor, - Padding = overrideStyle.Padding != default ? overrideStyle.Padding : baseStyle.Padding, - BorderSize = overrideStyle.BorderSize != default ? overrideStyle.BorderSize : baseStyle.BorderSize, - BorderColor = overrideStyle.BorderColor != default ? overrideStyle.BorderColor : baseStyle.BorderColor, - }; - } - private readonly TomlDataReader _reader = new(); }