/////////////////////////////////////////////////////////////////////////////////
// Paint.NET //
// Copyright (C) Rick Brewster, Tom Jackson, and past contributors. //
// Portions Copyright (C) Microsoft Corporation. All Rights Reserved. //
// See src/Resources/Files/License.txt for full licensing and attribution //
// details. //
// . //
/////////////////////////////////////////////////////////////////////////////////
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace PaintDotNet.Effects
{
public class EffectEnvironmentParameters
: IDisposable
{
public static EffectEnvironmentParameters DefaultParameters
{
get
{
return new EffectEnvironmentParameters(ColorBgra.FromBgra(255, 255, 255, 255),
ColorBgra.FromBgra(0, 0, 0, 255),
2.0f,
new PdnRegion());
}
}
private ColorBgra primaryColor = ColorBgra.FromBgra(0, 0, 0, 0);
private ColorBgra secondaryColor = ColorBgra.FromBgra(0, 0, 0, 0);
private float brushWidth = 0.0f;
private PdnRegion selection;
private bool haveIntersectedSelection = false;
[Obsolete("This property has been renamed. Use PrimaryColor instead.", true)]
public ColorBgra ForeColor
{
get
{
return PrimaryColor;
}
}
public ColorBgra PrimaryColor
{
get
{
return this.primaryColor;
}
}
[Obsolete("This property has been renamed. Use SecondaryColor instead.")]
public ColorBgra BackColor
{
get
{
return SecondaryColor;
}
}
public ColorBgra SecondaryColor
{
get
{
return this.secondaryColor;
}
}
public float BrushWidth
{
get
{
return this.brushWidth;
}
}
///
/// Gets the user's currently selected area.
///
///
/// The bounding rectangle of the surface you will be rendering to.
/// The region returned will be clipped to this bounding rectangle.
///
///
/// Note that calls to Render() will already be clipped to this selection area.
/// This data is only useful when an effect wants to change its rendering based
/// on what the user has selected. For instance, This is used by Auto-Levels to
/// only calculate new levels based on what the user has selected
///
public PdnRegion GetSelection(Rectangle boundingRect)
{
if (!this.haveIntersectedSelection)
{
this.selection.Intersect(boundingRect);
this.haveIntersectedSelection = true;
}
return this.selection;
}
public EffectEnvironmentParameters(ColorBgra primaryColor, ColorBgra secondaryColor, float brushWidth, PdnRegion selection)
{
this.primaryColor = primaryColor;
this.secondaryColor = secondaryColor;
this.brushWidth = brushWidth;
this.selection = (PdnRegion)selection.Clone();
}
~EffectEnvironmentParameters()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (disposing)
{
if (this.selection != null)
{
this.selection.Dispose();
this.selection = null;
}
}
}
}
}