Browse Source

fixed merge issues

Tig Kindel 2 years ago
parent
commit
517ec9e988
3 changed files with 166 additions and 5 deletions
  1. 0 1
      Terminal.Gui/Terminal.Gui.csproj
  2. 3 3
      UICatalog/Scenarios/Borders.cs
  3. 163 1
      UnitTests/Core/BorderTests.cs

+ 0 - 1
Terminal.Gui/Terminal.Gui.csproj

@@ -66,7 +66,6 @@
     <LangVersion>9</LangVersion>
     <LangVersion>9</LangVersion>
     <RootNamespace>Terminal.Gui</RootNamespace>
     <RootNamespace>Terminal.Gui</RootNamespace>
     <AssemblyName>Terminal.Gui</AssemblyName>
     <AssemblyName>Terminal.Gui</AssemblyName>
-    <LangVersion>8</LangVersion>
     <DocumentationFile>bin\Release\Terminal.Gui.xml</DocumentationFile>
     <DocumentationFile>bin\Release\Terminal.Gui.xml</DocumentationFile>
     <GenerateDocumentationFile Condition=" '$(Configuration)' == 'Release' ">true</GenerateDocumentationFile>
     <GenerateDocumentationFile Condition=" '$(Configuration)' == 'Release' ">true</GenerateDocumentationFile>
     <!--<GeneratePackageOnBuild Condition=" '$(Configuration)' == 'Release' ">true</GeneratePackageOnBuild>-->
     <!--<GeneratePackageOnBuild Condition=" '$(Configuration)' == 'Release' ">true</GeneratePackageOnBuild>-->

+ 3 - 3
UICatalog/Scenarios/Borders.cs

