示例#1
0
        public static Rectangle PositionRelativeTo(IFormAdapter window, StickDir direction, Rectangle size)
        {
            Rectangle newPosition = size;

            if (direction == StickDir.None)
            {
                //nothing more
                newPosition = size;
            }
            // Stuck to side from top to bottom
            if (direction == (StickDir.Left | StickDir.Top | StickDir.Bottom | StickDir.VerticalInside) ||
                direction == (StickDir.Right | StickDir.Top | StickDir.Bottom | StickDir.VerticalInside))
            {
                newPosition.Height = window.Bounds.Height;
            }

            // Stuck to side from left to right
            if (direction == (StickDir.Top | StickDir.Left | StickDir.Right | StickDir.HorizontalInside) ||
                direction == (StickDir.Bottom | StickDir.Left | StickDir.Right | StickDir.HorizontalInside))
            {
                newPosition.Width = window.Bounds.Width;
            }

            // Stuck to left from inside
            if ((direction & (StickDir.Left | StickDir.HorizontalInside)) == (StickDir.Left | StickDir.HorizontalInside))
            {
                newPosition.X = window.Bounds.X;
            }
            // Stuck to right from inside
            else if ((direction & (StickDir.Right | StickDir.HorizontalInside)) == (StickDir.Right | StickDir.HorizontalInside))
            {
                newPosition.X = window.Bounds.X + (window.Bounds.Width - size.Width);
            }
            // Stuck to left from outside
            else if ((direction & StickDir.Left) == StickDir.Left)
            {
                newPosition.X = window.Bounds.X - size.Width;
            }
            // Stuck to right from outside
            else if ((direction & StickDir.Right) == StickDir.Right)
            {
                newPosition.X = window.Bounds.X + window.Bounds.Width;
            }


            // Stuck to top from inside
            if ((direction & (StickDir.Top | StickDir.VerticalInside)) == (StickDir.Top | StickDir.VerticalInside))
            {
                newPosition.Y = window.Bounds.Y;
            }
            // Stuck to bottom from inside
            else if ((direction & (StickDir.Bottom | StickDir.VerticalInside)) == (StickDir.Bottom | StickDir.VerticalInside))
            {
                newPosition.Y = window.Bounds.Y + (window.Bounds.Height - size.Height);
            }
            // Stuck to top from outside
            else if ((direction & StickDir.Top) == StickDir.Top)
            {
                newPosition.Y = window.Bounds.Y - size.Height;
            }
            // Stuck to bottom from outside
            else if ((direction & StickDir.Bottom) == StickDir.Bottom)
            {
                newPosition.Y = window.Bounds.Y + window.Bounds.Height;
            }
            return(newPosition);
        }
示例#2
0
        public static Rectangle PositionRelativeTo(IFormAdapter window, StickDir direction, Rectangle size)
        {
            Rectangle newPosition = size;
            if (direction == StickDir.None)
            {
                //nothing more
                newPosition = size;
            }
            // Stuck to side from top to bottom
            if (direction == (StickDir.Left | StickDir.Top | StickDir.Bottom | StickDir.VerticalInside) ||
                direction == (StickDir.Right | StickDir.Top | StickDir.Bottom | StickDir.VerticalInside))
            {
                newPosition.Height = window.Bounds.Height;
            }

            // Stuck to side from left to right
            if (direction == (StickDir.Top | StickDir.Left | StickDir.Right | StickDir.HorizontalInside) ||
                direction == (StickDir.Bottom | StickDir.Left | StickDir.Right | StickDir.HorizontalInside))
            {
                newPosition.Width = window.Bounds.Width;
            }

            // Stuck to left from inside
            if ((direction & (StickDir.Left | StickDir.HorizontalInside)) == (StickDir.Left | StickDir.HorizontalInside))
            {
                newPosition.X = window.Bounds.X;
            }
            // Stuck to right from inside
            else if ((direction & (StickDir.Right | StickDir.HorizontalInside)) == (StickDir.Right | StickDir.HorizontalInside))
            {
                newPosition.X = window.Bounds.X + (window.Bounds.Width - size.Width);
            }
            // Stuck to left from outside
            else if ((direction & StickDir.Left) == StickDir.Left)
            {
                newPosition.X = window.Bounds.X - size.Width;
            }
            // Stuck to right from outside
            else if ((direction & StickDir.Right) == StickDir.Right)
            {
                newPosition.X = window.Bounds.X + window.Bounds.Width;
            }

             
            // Stuck to top from inside
            if ((direction & (StickDir.Top | StickDir.VerticalInside)) == (StickDir.Top | StickDir.VerticalInside))
            {
                newPosition.Y = window.Bounds.Y;
            }
            // Stuck to bottom from inside
            else if ((direction & (StickDir.Bottom | StickDir.VerticalInside)) == (StickDir.Bottom | StickDir.VerticalInside))
            {
                newPosition.Y = window.Bounds.Y + (window.Bounds.Height - size.Height);
            }
            // Stuck to top from outside
            else if ((direction & StickDir.Top) == StickDir.Top)
            {
                newPosition.Y = window.Bounds.Y - size.Height;
            }
            // Stuck to bottom from outside
            else if ((direction & StickDir.Bottom) == StickDir.Bottom)               
            {
                newPosition.Y = window.Bounds.Y + window.Bounds.Height;
            }
            return newPosition;
        }
