Fixes #2282. HotKeyPos is causing black cell on center and right/bottom alignments.

This commit is contained in:
BDisp
2023-01-09 19:55:56 +00:00
parent 0d9b7dce31
commit efa02de815
3 changed files with 52 additions and 11 deletions

View File

@@ -1212,11 +1212,11 @@ namespace Terminal.Gui {
if (isVertical) {
var runesWidth = GetSumMaxCharWidth (Lines, line);
x = bounds.Right - runesWidth;
CursorPosition = bounds.Width - runesWidth + hotKeyPos;
CursorPosition = bounds.Width - runesWidth + (hotKeyPos > -1 ? hotKeyPos : 0);
} else {
var runesWidth = GetTextWidth (ustring.Make (runes));
x = bounds.Right - runesWidth;
CursorPosition = bounds.Width - runesWidth + hotKeyPos;
CursorPosition = bounds.Width - runesWidth + (hotKeyPos > -1 ? hotKeyPos : 0);
}
} else if (textAlignment == TextAlignment.Left || textAlignment == TextAlignment.Justified) {
if (isVertical) {
@@ -1225,16 +1225,16 @@ namespace Terminal.Gui {
} else {
x = bounds.Left;
}
CursorPosition = hotKeyPos;
CursorPosition = hotKeyPos > -1 ? hotKeyPos : 0;
} else if (textAlignment == TextAlignment.Centered) {
if (isVertical) {
var runesWidth = GetSumMaxCharWidth (Lines, line);
x = bounds.Left + line + ((bounds.Width - runesWidth) / 2);
CursorPosition = (bounds.Width - runesWidth) / 2 + hotKeyPos;
CursorPosition = (bounds.Width - runesWidth) / 2 + (hotKeyPos > -1 ? hotKeyPos : 0);
} else {
var runesWidth = GetTextWidth (ustring.Make (runes));
x = bounds.Left + (bounds.Width - runesWidth) / 2;
CursorPosition = (bounds.Width - runesWidth) / 2 + hotKeyPos;
CursorPosition = (bounds.Width - runesWidth) / 2 + (hotKeyPos > -1 ? hotKeyPos : 0);
}
} else {
throw new ArgumentOutOfRangeException ();
@@ -1291,7 +1291,7 @@ namespace Terminal.Gui {
rune = runes [idx];
}
}
if (idx == HotKeyPos) {
if (HotKeyPos > -1 && idx == HotKeyPos) {
if ((isVertical && textVerticalAlignment == VerticalTextAlignment.Justified) ||
(!isVertical && textAlignment == TextAlignment.Justified)) {
CursorPosition = idx - start;

View File

@@ -37,9 +37,9 @@ public class AutoInitShutdownAttribute : Xunit.Sdk.BeforeAfterTestAttribute {
/// <param name="fakeClipboardIsSupportedAlwaysTrue">Only valid if <paramref name="autoInit"/> is true.
/// Only valid if <see cref="consoleDriver"/> == <see cref="FakeDriver"/> and <paramref name="autoInit"/> is true.</param>
public AutoInitShutdownAttribute (bool autoInit = true, bool autoShutdown = true,
Type consoleDriverType = null,
bool useFakeClipboard = false,
bool fakeClipboardAlwaysThrowsNotSupportedException = false,
Type consoleDriverType = null,
bool useFakeClipboard = false,
bool fakeClipboardAlwaysThrowsNotSupportedException = false,
bool fakeClipboardIsSupportedAlwaysTrue = false)
{
//Assert.True (autoInit == false && consoleDriverType == null);
@@ -54,7 +54,7 @@ public class AutoInitShutdownAttribute : Xunit.Sdk.BeforeAfterTestAttribute {
static bool _init = false;
bool AutoInit { get; }
bool AutoShutdown { get; }
bool AutoShutdown { get; }
Type DriverType;
public override void Before (MethodInfo methodUnderTest)
@@ -251,7 +251,7 @@ class TestHelpers {
var match = expectedColors.Where (e => e.Value == val).ToList ();
if (match.Count == 0) {
throw new Exception ($"Unexpected color {DescribeColor (val)} was used at row {r} and col {c} (indexes start at 0). Color value was {val} (expected colors were {string.Join (",", expectedColors.Select (c => c.Value))})");
throw new Exception ($"Unexpected color {DescribeColor (val)} was used at row {r} and col {c} (indexes start at 0). Color value was {val} (expected colors were {string.Join (",", expectedColors.Select (c => DescribeColor (c.Value)))})");
} else if (match.Count > 1) {
throw new ArgumentException ($"Bad value for expectedColors, {match.Count} Attributes had the same Value");
}

View File

@@ -4259,5 +4259,46 @@ This TextFormatter (tf2) is rewritten.
0111000000
0000000000", expectedColors);
}
[Fact, AutoInitShutdown]
public void Colors_On_TextAlignment_Right_And_Bottom ()
{
var labelRight = new Label ("Test") {
Width = 6,
Height = 1,
TextAlignment = TextAlignment.Right,
ColorScheme = Colors.Base
};
var labelBottom = new Label ("Test", TextDirection.TopBottom_LeftRight) {
Y = 1,
Width = 1,
Height = 6,
VerticalTextAlignment = VerticalTextAlignment.Bottom,
ColorScheme = Colors.Base
};
var top = Application.Top;
top.Add (labelRight, labelBottom);
Application.Begin (top);
((FakeDriver)Application.Driver).SetBufferSize (7, 7);
TestHelpers.AssertDriverContentsWithFrameAre (@"
Test
T
e
s
t ", output);
TestHelpers.AssertDriverColorsAre (@"
000000
0
0
0
0
0
0", new Attribute [] { Colors.Base.Normal });
}
}
}