using System;
using System.Drawing;
namespace PaintDotNet
{
public abstract class StitchSurfaceBoxRenderer : IDisposable
{
private bool disposed = false;
private StitchSurfaceBoxRendererList ownerList;
private bool visible;
public const int MinXCoordinate = -131072;
public const int MaxXCoordinate = +131072;
public const int MinYCoordinate = -131072;
public const int MaxYCoordinate = +131072;
public bool IsDisposed
{
get
{
return this.disposed;
}
}
public static Rectangle MaxBounds
{
get
{
return Rectangle.FromLTRB(MinXCoordinate, MinYCoordinate, MaxXCoordinate + 1, MaxYCoordinate + 1);
}
}
protected object SyncRoot
{
get
{
return OwnerList.SyncRoot;
}
}
protected StitchSurfaceBoxRendererList OwnerList
{
get
{
return this.ownerList;
}
}
public virtual void OnSourceSizeChanged()
{
}
public virtual void OnDestinationSizeChanged()
{
}
public Size SourceSize
{
get
{
return this.OwnerList.SourceSize;
}
}
public Size DestinationSize
{
get
{
return this.OwnerList.DestinationSize;
}
}
protected virtual void OnVisibleChanging()
{
}
protected abstract void OnVisibleChanged();
public bool Visible
{
get
{
return this.visible;
}
set
{
if (this.visible != value)
{
OnVisibleChanging();
this.visible = value;
OnVisibleChanged();
}
}
}
protected delegate void RenderDelegate(StitchSurface dst, Point offset);
///
/// Renders, at the appropriate scale, the layer's imagery.
///
/// The Surface to render to.
/// The (x,y) location of the upper-left corner of dst within DestinationSize.
public abstract void Render(StitchSurface dst, Point offset);
protected virtual void OnInvalidate(Rectangle rect)
{
this.OwnerList.Invalidate(rect);
}
public void Invalidate(Rectangle rect)
{
OnInvalidate(rect);
}
public void Invalidate(RectangleF rectF)
{
Rectangle rect = Utility.RoundRectangle(rectF);
Invalidate(rect);
}
public void Invalidate(PdnRegion region)
{
foreach (Rectangle rect in region.GetRegionScansReadOnlyInt())
{
Invalidate(rect);
}
}
public void Invalidate()
{
Invalidate(Rectangle.FromLTRB(MinXCoordinate, MinYCoordinate, MaxXCoordinate + 1, MaxYCoordinate + 1));
}
public StitchSurfaceBoxRenderer(StitchSurfaceBoxRendererList ownerList)
{
this.ownerList = ownerList;
this.visible = true;
}
~StitchSurfaceBoxRenderer()
{
this.Dispose(false);
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
this.disposed = true;
}
}
}