public override void CPDrawScrollButton (Graphics dc, Rectangle area, ScrollButton type, ButtonState state)
{
DrawScrollButtonPrimitive (dc, area, state);
bool fill_rect = true;
int offset = 0;
if ((state & ButtonState.Pushed) != 0)
offset = 1;
// skip the border
Rectangle rect = new Rectangle (area.X + 2 + offset, area.Y + 2 + offset, area.Width - 4, area.Height - 4);
Point [] arrow = new Point [3];
for (int i = 0; i < 3; i++)
arrow [i] = new Point ();
Pen pen = SystemPens.ControlText;
if ((state & ButtonState.Inactive) != 0) {
pen = SystemPens.ControlDark;
}
switch (type) {
default:
case ScrollButton.Down:
int x_middle = (int)Math.Round (rect.Width / 2.0f) - 1;
int y_middle = (int)Math.Round (rect.Height / 2.0f) - 1;
if (x_middle == 1)
x_middle = 2;
int triangle_height;
if (rect.Height < 8) {
triangle_height = 2;
fill_rect = false;
} else if (rect.Height == 11) {
triangle_height = 3;
} else {
triangle_height = (int)Math.Round (rect.Height / 3.0f);
}
arrow [0].X = rect.X + x_middle;
arrow [0].Y = rect.Y + y_middle + triangle_height / 2;
arrow [1].X = arrow [0].X + triangle_height - 1;
arrow [1].Y = arrow [0].Y - triangle_height + 1;
arrow [2].X = arrow [0].X - triangle_height + 1;
arrow [2].Y = arrow [1].Y;
dc.DrawPolygon (pen, arrow);
if ((state & ButtonState.Inactive) != 0) {
dc.DrawLine (SystemPens.ControlLightLight, arrow [1].X + 1, arrow [1].Y + 1, arrow [0].X + 1, arrow [0].Y + 1);
dc.DrawLine (SystemPens.ControlLightLight, arrow [1].X, arrow [1].Y + 1, arrow [0].X + 1, arrow [0].Y);
}
if (fill_rect) {
for (int i = 0; i < arrow [0].Y - arrow [1].Y; i++) {
dc.DrawLine (pen, arrow [1].X, arrow [1].Y + i, arrow [2].X, arrow [1].Y + i);
arrow [1].X -= 1;
arrow [2].X += 1;
}
}
break;
case ScrollButton.Up:
x_middle = (int)Math.Round (rect.Width / 2.0f) - 1;
y_middle = (int)Math.Round (rect.Height / 2.0f);
if (x_middle == 1)
x_middle = 2;
if (y_middle == 1)
y_middle = 2;
if (rect.Height < 8) {
triangle_height = 2;
fill_rect = false;
} else if (rect.Height == 11) {
triangle_height = 3;
} else {
triangle_height = (int)Math.Round (rect.Height / 3.0f);
}
arrow [0].X = rect.X + x_middle;
arrow [0].Y = rect.Y + y_middle - triangle_height / 2;
arrow [1].X = arrow [0].X + triangle_height - 1;
arrow [1].Y = arrow [0].Y + triangle_height - 1;
arrow [2].X = arrow [0].X - triangle_height + 1;
arrow [2].Y = arrow [1].Y;
dc.DrawPolygon (pen, arrow);
if ((state & ButtonState.Inactive) != 0) {
dc.DrawLine (SystemPens.ControlLightLight, arrow [1].X + 1, arrow [1].Y + 1, arrow [2].X + 1, arrow [1].Y + 1);
}
if (fill_rect) {
for (int i = 0; i < arrow [1].Y - arrow [0].Y; i++) {
dc.DrawLine (pen, arrow [2].X, arrow [1].Y - i, arrow [1].X, arrow [1].Y - i);
arrow [1].X -= 1;
arrow [2].X += 1;
}
}
break;
case ScrollButton.Left:
y_middle = (int)Math.Round (rect.Height / 2.0f) - 1;
if (y_middle == 1)
y_middle = 2;
int triangle_width;
if (rect.Width < 8) {
triangle_width = 2;
fill_rect = false;
} else if (rect.Width == 11) {
triangle_width = 3;
} else {
triangle_width = (int)Math.Round (rect.Width / 3.0f);
}
arrow [0].X = rect.Left + triangle_width - 1;
arrow [0].Y = rect.Y + y_middle;
if (arrow [0].X - 1 == rect.X)
arrow [0].X += 1;
arrow [1].X = arrow [0].X + triangle_width - 1;
arrow [1].Y = arrow [0].Y - triangle_width + 1;
arrow [2].X = arrow [1].X;
arrow [2].Y = arrow [0].Y + triangle_width - 1;
dc.DrawPolygon (pen, arrow);
if ((state & ButtonState.Inactive) != 0) {
dc.DrawLine (SystemPens.ControlLightLight, arrow [1].X + 1, arrow [1].Y + 1, arrow [2].X + 1, arrow [2].Y + 1);
}
if (fill_rect) {
for (int i = 0; i < arrow [2].X - arrow [0].X; i++) {
dc.DrawLine (pen, arrow [2].X - i, arrow [1].Y, arrow [2].X - i, arrow [2].Y);
arrow [1].Y += 1;
arrow [2].Y -= 1;
}
}
break;
case ScrollButton.Right:
y_middle = (int)Math.Round (rect.Height / 2.0f) - 1;
if (y_middle == 1)
y_middle = 2;
if (rect.Width < 8) {
triangle_width = 2;
fill_rect = false;
} else if (rect.Width == 11) {
triangle_width = 3;
} else {
triangle_width = (int)Math.Round (rect.Width / 3.0f);
}
arrow [0].X = rect.Right - triangle_width - 1;
arrow [0].Y = rect.Y + y_middle;
if (arrow [0].X - 1 == rect.X)
arrow [0].X += 1;
arrow [1].X = arrow [0].X - triangle_width + 1;
arrow [1].Y = arrow [0].Y - triangle_width + 1;
arrow [2].X = arrow [1].X;
arrow [2].Y = arrow [0].Y + triangle_width - 1;
dc.DrawPolygon (pen, arrow);
if ((state & ButtonState.Inactive) != 0) {
dc.DrawLine (SystemPens.ControlLightLight, arrow [0].X + 1, arrow [0].Y + 1, arrow [2].X + 1, arrow [2].Y + 1);
dc.DrawLine (SystemPens.ControlLightLight, arrow [0].X, arrow [0].Y + 1, arrow [2].X + 1, arrow [2].Y);
}
if (fill_rect) {
for (int i = 0; i < arrow [0].X - arrow [1].X; i++) {
dc.DrawLine (pen, arrow [2].X + i, arrow [1].Y, arrow [2].X + i, arrow [2].Y);
arrow [1].Y += 1;
arrow [2].Y -= 1;
}
}
break;
}
}