protected override void OnPaint(PaintEventArgs e) { var g = e.Graphics; g.TextRenderingHint = TextRenderingHint.AntiAlias; g.Clear(SkinManager.GetApplicationBackgroundColor()); g.FillRectangle(SkinManager.ColorScheme.DarkPrimaryBrush, statusBarBounds); g.FillRectangle(SkinManager.ColorScheme.PrimaryBrush, actionBarBounds); //Draw border using (var borderPen = new Pen(SkinManager.GetDividersColor(), 1)) { g.DrawLine(borderPen, new Point(0, actionBarBounds.Bottom), new Point(0, Height - 2)); g.DrawLine(borderPen, new Point(Width - 1, actionBarBounds.Bottom), new Point(Width - 1, Height - 2)); g.DrawLine(borderPen, new Point(0, Height - 1), new Point(Width - 1, Height - 1)); } // Determine whether or not we even should be drawing the buttons. bool showMin = MinimizeBox && ControlBox; bool showMax = MaximizeBox && ControlBox; var hoverBrush = SkinManager.GetFlatButtonHoverBackgroundBrush(); var downBrush = SkinManager.GetFlatButtonPressedBackgroundBrush(); // When MaximizeButton == false, the minimize button will be painted in its place if (buttonState == ButtonState.MinOver && showMin) { g.FillRectangle(hoverBrush, showMax ? minButtonBounds : maxButtonBounds); } if (buttonState == ButtonState.MinDown && showMin) { g.FillRectangle(downBrush, showMax ? minButtonBounds : maxButtonBounds); } if (buttonState == ButtonState.MaxOver && showMax) { g.FillRectangle(hoverBrush, maxButtonBounds); } if (buttonState == ButtonState.MaxDown && showMax) { g.FillRectangle(downBrush, maxButtonBounds); } if (buttonState == ButtonState.XOver && ControlBox) { g.FillRectangle(hoverBrush, xButtonBounds); } if (buttonState == ButtonState.XDown && ControlBox) { g.FillRectangle(downBrush, xButtonBounds); } using (var formButtonsPen = new Pen(SkinManager.ACTION_BAR_TEXT_SECONDARY, 2)) { // Minimize button. if (showMin) { int x = showMax ? minButtonBounds.X : maxButtonBounds.X; int y = showMax ? minButtonBounds.Y : maxButtonBounds.Y; g.DrawLine( formButtonsPen, x + (int)(minButtonBounds.Width * 0.33), y + (int)(minButtonBounds.Height * 0.66), x + (int)(minButtonBounds.Width * 0.66), y + (int)(minButtonBounds.Height * 0.66) ); } // Maximize button if (showMax) { g.DrawRectangle( formButtonsPen, maxButtonBounds.X + (int)(maxButtonBounds.Width * 0.33), maxButtonBounds.Y + (int)(maxButtonBounds.Height * 0.36), (int)(maxButtonBounds.Width * 0.39), (int)(maxButtonBounds.Height * 0.31) ); } // Close button if (ControlBox) { g.DrawLine( formButtonsPen, xButtonBounds.X + (int)(xButtonBounds.Width * 0.33), xButtonBounds.Y + (int)(xButtonBounds.Height * 0.33), xButtonBounds.X + (int)(xButtonBounds.Width * 0.66), xButtonBounds.Y + (int)(xButtonBounds.Height * 0.66) ); g.DrawLine( formButtonsPen, xButtonBounds.X + (int)(xButtonBounds.Width * 0.66), xButtonBounds.Y + (int)(xButtonBounds.Height * 0.33), xButtonBounds.X + (int)(xButtonBounds.Width * 0.33), xButtonBounds.Y + (int)(xButtonBounds.Height * 0.66)); } } //Form title g.DrawString(Text, SkinManager.ROBOTO_MEDIUM_12, SkinManager.ColorScheme.TextBrush, new Rectangle(SkinManager.FORM_PADDING, STATUS_BAR_HEIGHT, Width, ACTION_BAR_HEIGHT), new StringFormat { LineAlignment = StringAlignment.Center }); }