public void DoMove(double deltaX, double deltaY) { Rect rect = this.GetCanvasMetrics(); Rect origRect = rect; bool isTopLeftMovement = false; if (this.ResizeDirection.HasValue) { isTopLeftMovement = new SelectionOverlay.ResizeEventArgs.Direction[] { SelectionOverlay.ResizeEventArgs.Direction.TopRight, SelectionOverlay.ResizeEventArgs.Direction.Top, SelectionOverlay.ResizeEventArgs.Direction.TopLeft, SelectionOverlay.ResizeEventArgs.Direction.Left, SelectionOverlay.ResizeEventArgs.Direction.BotLeft }.Contains(this.ResizeDirection.Value); ; switch (this.ResizeDirection.Value) { case ResizeEventArgs.Direction.Top: case ResizeEventArgs.Direction.Bot: deltaX = 0; break; case ResizeEventArgs.Direction.Right: case ResizeEventArgs.Direction.Left: deltaY = 0; break; } deltaX = isTopLeftMovement ? -deltaX : deltaX; deltaY = isTopLeftMovement ? -deltaY : deltaY; if (isTopLeftMovement) { rect.X -= deltaX; rect.Y -= deltaY; } if (rect.Width + deltaX < 0 || rect.Height + deltaY < 0) { return; } rect.Width += deltaX; rect.Height += deltaY; this.Width = rect.Width; this.Height = rect.Height; this.SetCanvasMetrics(rect); } else { rect.X += deltaX; rect.Y += deltaY; this.SetCanvasMetrics(rect); } foreach (var it in this.ToggledElements) { if(this.ResizeDirection.HasValue) { var itSize = it.GetCanvasMetrics(); var localDeltaX = deltaX * (itSize.Width / origRect.Width); var localDeltaY = deltaY * (itSize.Height / origRect.Height); if (this.OnElementResize != null) this.OnElementResize(this, new ResizeEventArgs(this.ResizeDirection.Value, localDeltaX, localDeltaY, it)); if (isTopLeftMovement) { bool conditionX = (localDeltaX != 0 && itSize.X + itSize.Width != origRect.X + origRect.Width); bool conditionY = (localDeltaY != 0 && itSize.Y + itSize.Height != origRect.Y + origRect.Height); if (conditionX || conditionY) { if (this.OnElementMove != null) this.OnElementMove(this, new MoveEventArgs(conditionX ? -(deltaX - localDeltaX) : 0, conditionY ? -(deltaY - localDeltaY) : 0 , it)); } } else { bool conditionX = (localDeltaX != 0 && itSize.X != origRect.X); bool conditionY = (localDeltaY != 0 && itSize.Y != origRect.Y); if (conditionX || conditionY) { if (this.OnElementMove != null) this.OnElementMove(this, new MoveEventArgs(conditionX ? deltaX - localDeltaX : 0, conditionY ? deltaY - localDeltaY : 0, it)); } } } else { if (this.OnElementMove != null) this.OnElementMove(this, new MoveEventArgs(deltaX, deltaY, it)); } } }
private void SelectionOverlay_OnElementResize(object sender, SelectionOverlay.ResizeEventArgs e) { bool posChangeNeeded = new SelectionOverlay.ResizeEventArgs.Direction[] { SelectionOverlay.ResizeEventArgs.Direction.TopRight, SelectionOverlay.ResizeEventArgs.Direction.Top, SelectionOverlay.ResizeEventArgs.Direction.TopLeft, SelectionOverlay.ResizeEventArgs.Direction.Left, SelectionOverlay.ResizeEventArgs.Direction.BotLeft }.Contains(e.Dir); var metrics = e.Element.GetCanvasMetrics(); if (posChangeNeeded) { metrics.X -= e.DeltaX; metrics.Y -= e.DeltaY; } if (metrics.Width + e.DeltaX >= 0) metrics.Width += e.DeltaX; if (metrics.Height + e.DeltaY >= 0) metrics.Height += e.DeltaY; if (e.Element is FrameworkElement) { var fElement = e.Element as FrameworkElement; var data = fElement.Tag as TAG_CanvasChildElement; if (data == null) return; if (posChangeNeeded) { AddInManager.Instance.MainFile.SetKey(string.Join("/", data.Key, "x"), ToSqfString(FieldTypeEnum.XField, metrics.X)); AddInManager.Instance.MainFile.SetKey(string.Join("/", data.Key, "y"), ToSqfString(FieldTypeEnum.YField, metrics.Y)); } AddInManager.Instance.MainFile.SetKey(string.Join("/", data.Key, "w"), ToSqfString(FieldTypeEnum.WField, metrics.Width)); AddInManager.Instance.MainFile.SetKey(string.Join("/", data.Key, "h"), ToSqfString(FieldTypeEnum.HField, metrics.Height)); } }
public void DoMove(double deltaX, double deltaY) { Rect rect = this.GetCanvasMetrics(); Rect origRect = rect; bool isTopLeftMovement = false; if (this.ResizeDirection.HasValue) { isTopLeftMovement = new SelectionOverlay.ResizeEventArgs.Direction[] { SelectionOverlay.ResizeEventArgs.Direction.TopRight, SelectionOverlay.ResizeEventArgs.Direction.Top, SelectionOverlay.ResizeEventArgs.Direction.TopLeft, SelectionOverlay.ResizeEventArgs.Direction.Left, SelectionOverlay.ResizeEventArgs.Direction.BotLeft }.Contains(this.ResizeDirection.Value);; switch (this.ResizeDirection.Value) { case ResizeEventArgs.Direction.Top: case ResizeEventArgs.Direction.Bot: deltaX = 0; break; case ResizeEventArgs.Direction.Right: case ResizeEventArgs.Direction.Left: deltaY = 0; break; } deltaX = isTopLeftMovement ? -deltaX : deltaX; deltaY = isTopLeftMovement ? -deltaY : deltaY; if (isTopLeftMovement) { rect.X -= deltaX; rect.Y -= deltaY; } if (rect.Width + deltaX < 0 || rect.Height + deltaY < 0) { return; } rect.Width += deltaX; rect.Height += deltaY; this.Width = rect.Width; this.Height = rect.Height; this.SetCanvasMetrics(rect); } else { rect.X += deltaX; rect.Y += deltaY; this.SetCanvasMetrics(rect); } foreach (var it in this.ToggledElements) { if (this.ResizeDirection.HasValue) { var itSize = it.GetCanvasMetrics(); var localDeltaX = deltaX * (itSize.Width / origRect.Width); var localDeltaY = deltaY * (itSize.Height / origRect.Height); if (this.OnElementResize != null) { this.OnElementResize(this, new ResizeEventArgs(this.ResizeDirection.Value, localDeltaX, localDeltaY, it)); } if (isTopLeftMovement) { bool conditionX = (localDeltaX != 0 && itSize.X + itSize.Width != origRect.X + origRect.Width); bool conditionY = (localDeltaY != 0 && itSize.Y + itSize.Height != origRect.Y + origRect.Height); if (conditionX || conditionY) { if (this.OnElementMove != null) { this.OnElementMove(this, new MoveEventArgs(conditionX ? -(deltaX - localDeltaX) : 0, conditionY ? -(deltaY - localDeltaY) : 0, it)); } } } else { bool conditionX = (localDeltaX != 0 && itSize.X != origRect.X); bool conditionY = (localDeltaY != 0 && itSize.Y != origRect.Y); if (conditionX || conditionY) { if (this.OnElementMove != null) { this.OnElementMove(this, new MoveEventArgs(conditionX ? deltaX - localDeltaX : 0, conditionY ? deltaY - localDeltaY : 0, it)); } } } } else { if (this.OnElementMove != null) { this.OnElementMove(this, new MoveEventArgs(deltaX, deltaY, it)); } } } }