|
|
|
@ -78,6 +78,57 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
@@ -78,6 +78,57 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
|
|
|
|
|
DeleteSurface(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override Point PlacePoint(Point point) |
|
|
|
|
{ |
|
|
|
|
if (surface == null) |
|
|
|
|
return base.PlacePoint(point); |
|
|
|
|
|
|
|
|
|
DesignPanel designPanel = ExtendedItem.Services.DesignPanel as DesignPanel; |
|
|
|
|
if (designPanel == null || !designPanel.UseSnaplinePlacement) |
|
|
|
|
return base.PlacePoint(point); ; |
|
|
|
|
|
|
|
|
|
surface.Children.Clear(); |
|
|
|
|
if (Keyboard.IsKeyDown(Key.LeftCtrl)) |
|
|
|
|
return base.PlacePoint(point); ; |
|
|
|
|
|
|
|
|
|
Rect bounds = new Rect(point.X, point.Y, 0, 0); |
|
|
|
|
|
|
|
|
|
var horizontalInput = new List<Snapline>(); |
|
|
|
|
var verticalInput = new List<Snapline>(); |
|
|
|
|
|
|
|
|
|
AddLines(bounds, 0, false, horizontalInput, verticalInput, null); |
|
|
|
|
if (baseline.HasValue) |
|
|
|
|
{ |
|
|
|
|
var textOffset = bounds.Top + baseline.Value; |
|
|
|
|
horizontalInput.Add(new Snapline() { Group = 1, Offset = textOffset, Start = bounds.Left, End = bounds.Right }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<Snapline> drawLines; |
|
|
|
|
double delta; |
|
|
|
|
|
|
|
|
|
if (Snap(horizontalInput, horizontalMap, Accuracy, out drawLines, out delta)) |
|
|
|
|
{ |
|
|
|
|
foreach (var d in drawLines) |
|
|
|
|
{ |
|
|
|
|
DrawLine(d.Start, d.Offset + d.DrawOffset, d.End, d.Offset + d.DrawOffset); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
point.Y += delta; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (Snap(verticalInput, verticalMap, Accuracy, out drawLines, out delta)) |
|
|
|
|
{ |
|
|
|
|
foreach (var d in drawLines) |
|
|
|
|
{ |
|
|
|
|
DrawLine(d.Offset + d.DrawOffset, d.Start, d.Offset + d.DrawOffset, d.End); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
point.X += delta; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return point; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override void BeforeSetPosition(PlacementOperation operation) |
|
|
|
|
{ |
|
|
|
|
base.BeforeSetPosition(operation); |
|
|
|
@ -99,11 +150,15 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
@@ -99,11 +150,15 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
|
|
|
|
|
var verticalInput = new List<Snapline>(); |
|
|
|
|
var info = operation.PlacedItems[0]; |
|
|
|
|
|
|
|
|
|
if (operation.Type == PlacementType.Resize) { |
|
|
|
|
if (operation.Type == PlacementType.Resize) |
|
|
|
|
{ |
|
|
|
|
AddLines(bounds, 0, false, horizontalInput, verticalInput, info.ResizeThumbAlignment); |
|
|
|
|
} else { |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
AddLines(bounds, 0, false, horizontalInput, verticalInput, null); |
|
|
|
|
if (baseline.HasValue) { |
|
|
|
|
if (baseline.HasValue) |
|
|
|
|
{ |
|
|
|
|
var textOffset = bounds.Top + baseline.Value; |
|
|
|
|
horizontalInput.Add(new Snapline() { Group = 1, Offset = textOffset, Start = bounds.Left, End = bounds.Right }); |
|
|
|
|
} |
|
|
|
@ -121,48 +176,66 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
@@ -121,48 +176,66 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
|
|
|
|
|
List<Snapline> drawLines; |
|
|
|
|
double delta; |
|
|
|
|
|
|
|
|
|
if (Snap(horizontalInput, horizontalMap, Accuracy, out drawLines, out delta)) { |
|
|
|
|
if (Snap(horizontalInput, horizontalMap, Accuracy, out drawLines, out delta)) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
if (operation.Type == PlacementType.Resize) { |
|
|
|
|
if (info.ResizeThumbAlignment != null && info.ResizeThumbAlignment.Value.Vertical == VerticalAlignment.Top) { |
|
|
|
|
if (operation.Type == PlacementType.Resize) |
|
|
|
|
{ |
|
|
|
|
if (info.ResizeThumbAlignment != null && info.ResizeThumbAlignment.Value.Vertical == VerticalAlignment.Top) |
|
|
|
|
{ |
|
|
|
|
bounds.Y += delta; |
|
|
|
|
bounds.Height = Math.Max(0, bounds.Height - delta); |
|
|
|
|
} else { |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
bounds.Height = Math.Max(0, bounds.Height + delta); |
|
|
|
|
} |
|
|
|
|
info.Bounds = bounds; |
|
|
|
|
} else { |
|
|
|
|
foreach (var item in operation.PlacedItems) { |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
foreach (var item in operation.PlacedItems) |
|
|
|
|
{ |
|
|
|
|
var r = item.Bounds; |
|
|
|
|
r.Y += delta; |
|
|
|
|
item.Bounds = r; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var d in drawLines) { |
|
|
|
|
foreach (var d in drawLines) |
|
|
|
|
{ |
|
|
|
|
DrawLine(d.Start, d.Offset + d.DrawOffset, d.End, d.Offset + d.DrawOffset); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (Snap(verticalInput, verticalMap, Accuracy, out drawLines, out delta)) { |
|
|
|
|
if (Snap(verticalInput, verticalMap, Accuracy, out drawLines, out delta)) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
if (operation.Type == PlacementType.Resize) { |
|
|
|
|
if (info.ResizeThumbAlignment != null && info.ResizeThumbAlignment.Value.Horizontal == HorizontalAlignment.Left) { |
|
|
|
|
if (operation.Type == PlacementType.Resize) |
|
|
|
|
{ |
|
|
|
|
if (info.ResizeThumbAlignment != null && info.ResizeThumbAlignment.Value.Horizontal == HorizontalAlignment.Left) |
|
|
|
|
{ |
|
|
|
|
bounds.X += delta; |
|
|
|
|
bounds.Width = Math.Max(0, bounds.Width - delta); |
|
|
|
|
} else { |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
bounds.Width = Math.Max(0, bounds.Width + delta); |
|
|
|
|
} |
|
|
|
|
info.Bounds = bounds; |
|
|
|
|
} else { |
|
|
|
|
foreach (var item in operation.PlacedItems) { |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
foreach (var item in operation.PlacedItems) |
|
|
|
|
{ |
|
|
|
|
var r = item.Bounds; |
|
|
|
|
r.X += delta; |
|
|
|
|
item.Bounds = r; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var d in drawLines) { |
|
|
|
|
foreach (var d in drawLines) |
|
|
|
|
{ |
|
|
|
|
DrawLine(d.Offset + d.DrawOffset, d.Start, d.Offset + d.DrawOffset, d.End); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|