Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 1242324

Browse files
committed
Fix Undo on Keyboard Movement
1 parent 2a76625 commit 1242324

1 file changed

Lines changed: 22 additions & 9 deletions

File tree

  • src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project

src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -319,11 +319,20 @@ protected override Size ArrangeOverride(Size arrangeSize)
319319
}
320320
#endregion
321321

322+
PlacementOperation placementOp;
323+
int dx = 0;
324+
int dy = 0;
325+
322326
private void DesignPanel_KeyUp(object sender, KeyEventArgs e)
323327
{
324328
if (e.Key == Key.Left || e.Key == Key.Right || e.Key == Key.Up || e.Key == Key.Down)
325329
{
326330
e.Handled = true;
331+
332+
if (placementOp != null) {
333+
placementOp.Commit();
334+
placementOp = null;
335+
}
327336
}
328337
}
329338

@@ -333,28 +342,32 @@ void DesignPanel_KeyDown(object sender, KeyEventArgs e)
333342
{
334343
e.Handled = true;
335344

336-
var placementOp = PlacementOperation.Start(Context.Services.Selection.SelectedItems, PlacementType.Move);
345+
if (placementOp == null) {
346+
dx = 0;
347+
dy = 0;
348+
placementOp = PlacementOperation.Start(Context.Services.Selection.SelectedItems, PlacementType.Move);
349+
}
337350

338351

339-
var dx1 = (e.Key == Key.Left) ? Keyboard.IsKeyDown(Key.LeftShift) ? -10 : -1 : 0;
340-
var dy1 = (e.Key == Key.Up) ? Keyboard.IsKeyDown(Key.LeftShift) ? -10 : -1 : 0;
341-
var dx2 = (e.Key == Key.Right) ? Keyboard.IsKeyDown(Key.LeftShift) ? 10 : 1 : 0;
342-
var dy2 = (e.Key == Key.Down) ? Keyboard.IsKeyDown(Key.LeftShift) ? 10 : 1 : 0;
352+
dx += (e.Key == Key.Left) ? Keyboard.IsKeyDown(Key.LeftShift) ? -10 : -1 : 0;
353+
dy += (e.Key == Key.Up) ? Keyboard.IsKeyDown(Key.LeftShift) ? -10 : -1 : 0;
354+
dx += (e.Key == Key.Right) ? Keyboard.IsKeyDown(Key.LeftShift) ? 10 : 1 : 0;
355+
dy += (e.Key == Key.Down) ? Keyboard.IsKeyDown(Key.LeftShift) ? 10 : 1 : 0;
343356
foreach (PlacementInformation info in placementOp.PlacedItems)
344357
{
345358
if (!Keyboard.IsKeyDown(Key.LeftCtrl))
346359
{
347-
info.Bounds = new Rect(info.OriginalBounds.Left + dx1 + dx2,
348-
info.OriginalBounds.Top + dy1 + dy2,
360+
info.Bounds = new Rect(info.OriginalBounds.Left + dx,
361+
info.OriginalBounds.Top + dy,
349362
info.OriginalBounds.Width,
350363
info.OriginalBounds.Height);
351364
}
352365
else
353366
{
354367
info.Bounds = new Rect(info.OriginalBounds.Left,
355368
info.OriginalBounds.Top,
356-
info.OriginalBounds.Width + dx1 + dx2,
357-
info.OriginalBounds.Height + dy1 + dy2);
369+
info.OriginalBounds.Width + dx,
370+
info.OriginalBounds.Height + dy);
358371
}
359372

360373
placementOp.CurrentContainerBehavior.SetPosition(info);

0 commit comments

Comments
 (0)