|
@@ -22,7 +22,8 @@ internal class ViewModelMain : INotifyPropertyChanged
|
|
public RelayCommand SetSelectionModeCommand { get; }
|
|
public RelayCommand SetSelectionModeCommand { get; }
|
|
|
|
|
|
public Color SelectedColor { get; set; } = Colors.Black;
|
|
public Color SelectedColor { get; set; } = Colors.Black;
|
|
- public bool KeepOriginalImageOnTransform { get; set; }
|
|
|
|
|
|
+ public bool KeepOriginalImageOnTransform { get; set; } = false;
|
|
|
|
+ public float StrokeWidth { get; set; } = 1f;
|
|
|
|
|
|
public event PropertyChangedEventHandler? PropertyChanged;
|
|
public event PropertyChangedEventHandler? PropertyChanged;
|
|
|
|
|
|
@@ -64,8 +65,7 @@ internal class ViewModelMain : INotifyPropertyChanged
|
|
private Dictionary<Guid, DocumentViewModel> documents = new();
|
|
private Dictionary<Guid, DocumentViewModel> documents = new();
|
|
private Guid activeDocumentGuid;
|
|
private Guid activeDocumentGuid;
|
|
|
|
|
|
- private int mouseDownCanvasX = 0;
|
|
|
|
- private int mouseDownCanvasY = 0;
|
|
|
|
|
|
+ private VecD mouseDownCanvasPos;
|
|
|
|
|
|
private bool mouseHasMoved = false;
|
|
private bool mouseHasMoved = false;
|
|
private bool mouseIsDown = false;
|
|
private bool mouseIsDown = false;
|
|
@@ -115,17 +115,24 @@ internal class ViewModelMain : INotifyPropertyChanged
|
|
var args = (MouseButtonEventArgs)(param!);
|
|
var args = (MouseButtonEventArgs)(param!);
|
|
var source = (System.Windows.Controls.Image)args.Source;
|
|
var source = (System.Windows.Controls.Image)args.Source;
|
|
var pos = args.GetPosition(source);
|
|
var pos = args.GetPosition(source);
|
|
- mouseDownCanvasX = (int)(pos.X / source.Width * ActiveDocument.Bitmaps[ChunkResolution.Full].PixelWidth);
|
|
|
|
- mouseDownCanvasY = (int)(pos.Y / source.Height * ActiveDocument.Bitmaps[ChunkResolution.Full].PixelHeight);
|
|
|
|
|
|
+ mouseDownCanvasPos = new()
|
|
|
|
+ {
|
|
|
|
+ X = pos.X / source.Width * ActiveDocument.Bitmaps[ChunkResolution.Full].PixelWidth,
|
|
|
|
+ Y = pos.Y / source.Height * ActiveDocument.Bitmaps[ChunkResolution.Full].PixelHeight
|
|
|
|
+ };
|
|
toolOnMouseDown = activeTool;
|
|
toolOnMouseDown = activeTool;
|
|
- ProcessToolMouseDown(mouseDownCanvasX, mouseDownCanvasY);
|
|
|
|
|
|
+ ProcessToolMouseDown(mouseDownCanvasPos);
|
|
}
|
|
}
|
|
|
|
|
|
- private void ProcessToolMouseDown(int canvasX, int canvasY)
|
|
|
|
|
|
+ private void ProcessToolMouseDown(VecD pos)
|
|
{
|
|
{
|
|
if (toolOnMouseDown is Tool.FloodFill)
|
|
if (toolOnMouseDown is Tool.FloodFill)
|
|
{
|
|
{
|
|
- ActiveDocument!.FloodFill(new VecI(canvasX, canvasY), new SKColor(SelectedColor.R, SelectedColor.G, SelectedColor.B, SelectedColor.A));
|
|
|
|
|
|
+ ActiveDocument!.FloodFill((VecI)pos, new SKColor(SelectedColor.R, SelectedColor.G, SelectedColor.B, SelectedColor.A));
|
|
|
|
+ }
|
|
|
|
+ else if (toolOnMouseDown == Tool.PathBasedPen)
|
|
|
|
+ {
|
|
|
|
+ ActiveDocument!.StartUpdatePathBasedPen(pos);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -137,21 +144,20 @@ internal class ViewModelMain : INotifyPropertyChanged
|
|
var args = (MouseEventArgs)(param!);
|
|
var args = (MouseEventArgs)(param!);
|
|
var source = (System.Windows.Controls.Image)args.Source;
|
|
var source = (System.Windows.Controls.Image)args.Source;
|
|
var pos = args.GetPosition(source);
|
|
var pos = args.GetPosition(source);
|
|
- int curX = (int)(pos.X / source.Width * ActiveDocument!.Bitmaps[ChunkResolution.Full].PixelWidth);
|
|
|
|
- int curY = (int)(pos.Y / source.Height * ActiveDocument.Bitmaps[ChunkResolution.Full].PixelHeight);
|
|
|
|
|
|
+ double curX = pos.X / source.Width * ActiveDocument!.Bitmaps[ChunkResolution.Full].PixelWidth;
|
|
|
|
+ double curY = pos.Y / source.Height * ActiveDocument.Bitmaps[ChunkResolution.Full].PixelHeight;
|
|
|
|
|
|
- ProcessToolMouseMove(curX, curY);
|
|
|
|
|
|
+ ProcessToolMouseMove(new VecD(curX, curY));
|
|
}
|
|
}
|
|
|
|
|
|
- private void ProcessToolMouseMove(int canvasX, int canvasY)
|
|
|
|
|
|
+ private void ProcessToolMouseMove(VecD canvasPos)
|
|
{
|
|
{
|
|
if (toolOnMouseDown == Tool.Rectangle)
|
|
if (toolOnMouseDown == Tool.Rectangle)
|
|
{
|
|
{
|
|
- int width = canvasX - mouseDownCanvasX;
|
|
|
|
- int height = canvasY - mouseDownCanvasY;
|
|
|
|
|
|
+ VecI size = (VecI)canvasPos - (VecI)mouseDownCanvasPos;
|
|
ActiveDocument!.StartUpdateRectangle(new ShapeData(
|
|
ActiveDocument!.StartUpdateRectangle(new ShapeData(
|
|
- new(mouseDownCanvasX + width / 2.0, mouseDownCanvasY + height / 2.0),
|
|
|
|
- new(width, height),
|
|
|
|
|
|
+ (VecI)mouseDownCanvasPos + size / 2,
|
|
|
|
+ size,
|
|
0,
|
|
0,
|
|
90,
|
|
90,
|
|
new SKColor(SelectedColor.R, SelectedColor.G, SelectedColor.B, SelectedColor.A),
|
|
new SKColor(SelectedColor.R, SelectedColor.G, SelectedColor.B, SelectedColor.A),
|
|
@@ -160,17 +166,21 @@ internal class ViewModelMain : INotifyPropertyChanged
|
|
else if (toolOnMouseDown == Tool.Select)
|
|
else if (toolOnMouseDown == Tool.Select)
|
|
{
|
|
{
|
|
ActiveDocument!.StartUpdateRectSelection(
|
|
ActiveDocument!.StartUpdateRectSelection(
|
|
- new(mouseDownCanvasX, mouseDownCanvasY),
|
|
|
|
- new(canvasX - mouseDownCanvasX, canvasY - mouseDownCanvasY),
|
|
|
|
|
|
+ (VecI)mouseDownCanvasPos,
|
|
|
|
+ (VecI)canvasPos - (VecI)mouseDownCanvasPos,
|
|
selectionMode);
|
|
selectionMode);
|
|
}
|
|
}
|
|
else if (toolOnMouseDown == Tool.ShiftLayer)
|
|
else if (toolOnMouseDown == Tool.ShiftLayer)
|
|
{
|
|
{
|
|
- ActiveDocument!.StartUpdateShiftLayer(new(canvasX - mouseDownCanvasX, canvasY - mouseDownCanvasY));
|
|
|
|
|
|
+ ActiveDocument!.StartUpdateShiftLayer((VecI)canvasPos - (VecI)mouseDownCanvasPos);
|
|
}
|
|
}
|
|
else if (toolOnMouseDown == Tool.Lasso)
|
|
else if (toolOnMouseDown == Tool.Lasso)
|
|
{
|
|
{
|
|
- ActiveDocument!.StartUpdateLassoSelection(new(canvasX, canvasY), selectionMode);
|
|
|
|
|
|
+ ActiveDocument!.StartUpdateLassoSelection((VecI)canvasPos, selectionMode);
|
|
|
|
+ }
|
|
|
|
+ else if (toolOnMouseDown == Tool.PathBasedPen)
|
|
|
|
+ {
|
|
|
|
+ ActiveDocument!.StartUpdatePathBasedPen(canvasPos);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -204,6 +214,12 @@ internal class ViewModelMain : INotifyPropertyChanged
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ switch (toolOnMouseDown)
|
|
|
|
+ {
|
|
|
|
+ case Tool.PathBasedPen:
|
|
|
|
+ ActiveDocument!.EndPathBasedPen();
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
private void ChangeActiveTool(object? param)
|
|
private void ChangeActiveTool(object? param)
|