示例#3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="bInsideStick">Allow snapping on the inside (eg: window to screen)</param>
        public StickDir IsStuckTo(IFormAdapter window, bool bInsideStick)
        {
            int fullStickGap = 2;

            if (window == this.originalForm)
            {
                return(StickDir.None);
            }

            Rectangle fromRect = originalForm.Bounds;
            Rectangle toRect   = window.Bounds;
            StickDir  result   = StickDir.None;

            if (fromRect.Bottom >= (toRect.Top - stickGap) && fromRect.Top <= (toRect.Bottom + stickGap))
            {
                if (bInsideStick)
                {
                    if (fromRect.Left <= toRect.Left + fullStickGap && fromRect.Left >= toRect.Left - fullStickGap)
                    {
                        // stuck on left
                        result = result | StickDir.HorizontalInside | StickDir.Left;
                    }
                    if (fromRect.Right <= toRect.Right + fullStickGap && fromRect.Right >= toRect.Right - fullStickGap)
                    {
                        // stuck on right
                        result = result | StickDir.HorizontalInside | StickDir.Right;
                    }
                }
                if (fromRect.Left + fromRect.Width <= toRect.Left + fullStickGap && fromRect.Left + fromRect.Width >= toRect.Left - fullStickGap)
                {
                    // right 2 left
                    result = result | StickDir.Left;
                }
                if (toRect.Left + toRect.Width <= fromRect.Left + fullStickGap && toRect.Left + toRect.Width >= fromRect.Left - fullStickGap)
                {
                    // left 2 right
                    result = result | StickDir.Right;
                }
            }

            if (fromRect.Right >= (toRect.Left - stickGap) && fromRect.Left <= (toRect.Right + stickGap))
            {
                if (bInsideStick)
                {
                    if (fromRect.Top <= toRect.Top + fullStickGap && fromRect.Top >= toRect.Top - fullStickGap)
                    {
                        // stuck on top
                        result = result | StickDir.VerticalInside | StickDir.Top;
                    }
                    if (fromRect.Bottom <= toRect.Bottom + fullStickGap && fromRect.Bottom >= toRect.Bottom - fullStickGap)
                    {
                        // stuck on bottom
                        result = result | StickDir.VerticalInside | StickDir.Bottom;
                    }
                }
                if (fromRect.Top + fromRect.Height <= toRect.Top + fullStickGap && fromRect.Top + fromRect.Height >= toRect.Top - fullStickGap)
                {
                    // top 2 bottom
                    if ((result & StickDir.Top) != StickDir.Top)
                    {
                        result = result | StickDir.Top;
                    }
                }
                if (toRect.Top + toRect.Height <= fromRect.Top + fullStickGap && toRect.Top + toRect.Height >= fromRect.Top - fullStickGap)
                {
                    // bottom 2 windows
                    if ((result & StickDir.Bottom) != StickDir.Bottom)
                    {
                        result = result | StickDir.Bottom;
                    }
                }
            }
            return(result);
        }