diff --git a/Terminal.Gui/Driver.cs b/Terminal.Gui/Driver.cs
index 0c9219835..fff442c1b 100644
--- a/Terminal.Gui/Driver.cs
+++ b/Terminal.Gui/Driver.cs
@@ -161,6 +161,22 @@ namespace Terminal.Gui {
/// Horizontal line character.
///
HLine,
+
+ ///
+ /// Vertical line character.
+ ///
+ VLine,
+
+ ///
+ /// Stipple pattern
+ ///
+ Stipple,
+
+ ///
+ /// Diamond character
+ ///
+ Diamond,
+
}
///
@@ -298,6 +314,15 @@ namespace Terminal.Gui {
case SpecialChar.HLine:
AddRune (Curses.ACS_HLINE);
break;
+ case SpecialChar.VLine:
+ AddRune (Curses.ACS_VLINE);
+ break;
+ case SpecialChar.Stipple:
+ AddRune (Curses.ACS_CKBOARD);
+ break;
+ case SpecialChar.Diamond:
+ AddRune (Curses.ACS_DIAMOND);
+ break;
}
}
diff --git a/Terminal.Gui/MonoCurses/constants.cs b/Terminal.Gui/MonoCurses/constants.cs
index 7a3864cb6..6ea941463 100644
--- a/Terminal.Gui/MonoCurses/constants.cs
+++ b/Terminal.Gui/MonoCurses/constants.cs
@@ -21,6 +21,25 @@ namespace Unix.Terminal {
public const int ACS_ULCORNER = unchecked((int)0x40006c);
public const int ACS_URCORNER = unchecked((int)0x40006b);
public const int ACS_VLINE = unchecked((int)0x400078);
+ public const int ACS_LTEE = unchecked((int)0x400074);
+ public const int ACS_RTEE = unchecked((int)0x400075);
+ public const int ACS_BTEE = unchecked((int)0x400076);
+ public const int ACS_TTEE = unchecked((int)0x400077);
+ public const int ACS_PLUS = unchecked((int)0x40006e);
+ public const int ACS_S1 = unchecked((int)0x40006f);
+ public const int ACS_S9 = unchecked((int)0x400073);
+ public const int ACS_DIAMOND = unchecked((int)0x400060);
+ public const int ACS_CKBOARD = unchecked((int)0x400061);
+ public const int ACS_DEGREE = unchecked((int)0x400066);
+ public const int ACS_PLMINUS = unchecked((int)0x400067);
+ public const int ACS_BULLET = unchecked((int)0x40007e);
+ public const int ACS_LARROW = unchecked((int)0x40002c);
+ public const int ACS_RARROW = unchecked((int)0x40002b);
+ public const int ACS_DARROW = unchecked((int)0x40002e);
+ public const int ACS_UARROW = unchecked((int)0x40002d);
+ public const int ACS_BOARD = unchecked((int)0x400068);
+ public const int ACS_LANTERN = unchecked((int)0x400069);
+ public const int ACS_BLOCK = unchecked((int)0x400030);
public const int COLOR_BLACK = unchecked((int)0x0);
public const int COLOR_RED = unchecked((int)0x1);
public const int COLOR_GREEN = unchecked((int)0x2);
diff --git a/Terminal.Gui/Views/ScrollView.cs b/Terminal.Gui/Views/ScrollView.cs
index 999f9cb3f..9bc13d04a 100644
--- a/Terminal.Gui/Views/ScrollView.cs
+++ b/Terminal.Gui/Views/ScrollView.cs
@@ -98,10 +98,48 @@ namespace Terminal.Gui {
{
var oldClip = ClipToBounds ();
base.Redraw(region);
- Driver.SetAttribute (ColorScheme.Normal);
+ Attribute last = ColorScheme.Normal;
+ Driver.SetAttribute (last);
+
+ void SetColor (Attribute a)
+ {
+ if (a != last)
+ Driver.SetAttribute (a);
+ last = a;
+ }
- DrawFrame (Bounds);
Driver.Clip = oldClip;
+
+ if (true || ShowVerticalScrollIndicator) {
+ var bh = Bounds.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);
+ if (y < by1 || y > by2)
+ Driver.AddSpecial (SpecialChar.Stipple);
+ else
+ Driver.AddSpecial (SpecialChar.Diamond);
+ }
+ }
+ if (true || ShowHorizontalScrollIndicator){
+ var bw = Bounds.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++) {
+ if (x < bx1 || x > bx2){
+ SetColor (ColorScheme.Normal);
+ Driver.AddSpecial (SpecialChar.Stipple);
+ } else {
+ // Driver.AddSpecial (SpecialChar.Diamond);
+ SetColor (ColorScheme.Focus);
+ Driver.AddSpecial (SpecialChar.Stipple);
+ }
+ }
+ }
}
}
}
diff --git a/demo.cs b/demo.cs
index 4fbae86f8..9637a4d0f 100644
--- a/demo.cs
+++ b/demo.cs
@@ -2,8 +2,8 @@ using Terminal.Gui;
using System;
class Demo {
- class MyView : View {
- public MyView (int x, int y) : base (new Rect (x, y, 10, 10))
+ class Box10x : View {
+ public Box10x (int x, int y) : base (new Rect (x, y, 10, 10))
{
}
@@ -20,9 +20,40 @@ class Demo {
}
}
-
}
+ class Filler : View {
+ public Filler (Rect rect) : base (rect)
+ {
+ }
+
+ public override void Redraw(Rect region)
+ {
+ Driver.SetAttribute (ColorScheme.Focus);
+ var f = Frame;
+
+ for (int y = 0; y < f.Width; y++) {
+ Move (0, y);
+ for (int x = 0; x < f.Height; x++) {
+ Rune r;
+ switch (x % 3) {
+ case 0:
+ r = '.';
+ break;
+ case 1:
+ r = 'o';
+ break;
+ default:
+ r = 'O';
+ break;
+ }
+ Driver.AddRune (r);
+ }
+ }
+ }
+ }
+
+
static void ShowTextAlignments (View container)
{
container.Add (
@@ -36,10 +67,11 @@ class Demo {
{
var scrollView = new ScrollView (new Rect (50, 10, 20, 8)) {
ContentSize = new Size (100, 100),
- ContentOffset = new Point (-1, -1)
+ ContentOffset = new Point (5, -2)
};
- scrollView.Add (new MyView (0, 0));
+ //scrollView.Add (new Box10x (0, 0));
+ scrollView.Add (new Filler (new Rect (0, 0, 40, 40)));
container.Add (
new Label (3, 6, "Login: "),