89 lines
3.0 KiB
C#

using System;
using System.Drawing.Drawing2D;
using System.Drawing;
namespace DevComponents.DotNetBar
{
/// <summary>
/// Represents class for item display.
/// </summary>
internal class ItemDisplay
{
public ItemDisplay()
{
}
public void Paint(ItemContainer container, ItemPaintArgs p)
{
foreach(BaseItem item in container.SubItems)
{
if(item.Visible && item.Displayed)
{
if (item.BeginGroup)
{
if (p.Renderer != null)
p.Renderer.DrawItemContainerSeparator(new ItemContainerSeparatorRendererEventArgs(p.Graphics, container, item));
}
if (p.ClipRectangle.IsEmpty || p.ClipRectangle.IntersectsWith(item.DisplayRectangle))
{
Region oldClip = p.Graphics.Clip as Region;
p.Graphics.SetClip(item.DisplayRectangle, CombineMode.Intersect);
if (!p.Graphics.IsClipEmpty)
item.Paint(p);
p.Graphics.Clip = oldClip;
if (oldClip != null) oldClip.Dispose();
}
}
}
}
public void Paint(BaseItem container, ItemPaintArgs p)
{
foreach (BaseItem item in container.SubItems)
{
if (item.Visible && item.Displayed)
{
if (p.ClipRectangle.IsEmpty || p.ClipRectangle.IntersectsWith(item.DisplayRectangle))
{
Region oldClip = p.Graphics.Clip; //.Clone() as Region;
p.Graphics.SetClip(item.DisplayRectangle, CombineMode.Intersect);
item.Paint(p);
p.Graphics.Clip = oldClip;
if (oldClip != null)
oldClip.Dispose();
}
}
}
}
public void Paint(StepItemContainer container, ItemPaintArgs p)
{
StepItem mouseOverItem = null;
foreach (BaseItem item in container.SubItems)
{
if (item.Visible && item.Displayed)
{
if (p.ClipRectangle.IsEmpty || p.ClipRectangle.IntersectsWith(item.DisplayRectangle))
{
if (item is StepItem && ((StepItem)item).IsMouseOver)
{
mouseOverItem = (StepItem)item;
continue;
}
Region oldClip = p.Graphics.Clip;
p.Graphics.SetClip(item.DisplayRectangle, CombineMode.Intersect);
item.Paint(p);
p.Graphics.Clip = oldClip;
if (oldClip != null)
oldClip.Dispose();
}
}
}
if (mouseOverItem != null)
{
mouseOverItem.Paint(p);
}
}
}
}