@@ -335,8 +335,8 @@ namespace UICatalog.Scenarios {
 			};
 			};
 			cbDrawMarginFrame.Toggled += (e) => {
 			cbDrawMarginFrame.Toggled += (e) => {
 				try {
 				try {
-					smartPanel.Child.Border.DrawMarginFrame = cbDrawMarginFrame.Checked;
-					smartLabel.Border.DrawMarginFrame = cbDrawMarginFrame.Checked;
+					smartPanel.Child.Border.DrawMarginFrame = cbDrawMarginFrame.Checked == true;
+					smartLabel.Border.DrawMarginFrame = cbDrawMarginFrame.Checked == true;
 					if (cbDrawMarginFrame.Checked != smartLabel.Border.DrawMarginFrame) {
 					if (cbDrawMarginFrame.Checked != smartLabel.Border.DrawMarginFrame) {
 						cbDrawMarginFrame.Checked = smartLabel.Border.DrawMarginFrame;
 						cbDrawMarginFrame.Checked = smartLabel.Border.DrawMarginFrame;
 					}
 					}
@@ -419,7 +419,7 @@ namespace UICatalog.Scenarios {
 			cbEffect3D.Toggled += (e) => {
 			cbEffect3D.Toggled += (e) => {
 				try {
 				try {
 					smartPanel.Child.Border.Effect3D = smartLabel.Border.Effect3D = effect3DOffsetX.Enabled =
 					smartPanel.Child.Border.Effect3D = smartLabel.Border.Effect3D = effect3DOffsetX.Enabled =
-						effect3DOffsetY.Enabled = cbEffect3D.Checked;
+						effect3DOffsetY.Enabled = cbEffect3D.Checked == true;
 				} catch { }
 				} catch { }
 			};
 			};
 
 

+ 163 - 1
UnitTests/Core/BorderTests.cs

@@ -81,7 +81,169 @@ namespace Terminal.Gui.CoreTests {
 			Assert.Equal (new Thickness (5, 5, 5, 5), b.GetSumThickness ());
 			Assert.Equal (new Thickness (5, 5, 5, 5), b.GetSumThickness ());
 		}
 		}
 
 
-	}
+		[Fact]
+		[AutoInitShutdown]
+		public void DrawContent_With_Child_Border ()
+		{
+			var top = Application.Top;
+			var driver = (FakeDriver)Application.Driver;
+
+			var label = new Label () {
+				X = Pos.Center (),
+				Y = Pos.Center (),
+				Border = new Border () {
+					BorderStyle = BorderStyle.Single,
+					Padding = new Thickness (2),
+					BorderThickness = new Thickness (2),
+					BorderBrush = Color.Red,
+					Background = Color.BrightGreen,
+					Effect3D = true,
+					Effect3DOffset = new Point (2, -3)
+				},
+				ColorScheme = Colors.TopLevel,
+				Text = "This is a test"
+			};
+			label.Border.Child = label;
+			top.Add (label);
+
+			top.LayoutSubviews ();
+			label.Redraw (label.Bounds);
+
+			var frame = label.Frame;
+			var drawMarginFrame = label.Border.DrawMarginFrame ? 1 : 0;
+			var sumThickness = label.Border.GetSumThickness ();
+			var padding = label.Border.Padding;
+			var effect3DOffset = label.Border.Effect3DOffset;
+			var borderStyle = label.Border.BorderStyle;
+
+			// Check the upper BorderThickness
+			for (int r = frame.Y - drawMarginFrame - sumThickness.Top;
+				r < frame.Y - drawMarginFrame - padding.Top; r++) {
+				for (int c = frame.X - drawMarginFrame - sumThickness.Left;
+					c < frame.Right + drawMarginFrame + sumThickness.Right; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					Assert.Equal (Color.Red, color.Background);
+				}
+			}
+
+			// Check the left BorderThickness
+			for (int r = frame.Y - drawMarginFrame - padding.Top;
+				r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
+				for (int c = frame.X - drawMarginFrame - sumThickness.Left;
+					c < frame.X - drawMarginFrame - padding.Left; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					Assert.Equal (Color.Red, color.Background);
+				}
+			}
+
+			// Check the right BorderThickness
+			for (int r = frame.Y - drawMarginFrame - padding.Top;
+				r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
+				for (int c = frame.Right + drawMarginFrame + padding.Right;
+					c < frame.Right + drawMarginFrame - sumThickness.Right; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					Assert.Equal (Color.Red, color.Background);
+				}
+			}
+
+			// Check the lower BorderThickness
+			for (int r = frame.Bottom + drawMarginFrame + padding.Bottom;
+				r < frame.Bottom + drawMarginFrame + sumThickness.Bottom; r++) {
+				for (int c = frame.X - drawMarginFrame - sumThickness.Left;
+					c < frame.Right + drawMarginFrame + sumThickness.Right; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					Assert.Equal (Color.Red, color.Background);
+				}
+			}
+
+			// Check the upper Padding
+			for (int r = frame.Y - drawMarginFrame - padding.Top;
+				r < frame.Y - drawMarginFrame; r++) {
+				for (int c = frame.X - drawMarginFrame - padding.Left;
+					c < frame.Right + drawMarginFrame + padding.Right; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					Assert.Equal (Color.BrightGreen, color.Background);
+				}
+			}
+
+			// Check the left Padding
+			for (int r = frame.Y - drawMarginFrame;
+				r < frame.Bottom + drawMarginFrame; r++) {
+				for (int c = frame.X - drawMarginFrame - padding.Left;
+					c < frame.X - drawMarginFrame; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					Assert.Equal (Color.BrightGreen, color.Background);
+				}
+			}
+
+			// Check the right Padding
+			for (int r = frame.Y - drawMarginFrame;
+				r < frame.Bottom + drawMarginFrame; r++) {
+				for (int c = frame.Right + drawMarginFrame;
+					c < frame.Right + drawMarginFrame - padding.Right; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					Assert.Equal (Color.BrightGreen, color.Background);
+				}
+			}
+
+			// Check the lower Padding
+			for (int r = frame.Bottom + drawMarginFrame;
+				r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
+				for (int c = frame.X - drawMarginFrame - padding.Left;
+					c < frame.Right + drawMarginFrame + padding.Right; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					Assert.Equal (Color.BrightGreen, color.Background);
+				}
+			}
+
+			Rune hLine = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
+				? driver.HLine : (borderStyle == BorderStyle.Double ? driver.HDLine : ' ')) : ' ';
+			Rune vLine = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
+				? driver.VLine : (borderStyle == BorderStyle.Double ? driver.VDLine : ' ')) : ' ';
+			Rune uRCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
+				? driver.URCorner : (borderStyle == BorderStyle.Double ? driver.URDCorner : ' ')) : ' ';
+			Rune uLCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
+				? driver.ULCorner : (borderStyle == BorderStyle.Double ? driver.ULDCorner : ' ')) : ' ';
+			Rune lLCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
+				? driver.LLCorner : (borderStyle == BorderStyle.Double ? driver.LLDCorner : ' ')) : ' ';
+			Rune lRCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
+				? driver.LRCorner : (borderStyle == BorderStyle.Double ? driver.LRDCorner : ' ')) : ' ';
+
+			var text = "";
+			// Check the MarginFrame
+			for (int r = frame.Y - drawMarginFrame;
+				r < frame.Bottom + drawMarginFrame; r++) {
+				for (int c = frame.X - drawMarginFrame;
+					c <= frame.Right + drawMarginFrame - 1; c++) {
+
+					var color = (Attribute)driver.Contents [r, c, 1];
+					var rune = (Rune)driver.Contents [r, c, 0];
+					Assert.Equal (Color.Black, color.Background);
+					if (c == frame.X - drawMarginFrame && r == frame.Y - drawMarginFrame) {
+						Assert.Equal (uLCorner, rune);
+					} else if (c == frame.Right && r == frame.Y - drawMarginFrame) {
+						Assert.Equal (uRCorner, rune);
+					} else if (c == frame.X - drawMarginFrame && r == frame.Bottom) {
+						Assert.Equal (lLCorner, rune);
+					} else if (c == frame.Right && r == frame.Bottom) {
+						Assert.Equal (lRCorner, rune);
+					} else if (c >= frame.X && (r == frame.Y - drawMarginFrame
+						|| r == frame.Bottom)) {
+						Assert.Equal (hLine, rune);
+					} else if ((c == frame.X - drawMarginFrame || c == frame.Right)
+						&& r >= frame.Y && r <= frame.Bottom - drawMarginFrame) {
+						Assert.Equal (vLine, rune);
+					} else {
+						text += rune.ToString ();
+					}
 				}
 				}
 			}
 			}
 			Assert.Equal ("This is a test", text.Trim ());
 			Assert.Equal ("This is a test", text.Trim ());