public void Click(ScreenDrawingSurface surface, Point location)
{
Point tilePos = new Point(location.X / surface.Screen.Tileset.TileSize, location.Y / surface.Screen.Tileset.TileSize);
var selection = surface.Selection;
if (selection != null)
{
// only paint inside selection
if (!selection.Value.Contains(tilePos))
{
startTiles = null;
endTiles = null;
return;
}
}
startTiles = new int?[surface.Screen.Width, surface.Screen.Height];
endTiles = new int?[surface.Screen.Width, surface.Screen.Height];
// check for line drawing
if ((Control.ModifierKeys & Keys.Shift) != Keys.None)
{
var xdist = Math.Abs(tilePos.X - currentTilePos.X);
var ydist = Math.Abs(tilePos.Y - currentTilePos.Y);
if (xdist >= ydist)
{
var min = Math.Min(currentTilePos.X, tilePos.X);
var max = Math.Max(currentTilePos.X, tilePos.X);
for (int i = min; i <= max; i += brush.Width)
{
Draw(surface, i, currentTilePos.Y);
}
}
else
{
var min = Math.Min(currentTilePos.Y, tilePos.Y);
var max = Math.Max(currentTilePos.Y, tilePos.Y);
for (int i = min; i <= max; i += brush.Height)
{
Draw(surface, currentTilePos.X, i);
}
}
}
else
{
Draw(surface, tilePos.X, tilePos.Y);
held = true;
}
currentTilePos = tilePos;
}