Browse Source

Merge branch 'master' into idisposable

Charlie Kindel 5 years ago
parent
commit
85f7818796

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

@@ -223,7 +223,7 @@ namespace Terminal.Gui {
 				if (cev.ButtonState == Curses.Event.ReportMousePosition) {
 					mouseFlag = (MouseFlags)LastMouseButtonPressed | MouseFlags.ReportMousePosition;
 					point = new Point ();
-					cancelButtonClicked = true;
+					//cancelButtonClicked = true;
 				} else {
 					point = new Point () {
 						X = cev.X,

+ 14 - 5
Terminal.Gui/ConsoleDrivers/WindowsDriver.cs

@@ -866,7 +866,7 @@ namespace Terminal.Gui {
 					X = mouseEvent.MousePosition.X,
 					Y = mouseEvent.MousePosition.Y
 				};
-				if (p == point) {
+				//if (p == point) {
 					switch (LastMouseButtonPressed) {
 					case WindowsConsole.ButtonState.Button1Pressed:
 						mouseFlag = MouseFlags.Button1Clicked;
@@ -880,9 +880,13 @@ namespace Terminal.Gui {
 						mouseFlag = MouseFlags.Button3Clicked;
 						break;
 					}
-				} else {
-					mouseFlag = 0;
-				}
+					point = new Point () {
+						X = mouseEvent.MousePosition.X,
+						Y = mouseEvent.MousePosition.Y
+					};
+				//} else {
+				//	mouseFlag = 0;
+				//}
 				LastMouseButtonPressed = null;
 				IsButtonReleased = false;
 			} else if (mouseEvent.EventFlags.HasFlag (WindowsConsole.EventFlags.DoubleClick)) {
@@ -927,7 +931,12 @@ namespace Terminal.Gui {
 				}
 
 			} else if (mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved) {
-				mouseFlag = MouseFlags.ReportMousePosition;
+				if (mouseEvent.MousePosition.X != point.X || mouseEvent.MousePosition.Y != point.Y) {
+					mouseFlag = MouseFlags.ReportMousePosition;
+					point = new Point ();
+				} else {
+					mouseFlag = 0;
+				}
 			} else if (mouseEvent.ButtonState == 0 && mouseEvent.EventFlags == 0) {
 				mouseFlag = 0;
 			}

+ 5 - 5
Terminal.Gui/Views/Menu.cs

@@ -524,7 +524,7 @@ namespace Terminal.Gui {
 					Run (barItems.Children [meY].Action);
 				return true;
 			} else if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked ||
-				me.Flags == MouseFlags.ReportMousePosition ||
+				me.Flags == MouseFlags.Button1TripleClicked || me.Flags == MouseFlags.ReportMousePosition ||
 				me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition)) {
 				disabled = false;
 				if (me.Y < 1)
@@ -1161,7 +1161,7 @@ namespace Terminal.Gui {
 			}
 			handled = false;
 
-			if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1Clicked ||
+			if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked || me.Flags == MouseFlags.Button1Clicked ||
 				(me.Flags == MouseFlags.ReportMousePosition && selected > -1) ||
 				(me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition) && selected > -1)) {
 				int pos = 1;
@@ -1173,7 +1173,7 @@ namespace Terminal.Gui {
 								var menu = new Menu (this, i, 0, Menus [i]);
 								menu.Run (Menus [i].Action);
 							}
-						} else if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked) {
+						} else if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked) {
 							if (IsMenuOpen) {
 								CloseAllMenus ();
 							} else {
@@ -1209,7 +1209,7 @@ namespace Terminal.Gui {
 						me.View.MouseEvent (me);
 					}
 				} else if (!(me.View is MenuBar || me.View is Menu) && (me.Flags.HasFlag (MouseFlags.Button1Clicked) ||
-					me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked)) {
+					me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked)) {
 					Application.UngrabMouse ();
 					CloseAllMenus ();
 					handled = false;
@@ -1218,7 +1218,7 @@ namespace Terminal.Gui {
 					handled = false;
 					return false;
 				}
-			} else if (!IsMenuOpen && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition))) {
+			} else if (!IsMenuOpen && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1TripleClicked || me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition))) {
 				Application.GrabMouse (current);
 			} else if (IsMenuOpen && (me.View is MenuBar || me.View is Menu)) {
 				Application.GrabMouse (me.View);

+ 15 - 5
Terminal.Gui/Views/ScrollView.cs

@@ -122,6 +122,11 @@ namespace Terminal.Gui {
 			WantContinuousButtonPressed = true;
 		}
 
+		int posTopTee;
+		int posLeftTee;
+		int posBottomTee;
+		int posRightTee;
+
 		///<inheritdoc/>
 		public override void Redraw (Rect region)
 		{
@@ -170,9 +175,11 @@ namespace Terminal.Gui {
 							} else {
 								if (y == by1 && !hasTopTee) {
 									hasTopTee = true;
+									posTopTee = y;
 									special = Driver.TopTee;
 								} else if ((y >= by2 || by2 == 0) && !hasBottomTee) {
 									hasBottomTee = true;
+									posBottomTee = y;
 									special = Driver.BottomTee;
 								} else {
 									special = Driver.VLine;
@@ -222,9 +229,11 @@ namespace Terminal.Gui {
 							} else {
 								if (x == bx1 && !hasLeftTee) {
 									hasLeftTee = true;
+									posLeftTee = x;
 									special = Driver.LeftTee;
 								} else if ((x >= bx2 || bx2 == 0) && !hasRightTee) {
 									hasRightTee = true;
+									posRightTee = x;
 									special = Driver.RightTee;
 								} else {
 									special = Driver.HLine;
@@ -252,6 +261,8 @@ namespace Terminal.Gui {
 
 			int location = vertical ? me.Y : me.X;
 			int barsize = vertical ? Bounds.Height : Bounds.Width;
+			int posTopLeftTee = vertical ? posTopTee : posLeftTee;
+			int posBottomRightTee = vertical ? posBottomTee : posRightTee;
 
 			barsize -= 2;
 			var pos = Position;
@@ -265,12 +276,11 @@ namespace Terminal.Gui {
 				var b1 = pos * barsize / Size;
 				var b2 = (pos + barsize) * barsize / Size;
 
-				if (b2 == 0 && location == 1 && pos == 0 ||
-					(b2 == barsize && location == barsize) ||
-					(location > b1 && location < b2)) {
+				if (b1 == 0 && location == 1 && pos == 0 || (location >= posTopLeftTee + 1 && location <= posBottomRightTee + 1 && (pos != 0 || pos != Size - 1) && location != 1 && location != barsize) ||
+					(b2 == barsize + (b2 - b1 - 1) && location == barsize && pos == Size - 1)) {
 					return true;
 				} else if (location <= barsize) {
-					if (location > 1 && location >= b2)
+					if (location > 1 && location > posTopLeftTee && location > posBottomRightTee)
 						SetPosition (Math.Min (pos + (Size / location), Size - 1));
 					else if (location <= b2 && pos > 0 || pos > 0)
 						SetPosition (Math.Max (pos - (Size / barsize), 0));
@@ -556,7 +566,7 @@ namespace Terminal.Gui {
 		public bool ScrollDown (int lines)
 		{
 			var ny = Math.Max (-contentSize.Height, contentOffset.Y - lines);
-			if (Math.Abs (ny) == contentSize.Height)
+			if (ny == contentOffset.Y)
 				return false;
 			ContentOffset = new Point (contentOffset.X, ny);
 			return true;

+ 1 - 1
Terminal.Gui/Views/StatusBar.cs

@@ -100,7 +100,7 @@ namespace Terminal.Gui {
 				if (SuperView == null || SuperView == Application.Top) {
 					Y = Driver.Rows - 1;
 				} else {
-					Y = Pos.Bottom (SuperView);
+					//Y = Pos.Bottom (SuperView);
 				}
 			};