using System;
using System.Text;
using System.Drawing;
using System.ComponentModel;
using DevComponents.AdvTree;
using System.Drawing.Drawing2D;
using DevComponents.DotNetBar;
namespace DevComponents.WinForms.Drawing
{
internal class RectangleShape : Shape
{
#region Internal Implementation
///
/// Renders rectangle on canvas.
///
/// Target graphics to render shape on.
/// Shape bounds.
public override void Paint(Graphics g, Rectangle bounds)
{
if (bounds.Width < 2 || bounds.Height < 2 || g == null || _Fill == null && _Border == null) return;
GraphicsPath path = null;
if (!_CornerRadius.IsZero)
{
path = DisplayHelp.GetRoundedRectanglePath(bounds, _CornerRadius.TopLeft, _CornerRadius.TopRight,
_CornerRadius.BottomRight, _CornerRadius.BottomLeft);
}
if (_Fill != null)
{
Brush brush = _Fill.CreateBrush(bounds);
if (brush != null)
{
SmoothingMode sm = g.SmoothingMode;
if (brush is SolidBrush && path==null)
g.SmoothingMode = SmoothingMode.None;
if (path == null)
g.FillRectangle(brush, bounds);
else
g.FillPath(brush, path);
g.SmoothingMode = sm;
brush.Dispose();
}
}
if (_Border != null)
{
Pen pen = _Border.CreatePen();
if (pen != null)
{
if (path == null)
g.DrawRectangle(pen, bounds);
else
g.DrawPath(pen, path);
pen.Dispose();
}
}
Shape content = this.Content;
if (content != null)
{
Rectangle contentBounds = Border.Deflate(bounds, _Border);
Region oldClip = null;
if (path != null && ClipToBounds)
{
oldClip = g.Clip;
g.SetClip(path, CombineMode.Intersect);
}
content.Paint(g, contentBounds);
if (oldClip != null) g.Clip = oldClip;
}
if (path != null) path.Dispose();
}
private Border _Border;
///
/// Gets or sets shape border.
///
[DefaultValue(null), Description("Indicates shape border.")]
public Border Border
{
get { return _Border; }
set { _Border = value; }
}
private Fill _Fill = null;
///
/// Gets or sets the shape fill.
///
[DefaultValue(null), Description("Indicates shape fill")]
public Fill Fill
{
get { return _Fill; }
set { _Fill = value; }
}
private CornerRadius _CornerRadius;
///
/// Gets or sets the CornerRadius.
///
public CornerRadius CornerRadius
{
get { return _CornerRadius; }
set { _CornerRadius = value; }
}
///
/// Gets whether property should be serialized.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeCornerRadius()
{
return !_CornerRadius.IsZero;
}
///
/// Resets the property to its default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetCornerRadius()
{
CornerRadius = new CornerRadius();
}
#endregion
}
}