protected override Color GetBackgroundColor() => GridEntryHost.GetLineColor();
public override void PaintOutline(System.Drawing.Graphics g, Rectangle r) { // draw outline pointer triangle. if (Expandable) { bool fExpanded = Expanded; Rectangle outline = OutlineRect; // make sure we're in our bounds outline = Rectangle.Intersect(r, outline); if (outline.IsEmpty) { return; } #if PAINT_CATEGORY_TRIANGLE // bump it over a pixel //outline.Offset(1, 0); //outline.Inflate(-1,-1); // build the triangle, an equalaterial centered around the midpoint of the rect. Point[] points = new Point[3]; int borderWidth = 2; // width is always the length of the sides of the triangle. // Height = (width /2 * (Cos60)) ; Cos60 ~ .86 int triWidth, triHeight; int xOffset, yOffset; if (!fExpanded) { // draw arrow pointing right, remember height is pointing right // 0 // |\ // | \2 // | / // |/ // 1 triWidth = (int)((outline.Height * TRI_WIDTH_RATIO) - (2 * borderWidth)); // make sure it's an odd width so our lines will match up if (!(triWidth % 2 == 0)) { triWidth++; } triHeight = (int)Math.Ceil((triWidth / 2) * TRI_HEIGHT_RATIO); yOffset = outline.Y + (outline.Height - triWidth) / 2; xOffset = outline.X + (outline.Width - triHeight) / 2; points[0] = new Point(xOffset, yOffset); points[1] = new Point(xOffset, yOffset + triWidth); points[2] = new Point(xOffset + triHeight, yOffset + (triWidth / 2)); } else { // draw arrow pointing down // 0 -------- 1 // \ / // \ / // \ / // \/ // 2 triWidth = (int)((outline.Width * TRI_WIDTH_RATIO) - (2 * borderWidth)); // make sure it's an odd width so our lines will match up if (!(triWidth % 2 == 0)) { triWidth++; } triHeight = (int)Math.Ceil((triWidth / 2) * TRI_HEIGHT_RATIO); xOffset = outline.X + (outline.Width - triWidth) / 2; yOffset = outline.Y + (outline.Height - triHeight) / 2; points[0] = new Point(xOffset, yOffset); points[1] = new Point(xOffset + triWidth, yOffset); points[2] = new Point(xOffset + (triWidth / 2), yOffset + triHeight); } g.FillPolygon(SystemPens.WindowText, points); #else // draw border area box Brush b; Pen p; bool disposeBrush = false; bool disposePen = false; Color color = GridEntryHost.GetLineColor(); b = new SolidBrush(g.GetNearestColor(color)); disposeBrush = true; color = GridEntryHost.GetTextColor(); p = new Pen(g.GetNearestColor(color)); disposePen = true; g.FillRectangle(b, outline); g.DrawRectangle(p, outline.X, outline.Y, outline.Width - 1, outline.Height - 1); // draw horizontal line for +/- int indent = 2; g.DrawLine(SystemPens.WindowText, outline.X + indent, outline.Y + outline.Height / 2, outline.X + outline.Width - indent - 1, outline.Y + outline.Height / 2); // draw vertical line to make a + if (!fExpanded) { g.DrawLine(SystemPens.WindowText, outline.X + outline.Width / 2, outline.Y + indent, outline.X + outline.Width / 2, outline.Y + outline.Height - indent - 1); } if (disposePen) { p.Dispose(); } if (disposeBrush) { b.Dispose(); } #endif } }