diff --git a/src/Spectre.Console/BoxBorder.cs b/src/Spectre.Console/BoxBorder.cs index d40f75e..52e2ca8 100644 --- a/src/Spectre.Console/BoxBorder.cs +++ b/src/Spectre.Console/BoxBorder.cs @@ -1,7 +1,3 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; using Spectre.Console.Rendering; namespace Spectre.Console @@ -11,70 +7,16 @@ namespace Spectre.Console /// public abstract partial class BoxBorder { - private readonly Dictionary _lookup; - /// /// Gets the safe border for this border or null if none exist. /// public virtual BoxBorder? SafeBorder { get; } /// - /// Initializes a new instance of the class. - /// - protected BoxBorder() - { - _lookup = Initialize(); - } - - private Dictionary Initialize() - { - var lookup = new Dictionary(); - foreach (BoxBorderPart? part in Enum.GetValues(typeof(BoxBorderPart))) - { - if (part == null) - { - continue; - } - - var text = GetBorderPart(part.Value); - if (text.Length > 1) - { - throw new InvalidOperationException("A box part cannot contain more than one character."); - } - - lookup.Add(part.Value, GetBorderPart(part.Value)); - } - - return lookup; - } - - /// - /// Gets the string representation of a specific border part. - /// - /// The part to get a string representation for. - /// The number of repetitions. - /// A string representation of the specified border part. - public string GetPart(BoxBorderPart part, int count) - { - // TODO: This need some optimization... - return string.Join(string.Empty, Enumerable.Repeat(GetBorderPart(part)[0], count)); - } - - /// - /// Gets the string representation of a specific border part. - /// - /// The part to get a string representation for. - /// A string representation of the specified border part. - public string GetPart(BoxBorderPart part) - { - return _lookup[part].ToString(CultureInfo.InvariantCulture); - } - - /// - /// Gets the character representing the specified border part. + /// Gets the string representation of the specified border part. /// /// The part to get the character representation for. /// A character representation of the specified border part. - protected abstract string GetBorderPart(BoxBorderPart part); + public abstract string GetPart(BoxBorderPart part); } } diff --git a/src/Spectre.Console/Internal/Extensions/StringExtensions.cs b/src/Spectre.Console/Internal/Extensions/StringExtensions.cs index 00e91d4..58c7059 100644 --- a/src/Spectre.Console/Internal/Extensions/StringExtensions.cs +++ b/src/Spectre.Console/Internal/Extensions/StringExtensions.cs @@ -81,7 +81,7 @@ namespace Spectre.Console.Internal return result.ToArray(); } - public static string Multiply(this string text, int count) + public static string Repeat(this string text, int count) { if (text is null) { diff --git a/src/Spectre.Console/Rendering/Borders/Boxes/AsciiBoxBorder.cs b/src/Spectre.Console/Rendering/Borders/Boxes/AsciiBoxBorder.cs index 4d883e9..f72e278 100644 --- a/src/Spectre.Console/Rendering/Borders/Boxes/AsciiBoxBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Boxes/AsciiBoxBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class AsciiBoxBorder : BoxBorder { /// - protected override string GetBorderPart(BoxBorderPart part) + public override string GetPart(BoxBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Boxes/DoubleBoxBorder.cs b/src/Spectre.Console/Rendering/Borders/Boxes/DoubleBoxBorder.cs index 010ff4c..eeb3797 100644 --- a/src/Spectre.Console/Rendering/Borders/Boxes/DoubleBoxBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Boxes/DoubleBoxBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class DoubleBoxBorder : BoxBorder { /// - protected override string GetBorderPart(BoxBorderPart part) + public override string GetPart(BoxBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Boxes/HeavyBoxBorder.cs b/src/Spectre.Console/Rendering/Borders/Boxes/HeavyBoxBorder.cs index 3b13f67..b513c58 100644 --- a/src/Spectre.Console/Rendering/Borders/Boxes/HeavyBoxBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Boxes/HeavyBoxBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public override BoxBorder? SafeBorder => BoxBorder.Square; /// - protected override string GetBorderPart(BoxBorderPart part) + public override string GetPart(BoxBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Boxes/NoBoxBorder.cs b/src/Spectre.Console/Rendering/Borders/Boxes/NoBoxBorder.cs index 504e754..939e4ea 100644 --- a/src/Spectre.Console/Rendering/Borders/Boxes/NoBoxBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Boxes/NoBoxBorder.cs @@ -6,7 +6,7 @@ namespace Spectre.Console.Rendering public sealed class NoBoxBorder : BoxBorder { /// - protected override string GetBorderPart(BoxBorderPart part) + public override string GetPart(BoxBorderPart part) { return " "; } diff --git a/src/Spectre.Console/Rendering/Borders/Boxes/RoundedBoxBorder.cs b/src/Spectre.Console/Rendering/Borders/Boxes/RoundedBoxBorder.cs index c4ffaeb..12bb3bb 100644 --- a/src/Spectre.Console/Rendering/Borders/Boxes/RoundedBoxBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Boxes/RoundedBoxBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public override BoxBorder? SafeBorder => BoxBorder.Square; /// - protected override string GetBorderPart(BoxBorderPart part) + public override string GetPart(BoxBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Boxes/SquareBoxBorder.cs b/src/Spectre.Console/Rendering/Borders/Boxes/SquareBoxBorder.cs index 2374b93..c8d9561 100644 --- a/src/Spectre.Console/Rendering/Borders/Boxes/SquareBoxBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Boxes/SquareBoxBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class SquareBoxBorder : BoxBorder { /// - protected override string GetBorderPart(BoxBorderPart part) + public override string GetPart(BoxBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/Ascii2TableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/Ascii2TableBorder.cs index b3f2cd7..39df6a6 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/Ascii2TableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/Ascii2TableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class Ascii2TableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/AsciiDoubleHeadTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/AsciiDoubleHeadTableBorder.cs index 1e36b14..b4ca73d 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/AsciiDoubleHeadTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/AsciiDoubleHeadTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class AsciiDoubleHeadTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/AsciiTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/AsciiTableBorder.cs index cc1ea2d..932d717 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/AsciiTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/AsciiTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class AsciiTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/DoubleEdgeTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/DoubleEdgeTableBorder.cs index fe0e8d7..1bc7733 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/DoubleEdgeTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/DoubleEdgeTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class DoubleEdgeTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/DoubleTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/DoubleTableBorder.cs index 7fdf06b..e88f3f5 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/DoubleTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/DoubleTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class DoubleTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/HeavyEdgeTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/HeavyEdgeTableBorder.cs index 9aa3c92..5e8d021 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/HeavyEdgeTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/HeavyEdgeTableBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public override TableBorder? SafeBorder => TableBorder.Square; /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/HeavyHeadTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/HeavyHeadTableBorder.cs index d51401f..3555128 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/HeavyHeadTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/HeavyHeadTableBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public override TableBorder? SafeBorder => TableBorder.Square; /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/HeavyTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/HeavyTableBorder.cs index e7c6d90..c650253 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/HeavyTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/HeavyTableBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public override TableBorder? SafeBorder => TableBorder.Square; /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/HorizontalTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/HorizontalTableBorder.cs index e8cb667..b9c121b 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/HorizontalTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/HorizontalTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class HorizontalTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/MarkdownTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/MarkdownTableBorder.cs index 4e734f2..840e73e 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/MarkdownTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/MarkdownTableBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public sealed class MarkdownTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { @@ -57,39 +57,39 @@ namespace Spectre.Console.Rendering if (padding.Left > 0) { // Left padding - builder.Append(" ".Multiply(padding.Left)); + builder.Append(" ".Repeat(padding.Left)); } var justification = columns[columnIndex].Alignment; if (justification == null) { // No alignment - builder.Append(center.Multiply(columnWidth)); + builder.Append(center.Repeat(columnWidth)); } else if (justification.Value == Justify.Left) { // Left builder.Append(':'); - builder.Append(center.Multiply(columnWidth - 1)); + builder.Append(center.Repeat(columnWidth - 1)); } else if (justification.Value == Justify.Center) { // Centered builder.Append(':'); - builder.Append(center.Multiply(columnWidth - 2)); + builder.Append(center.Repeat(columnWidth - 2)); builder.Append(':'); } else if (justification.Value == Justify.Right) { // Right - builder.Append(center.Multiply(columnWidth - 1)); + builder.Append(center.Repeat(columnWidth - 1)); builder.Append(':'); } // Right padding if (padding.Right > 0) { - builder.Append(" ".Multiply(padding.Right)); + builder.Append(" ".Repeat(padding.Right)); } if (!lastColumn) diff --git a/src/Spectre.Console/Rendering/Borders/Tables/MinimalDoubleHeadTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/MinimalDoubleHeadTableBorder.cs index 86b5872..b644880 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/MinimalDoubleHeadTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/MinimalDoubleHeadTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class MinimalDoubleHeadTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/MinimalHeavyHeadTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/MinimalHeavyHeadTableBorder.cs index a6da029..9a32bf7 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/MinimalHeavyHeadTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/MinimalHeavyHeadTableBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public override TableBorder? SafeBorder => TableBorder.Minimal; /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/MinimalTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/MinimalTableBorder.cs index 48741a9..8b14617 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/MinimalTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/MinimalTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class MinimalTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/NoTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/NoTableBorder.cs index 4153553..6c171b8 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/NoTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/NoTableBorder.cs @@ -9,7 +9,7 @@ namespace Spectre.Console.Rendering public override bool Visible => false; /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return " "; } diff --git a/src/Spectre.Console/Rendering/Borders/Tables/RoundedTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/RoundedTableBorder.cs index dbdff51..6cce42e 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/RoundedTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/RoundedTableBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public override TableBorder? SafeBorder => TableBorder.Square; /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/SimpleHeavyTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/SimpleHeavyTableBorder.cs index dbe2a93..dd43d93 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/SimpleHeavyTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/SimpleHeavyTableBorder.cs @@ -11,7 +11,7 @@ namespace Spectre.Console.Rendering public override TableBorder? SafeBorder => TableBorder.Simple; /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/SimpleTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/SimpleTableBorder.cs index 5ca7711..beadd02 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/SimpleTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/SimpleTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class SimpleTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/Rendering/Borders/Tables/SquareTableBorder.cs b/src/Spectre.Console/Rendering/Borders/Tables/SquareTableBorder.cs index e6582b0..92cf072 100644 --- a/src/Spectre.Console/Rendering/Borders/Tables/SquareTableBorder.cs +++ b/src/Spectre.Console/Rendering/Borders/Tables/SquareTableBorder.cs @@ -8,7 +8,7 @@ namespace Spectre.Console.Rendering public sealed class SquareTableBorder : TableBorder { /// - protected override string GetBorderPart(TableBorderPart part) + public override string GetPart(TableBorderPart part) { return part switch { diff --git a/src/Spectre.Console/TableBorder.cs b/src/Spectre.Console/TableBorder.cs index cb2c21b..29f9202 100644 --- a/src/Spectre.Console/TableBorder.cs +++ b/src/Spectre.Console/TableBorder.cs @@ -13,8 +13,6 @@ namespace Spectre.Console /// public abstract partial class TableBorder { - private readonly Dictionary _lookup; - /// /// Gets a value indicating whether or not the border is visible. /// @@ -26,46 +24,11 @@ namespace Spectre.Console public virtual TableBorder? SafeBorder { get; } /// - /// Initializes a new instance of the class. + /// Gets the string representation of a specified table border part. /// - protected TableBorder() - { - _lookup = Initialize(); - } - - private Dictionary Initialize() - { - var lookup = new Dictionary(); - foreach (TableBorderPart? part in Enum.GetValues(typeof(TableBorderPart))) - { - if (part == null) - { - continue; - } - - var text = GetBorderPart(part.Value); - if (text.Length > 1) - { - throw new InvalidOperationException("A box part cannot contain more than one character."); - } - - lookup.Add(part.Value, GetBorderPart(part.Value)); - } - - return lookup; - } - - /// - /// Gets the string representation of a specific border part. - /// - /// The part to get a string representation for. - /// The number of repetitions. - /// A string representation of the specified border part. - public string GetPart(TableBorderPart part, int count) - { - // TODO: This need some optimization... - return string.Join(string.Empty, Enumerable.Repeat(GetBorderPart(part)[0], count)); - } + /// The part to get the character representation for. + /// A character representation of the specified border part. + public abstract string GetPart(TableBorderPart part); /// /// Gets a whole column row for the specific column row part. @@ -95,7 +58,7 @@ namespace Spectre.Console { var padding = columns[columnIndex].Padding; var centerWidth = padding.Left + columnWidth + padding.Right; - builder.Append(center.Multiply(centerWidth)); + builder.Append(center.Repeat(centerWidth)); if (!lastColumn) { @@ -107,30 +70,12 @@ namespace Spectre.Console return builder.ToString(); } - /// - /// Gets the string representation of a specific border part. - /// - /// The part to get a string representation for. - /// A string representation of the specified border part. - public string GetPart(TableBorderPart part) - { - return _lookup[part].ToString(CultureInfo.InvariantCulture); - } - - /// - /// Gets the character representing the specified border part. - /// - /// The part to get the character representation for. - /// A character representation of the specified border part. - protected abstract string GetBorderPart(TableBorderPart part); - /// /// Gets the table parts used to render a specific table row. /// /// The table part. /// The table parts used to render the specific table row. - protected (string Left, string Center, string Separator, string Right) - GetTableParts(TablePart part) + protected (string Left, string Center, string Separator, string Right) GetTableParts(TablePart part) { return part switch { diff --git a/src/Spectre.Console/Widgets/Panel.cs b/src/Spectre.Console/Widgets/Panel.cs index efe4c88..7eb39c8 100644 --- a/src/Spectre.Console/Widgets/Panel.cs +++ b/src/Spectre.Console/Widgets/Panel.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Spectre.Console.Internal; using Spectre.Console.Rendering; namespace Spectre.Console @@ -123,7 +124,7 @@ namespace Spectre.Console private static void AddBottomBorder(List result, BoxBorder border, Style borderStyle, int panelWidth) { result.Add(new Segment(border.GetPart(BoxBorderPart.BottomLeft), borderStyle)); - result.Add(new Segment(border.GetPart(BoxBorderPart.Bottom, panelWidth - EdgeWidth), borderStyle)); + result.Add(new Segment(border.GetPart(BoxBorderPart.Bottom).Repeat(panelWidth - EdgeWidth), borderStyle)); result.Add(new Segment(border.GetPart(BoxBorderPart.BottomRight), borderStyle)); result.Add(Segment.LineBreak); } @@ -160,13 +161,13 @@ namespace Spectre.Console } } - segments.Add(new Segment(border.GetPart(BoxBorderPart.Top, leftSpacing + 1), borderStyle)); + segments.Add(new Segment(border.GetPart(BoxBorderPart.Top).Repeat(leftSpacing + 1), borderStyle)); segments.Add(header); - segments.Add(new Segment(border.GetPart(BoxBorderPart.Top, rightSpacing + 1), borderStyle)); + segments.Add(new Segment(border.GetPart(BoxBorderPart.Top).Repeat(rightSpacing + 1), borderStyle)); } else { - segments.Add(new Segment(border.GetPart(BoxBorderPart.Top, panelWidth - EdgeWidth), borderStyle)); + segments.Add(new Segment(border.GetPart(BoxBorderPart.Top).Repeat(panelWidth - EdgeWidth), borderStyle)); } segments.Add(new Segment(border.GetPart(BoxBorderPart.TopRight), borderStyle));