From 29d355660e2492f0c61e0a83deef47358f29726e Mon Sep 17 00:00:00 2001 From: Miguel de Icaza Date: Thu, 25 Jan 2018 23:24:47 -0500 Subject: [PATCH] looks slightly better --- Terminal.Gui/Driver.cs | 72 ++++++++++++++++++++++++++++++-- Terminal.Gui/Views/ScrollView.cs | 46 ++++++++++++++------ 2 files changed, 102 insertions(+), 16 deletions(-) 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); } } }