protected override void OnMouseDown(Document document, ToolMouseEventArgs e)
{
var pos = e.Point;
// Don't do anything if we're outside the canvas
if (pos.X < 0 || pos.X >= document.ImageSize.Width)
{
return;
}
if (pos.Y < 0 || pos.Y >= document.ImageSize.Height)
{
return;
}
base.OnMouseDown(document, e);
using (var currentRegion = new Cairo.Region(document.GetSelectedBounds(true).ToCairoRectangleInt())) {
// See if the mouse click is valid
if (!currentRegion.ContainsPoint(pos.X, pos.Y) && LimitToSelection)
{
return;
}
var surface = document.Layers.CurrentUserLayer.Surface;
var stencilBuffer = new BitMask(surface.Width, surface.Height);
var tol = (int)(Tolerance * Tolerance * 256);
Rectangle boundingBox;
if (IsContinguousMode)
{
CairoExtensions.FillStencilFromPoint(surface, stencilBuffer, pos, tol, out boundingBox, currentRegion, LimitToSelection);
}
else
{
CairoExtensions.FillStencilByColor(surface, stencilBuffer, surface.GetColorBgraUnchecked(pos.X, pos.Y), tol, out boundingBox, currentRegion, LimitToSelection);
}
OnFillRegionComputed(document, stencilBuffer);
// If a derived tool is only going to use the stencil,
// don't waste time building the polygon set
if (CalculatePolygonSet)
{
var polygonSet = stencilBuffer.CreatePolygonSet(boundingBox, 0, 0);
OnFillRegionComputed(document, polygonSet);
}
}
}