using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace DevComponents.DotNetBar.Layout
{
internal static class DrawingHelpers
{
///
/// Draws the border.
///
/// Graphics canvas.
/// Bounds for border.
/// Border thickness.
/// Border pattern.
/// Border color.
public static void DrawBorder(Graphics g, RectangleF bounds, Thickness borderThickness, BorderPattern borderPattern, BorderColors borderColor)
{
if (borderColor.IsEmpty || borderThickness.IsZero || borderPattern.IsEmpty) return;
Region oldClip = g.Clip;
g.SetClip(bounds, System.Drawing.Drawing2D.CombineMode.Intersect);
bounds.Width -= Math.Max(1, (float)borderThickness.Horizontal / 2);
bounds.Height -= Math.Max(1, (float)borderThickness.Vertical / 2);
if (borderThickness.Left > 1)
bounds.X += (float)borderThickness.Left / 2;
if (borderThickness.Top > 1)
bounds.Y += (float)borderThickness.Top / 2;
if (borderThickness.Left > 0d && !borderColor.Left.IsEmpty && borderPattern.IsLeftVisible)
{
using (Pen pen = new Pen(borderColor.Left, (float)borderThickness.Left))
{
pen.DashStyle = (System.Drawing.Drawing2D.DashStyle)borderPattern.Left;
pen.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
g.DrawLine(pen, bounds.X, bounds.Y - (float)(borderThickness.Top / 2), bounds.X, bounds.Bottom + (float)(borderThickness.Bottom / 2));
}
}
if (borderThickness.Right > 0d && !borderColor.Right.IsEmpty && borderPattern.IsRightVisible)
{
using (Pen pen = new Pen(borderColor.Right, (float)borderThickness.Right))
{
pen.DashStyle = (System.Drawing.Drawing2D.DashStyle)borderPattern.Right;
pen.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
g.DrawLine(pen, bounds.Right, bounds.Y - (float)(borderThickness.Top / 2), bounds.Right, bounds.Bottom + (float)(borderThickness.Bottom / 2));
}
}
if (borderThickness.Top > 0d && !borderColor.Top.IsEmpty && borderPattern.IsTopVisible)
{
using (Pen pen = new Pen(borderColor.Top, (float)borderThickness.Top))
{
pen.DashStyle = (System.Drawing.Drawing2D.DashStyle)borderPattern.Top;
pen.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
g.DrawLine(pen, bounds.X, bounds.Y, bounds.Right, bounds.Y);
}
}
if (borderThickness.Bottom > 0d && !borderColor.Bottom.IsEmpty && borderPattern.IsBottomVisible)
{
using (Pen pen = new Pen(borderColor.Bottom, (float)borderThickness.Bottom))
{
pen.DashStyle = (System.Drawing.Drawing2D.DashStyle)borderPattern.Bottom;
pen.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
g.DrawLine(pen, bounds.X, bounds.Bottom, bounds.Right, bounds.Bottom);
}
}
g.Clip = oldClip;
if (oldClip != null) oldClip.Dispose();
}
public static void PaintStyle(Graphics g, SimpleStyle style, Rectangle bounds)
{
if (style.IsPainted && !bounds.IsEmpty)
{
if (style.Background.IsBackgroundSet)
{
using (Brush brush = style.Background.CreateBrush(bounds))
g.FillRectangle(brush, bounds);
}
if (!style.BorderColors.IsEmpty && !style.BorderThickness.IsZero)
{
DrawingHelpers.DrawBorder(g, bounds, style.BorderThickness, style.BorderPattern, style.BorderColors);
}
}
}
}
}