|
@@ -29,7 +29,7 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
protected T? toolViewModel;
|
|
protected T? toolViewModel;
|
|
protected RectD lastRect;
|
|
protected RectD lastRect;
|
|
protected double lastRadians;
|
|
protected double lastRadians;
|
|
-
|
|
|
|
|
|
+
|
|
private ShapeCorners initialCorners;
|
|
private ShapeCorners initialCorners;
|
|
private bool noMovement = true;
|
|
private bool noMovement = true;
|
|
protected IFillableShapeToolbar toolbar;
|
|
protected IFillableShapeToolbar toolbar;
|
|
@@ -64,7 +64,7 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
|
|
toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
|
|
ignoreNextColorChange = colorsVM.ColorsTempSwapped;
|
|
ignoreNextColorChange = colorsVM.ColorsTempSwapped;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
lastRect = new RectD(startDrawingPos, VecD.Zero);
|
|
lastRect = new RectD(startDrawingPos, VecD.Zero);
|
|
|
|
|
|
document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect.Inflate(1)),
|
|
document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect.Inflate(1)),
|
|
@@ -89,7 +89,7 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
toolbar.ToolSize = shapeData.StrokeWidth;
|
|
toolbar.ToolSize = shapeData.StrokeWidth;
|
|
toolbar.Fill = shapeData.FillColor != Colors.Transparent;
|
|
toolbar.Fill = shapeData.FillColor != Colors.Transparent;
|
|
initialCorners = shapeData.TransformationCorners;
|
|
initialCorners = shapeData.TransformationCorners;
|
|
-
|
|
|
|
|
|
+
|
|
ActiveMode = ShapeToolMode.Transform;
|
|
ActiveMode = ShapeToolMode.Transform;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -131,19 +131,14 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
return pos1;
|
|
return pos1;
|
|
}
|
|
}
|
|
|
|
|
|
- public static RectI GetSquaredCoordinates(VecI startPos, VecI curPos)
|
|
|
|
- {
|
|
|
|
- VecI pos = GetSquaredPosition(startPos, curPos);
|
|
|
|
- return RectI.FromTwoPixels(startPos, pos);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public override void OnTransformMoved(ShapeCorners corners)
|
|
public override void OnTransformMoved(ShapeCorners corners)
|
|
{
|
|
{
|
|
if (ActiveMode != ShapeToolMode.Transform)
|
|
if (ActiveMode != ShapeToolMode.Transform)
|
|
return;
|
|
return;
|
|
|
|
|
|
var rect = RectD.FromCenterAndSize(corners.RectCenter, corners.RectSize);
|
|
var rect = RectD.FromCenterAndSize(corners.RectCenter, corners.RectSize);
|
|
- ShapeData shapeData = new ShapeData(rect.Center, rect.Size, corners.RectRotation, (float)StrokeWidth, StrokeColor,
|
|
|
|
|
|
+ ShapeData shapeData = new ShapeData(rect.Center, rect.Size, corners.RectRotation, (float)StrokeWidth,
|
|
|
|
+ StrokeColor,
|
|
FillColor) { AntiAliasing = toolbar.AntiAliasing };
|
|
FillColor) { AntiAliasing = toolbar.AntiAliasing };
|
|
IAction drawAction = TransformMovedAction(shapeData, corners);
|
|
IAction drawAction = TransformMovedAction(shapeData, corners);
|
|
|
|
|
|
@@ -172,9 +167,10 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
{
|
|
{
|
|
ignoreNextColorChange = false;
|
|
ignoreNextColorChange = false;
|
|
}
|
|
}
|
|
|
|
+
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
ignoreNextColorChange = ActiveMode == ShapeToolMode.Drawing;
|
|
ignoreNextColorChange = ActiveMode == ShapeToolMode.Drawing;
|
|
|
|
|
|
toolbar.StrokeColor = color.ToColor();
|
|
toolbar.StrokeColor = color.ToColor();
|
|
@@ -206,10 +202,14 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
{
|
|
{
|
|
VecD adjustedPos = AlignToPixels ? (VecI)pos.Floor() : pos;
|
|
VecD adjustedPos = AlignToPixels ? (VecI)pos.Floor() : pos;
|
|
|
|
|
|
- VecD snapped = adjustedPos;
|
|
|
|
|
|
+ VecD startPos = startDrawingPos;
|
|
|
|
+
|
|
|
|
+ VecD snapped;
|
|
if (toolViewModel.DrawEven)
|
|
if (toolViewModel.DrawEven)
|
|
{
|
|
{
|
|
- adjustedPos = AlignToPixels ? GetSquaredPosition((VecI)startDrawingPos, (VecI)adjustedPos) : GetSquaredPosition(startDrawingPos, adjustedPos);
|
|
|
|
|
|
+ adjustedPos = AlignToPixels
|
|
|
|
+ ? GetSquaredPosition((VecI)startDrawingPos, (VecI)adjustedPos)
|
|
|
|
+ : GetSquaredPosition(startPos, adjustedPos);
|
|
VecD dir = (adjustedPos - startDrawingPos).Normalize();
|
|
VecD dir = (adjustedPos - startDrawingPos).Normalize();
|
|
snapped = Snap(adjustedPos, startDrawingPos, dir, true);
|
|
snapped = Snap(adjustedPos, startDrawingPos, dir, true);
|
|
}
|
|
}
|
|
@@ -220,6 +220,13 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
|
|
|
|
noMovement = false;
|
|
noMovement = false;
|
|
|
|
|
|
|
|
+ if (toolViewModel.DrawFromCenter)
|
|
|
|
+ {
|
|
|
|
+ VecD center = startDrawingPos;
|
|
|
|
+
|
|
|
|
+ startDrawingPos = center + (center - snapped);
|
|
|
|
+ }
|
|
|
|
+
|
|
if (AlignToPixels)
|
|
if (AlignToPixels)
|
|
{
|
|
{
|
|
DrawShape((VecI)snapped.Floor(), lastRadians, false);
|
|
DrawShape((VecI)snapped.Floor(), lastRadians, false);
|
|
@@ -229,6 +236,8 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
DrawShape(snapped, lastRadians, false);
|
|
DrawShape(snapped, lastRadians, false);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ startDrawingPos = startPos;
|
|
|
|
+
|
|
document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect), false);
|
|
document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect), false);
|
|
document!.TransformHandler.Corners = new ShapeCorners((RectD)lastRect);
|
|
document!.TransformHandler.Corners = new ShapeCorners((RectD)lastRect);
|
|
}
|
|
}
|
|
@@ -302,7 +311,7 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
|
|
var layer = document.StructureHelper.Find(memberId);
|
|
var layer = document.StructureHelper.Find(memberId);
|
|
if (layer is null)
|
|
if (layer is null)
|
|
return;
|
|
return;
|
|
-
|
|
|
|
|
|
+
|
|
if (CanEditShape(layer))
|
|
if (CanEditShape(layer))
|
|
{
|
|
{
|
|
internals!.ActionAccumulator.AddActions(SettingsChangedAction());
|
|
internals!.ActionAccumulator.AddActions(SettingsChangedAction());
|