diff --git a/Terminal.Gui/Driver.cs b/Terminal.Gui/Driver.cs
index fff442c1b..372683794 100644
--- a/Terminal.Gui/Driver.cs
+++ b/Terminal.Gui/Driver.cs
@@ -177,6 +177,46 @@ namespace Terminal.Gui {
///
Diamond,
+ ///
+ /// Upper left corner
+ ///
+ ULCorner,
+
+ ///
+ /// Lower left corner
+ ///
+ LLCorner,
+
+ ///
+ /// Upper right corner
+ ///
+ URCorner,
+
+ ///
+ /// Lower right corner
+ ///
+ LRCorner,
+
+ ///
+ /// Left tee
+ ///
+ LeftTee,
+
+ ///
+ /// Right tee
+ ///
+ RightTee,
+
+ ///
+ /// Top tee
+ ///
+ TopTee,
+
+ ///
+ /// The bottom tee.
+ ///
+ BottomTee,
+
}
///
@@ -312,16 +352,40 @@ namespace Terminal.Gui {
{
switch (ch) {
case SpecialChar.HLine:
- AddRune (Curses.ACS_HLINE);
+ AddRune(Curses.ACS_HLINE);
break;
case SpecialChar.VLine:
- AddRune (Curses.ACS_VLINE);
+ AddRune(Curses.ACS_VLINE);
break;
case SpecialChar.Stipple:
- AddRune (Curses.ACS_CKBOARD);
+ AddRune(Curses.ACS_CKBOARD);
break;
case SpecialChar.Diamond:
- AddRune (Curses.ACS_DIAMOND);
+ AddRune(Curses.ACS_DIAMOND);
+ break;
+ case SpecialChar.ULCorner:
+ AddRune (Curses.ACS_ULCORNER);
+ break;
+ case SpecialChar.LLCorner:
+ AddRune (Curses.ACS_LLCORNER);
+ break;
+ case SpecialChar.URCorner:
+ AddRune (Curses.ACS_URCORNER);
+ break;
+ case SpecialChar.LRCorner:
+ AddRune (Curses.ACS_LRCORNER);
+ break;
+ case SpecialChar.LeftTee:
+ AddRune (Curses.ACS_LTEE);
+ break;
+ case SpecialChar.RightTee:
+ AddRune (Curses.ACS_RTEE);
+ break;
+ case SpecialChar.TopTee:
+ AddRune (Curses.ACS_TTEE);
+ break;
+ case SpecialChar.BottomTee:
+ AddRune (Curses.ACS_BTEE);
break;
}
}
diff --git a/Terminal.Gui/Views/ScrollView.cs b/Terminal.Gui/Views/ScrollView.cs
index 9bc13d04a..059c5574f 100644
--- a/Terminal.Gui/Views/ScrollView.cs
+++ b/Terminal.Gui/Views/ScrollView.cs
@@ -112,32 +112,54 @@ namespace Terminal.Gui {
if (true || ShowVerticalScrollIndicator) {
var bh = Bounds.Height;
- var by1 = contentOffset.Y * bh/ contentSize.Height;
- var by2 = (contentOffset.Y+bh) * bh/ contentSize.Height;
+ var by1 = -contentOffset.Y * bh/ contentSize.Height;
+ var by2 = (-contentOffset.Y+bh) * bh/ contentSize.Height;
for (int y = 0; y < bh; y++) {
Move (Bounds.Width - 1, y);
+ SpecialChar special;
+
if (y < by1 || y > by2)
- Driver.AddSpecial (SpecialChar.Stipple);
- else
- Driver.AddSpecial (SpecialChar.Diamond);
+ special = SpecialChar.Stipple;
+ else {
+ if (by2 - by1 == 0)
+ special = SpecialChar.Diamond;
+ else {
+ if (y == by1)
+ special = SpecialChar.TopTee;
+ else if (y == by2)
+ special = SpecialChar.BottomTee;
+ else
+ special = SpecialChar.VLine;
+ }
+ }
+ Driver.AddSpecial (special);
}
}
if (true || ShowHorizontalScrollIndicator){
var bw = Bounds.Width;
- var bx1 = contentOffset.X * bw / contentSize.Width;
- var bx2 = (contentOffset.X + bw) * bw / contentSize.Width;
+ var bx1 = -contentOffset.X * bw / contentSize.Width;
+ var bx2 = (-contentOffset.X + bw) * bw / contentSize.Width;
Move (0, Bounds.Height - 1);
for (int x = 0; x < bw; x++) {
+ SpecialChar special;
+
if (x < bx1 || x > bx2){
- SetColor (ColorScheme.Normal);
- Driver.AddSpecial (SpecialChar.Stipple);
+ special = SpecialChar.Stipple;
} else {
- // Driver.AddSpecial (SpecialChar.Diamond);
- SetColor (ColorScheme.Focus);
- Driver.AddSpecial (SpecialChar.Stipple);
+ if (bx2 - bx1 == 0)
+ special = SpecialChar.Diamond;
+ else {
+ if (x == bx1)
+ special = SpecialChar.LeftTee;
+ else if (x == bx2)
+ special = SpecialChar.RightTee;
+ else
+ special = SpecialChar.HLine;
+ }
}
+ Driver.AddSpecial (special);
}
}
}