예제 #1
0
 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));
         }
     }
 }
예제 #2
0
        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));
            }
        }
예제 #3
0
        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));
                    }
                }
            }
        }