private GraphicsPath CreateArrowPath(ToolStripItem item,
Rectangle rect,
ArrowDirection direction)
{
int x, y;
// Find the correct starting position, which depends on direction
if ((direction == ArrowDirection.Left) ||
(direction == ArrowDirection.Right))
{
x = rect.Right - (rect.Width - 4) / 2;
y = rect.Y + rect.Height / 2;
}
else
{
x = rect.X + rect.Width / 2;
y = rect.Bottom - (rect.Height - 3) / 2;
// The drop down button is position 1 pixel incorrectly when in RTL
if ((item is ToolStripDropDownButton) &&
(item.RightToLeft == RightToLeft.Yes))
x++;
}
// Create triangle using a series of lines
GraphicsPath path = new GraphicsPath();
switch (direction)
{
case ArrowDirection.Right:
path.AddLine(x, y, x - 4, y - 4);
path.AddLine(x - 4, y - 4, x - 4, y + 4);
path.AddLine(x - 4, y + 4, x, y);
break;
case ArrowDirection.Left:
path.AddLine(x - 4, y, x, y - 4);
path.AddLine(x, y - 4, x, y + 4);
path.AddLine(x, y + 4, x - 4, y);
break;
case ArrowDirection.Down:
path.AddLine(x + 3f, y - 3f, x - 2f, y - 3f);
path.AddLine(x - 2f, y - 3f, x, y);
path.AddLine(x, y, x + 3f, y - 3f);
break;
case ArrowDirection.Up:
path.AddLine(x + 3f, y, x - 3f, y);
path.AddLine(x - 3f, y, x, y - 4f);
path.AddLine(x, y - 4f, x + 3f, y);
break;
}
return path;
}