Browse Source

Fixes some console buffer size issue on resizing reported in #1768. (#1784)

BDisp 3 năm trước cách đây
mục cha
commit
d16f0f607f

+ 9 - 9
Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs

@@ -119,8 +119,15 @@ namespace Terminal.Gui {
 			Curses.raw ();
 			Curses.noecho ();
 			Curses.refresh ();
+			ProcessWinChange ();
+		}
+
+		private void ProcessWinChange ()
+		{
 			if (Curses.CheckWinChange ()) {
 				Clip = new Rect (0, 0, Cols, Rows);
+				Console.Out.Write ("\x1b[3J");
+				Console.Out.Flush ();
 				UpdateOffScreen ();
 				TerminalResized?.Invoke ();
 			}
@@ -625,10 +632,7 @@ namespace Terminal.Gui {
 
 			if (code == Curses.KEY_CODE_YES) {
 				if (wch == Curses.KeyResize) {
-					if (Curses.CheckWinChange ()) {
-						TerminalResized?.Invoke ();
-						return;
-					}
+					ProcessWinChange ();
 				}
 				if (wch == Curses.KeyMouse) {
 					Curses.getmouse (out Curses.MouseEvent ev);
@@ -802,11 +806,7 @@ namespace Terminal.Gui {
 			});
 
 			mLoop.WinChanged += () => {
-				if (Curses.CheckWinChange ()) {
-					Clip = new Rect (0, 0, Cols, Rows);
-					UpdateOffScreen ();
-					TerminalResized?.Invoke ();
-				}
+				ProcessWinChange ();
 			};
 		}
 

+ 4 - 9
Terminal.Gui/ConsoleDrivers/NetDriver.cs

@@ -1423,6 +1423,8 @@ namespace Terminal.Gui {
 				}
 			}
 			Clip = new Rect (0, 0, Cols, Rows);
+			Console.Out.Write ("\x1b[3J");
+			Console.Out.Flush ();
 		}
 
 		public override void UpdateOffScreen ()
@@ -1442,8 +1444,6 @@ namespace Terminal.Gui {
 						}
 					}
 				} catch (IndexOutOfRangeException) { }
-
-				winChanging = false;
 			}
 		}
 
@@ -1462,7 +1462,7 @@ namespace Terminal.Gui {
 
 		public override void UpdateScreen ()
 		{
-			if (winChanging || Console.WindowHeight == 0 || contents.Length != Rows * Cols * 3
+			if (Console.WindowHeight == 0 || contents.Length != Rows * Cols * 3
 				|| (!HeightAsBuffer && Rows != Console.WindowHeight)
 				|| (HeightAsBuffer && Rows != largestWindowHeight)) {
 				return;
@@ -1815,11 +1815,8 @@ namespace Terminal.Gui {
 			}
 		}
 
-		bool winChanging;
-
 		void ChangeWin ()
 		{
-			winChanging = true;
 			const int Min_WindowWidth = 14;
 			Size size = new Size ();
 			if (!HeightAsBuffer) {
@@ -1836,9 +1833,7 @@ namespace Terminal.Gui {
 			rows = size.Height;
 			ResizeScreen ();
 			UpdateOffScreen ();
-			if (!winChanging) {
-				TerminalResized.Invoke ();
-			}
+			TerminalResized?.Invoke ();
 		}
 
 		MouseEvent ToDriverMouse (NetEvents.MouseEvent me)

+ 2 - 0
Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

@@ -1436,6 +1436,8 @@ namespace Terminal.Gui {
 				Right = (short)Cols
 			};
 			WinConsole.ForceRefreshCursorVisibility ();
+			Console.Out.Write ("\x1b[3J");
+			Console.Out.Flush ();
 		}
 
 		public override void UpdateOffScreen ()