96 lines
4.2 KiB
C#
96 lines
4.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
|
|
namespace DevComponents.DotNetBar.Layout
|
|
{
|
|
internal static class DrawingHelpers
|
|
{
|
|
/// <summary>
|
|
/// Draws the border.
|
|
/// </summary>
|
|
/// <param name="g">Graphics canvas.</param>
|
|
/// <param name="bounds">Bounds for border.</param>
|
|
/// <param name="borderThickness">Border thickness.</param>
|
|
/// <param name="borderPattern">Border pattern.</param>
|
|
/// <param name="borderColor">Border color.</param>
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|