Beispiel #1
0
        private void Size_Click(object sender, RoutedEventArgs e)
        {
            AnimateSize s = _size[_random.Next(_size.Length)];

            NewPosition.Size    = s;
            RemovePosition.Size = s;
        }
        /// <summary>
        /// Calculate appropriate rectangle from given current state and target size.
        /// </summary>
        /// <param name="size">Size enumeration.</param>
        /// <param name="rect">Rectangle to modify.</param>
        /// <param name="elementState">Animation state of element.</param>
        /// <returns>Calculated rectangle using provided size.</returns>
        protected Rect RectFromSize(AnimateSize size,
                                    Rect rect,
                                    MetaElementState elementState)
        {
            Size minSize = elementState.Element.DesiredSize;

            switch (size)
            {
            case AnimateSize.Original:
                return(rect);

            case AnimateSize.ZeroWidthLeft:
                return(new Rect(rect.X, rect.Y, minSize.Width, rect.Height));

            case AnimateSize.ZeroWidthCenter:
                return(new Rect(rect.X + ((rect.Width - minSize.Width) / 2), rect.Y, minSize.Width, rect.Height));

            case AnimateSize.ZeroWidthRight:
                return(new Rect(rect.Right - minSize.Width, rect.Y, minSize.Width, rect.Height));

            case AnimateSize.ZeroHeightTop:
                return(new Rect(rect.X, rect.Y, rect.Width, minSize.Height));

            case AnimateSize.ZeroHeightCenter:
                return(new Rect(rect.X, rect.Y + (rect.Height - minSize.Height) / 2, rect.Width, minSize.Height));

            case AnimateSize.ZeroHeightBottom:
                return(new Rect(rect.X, rect.Bottom - minSize.Height, rect.Width, minSize.Height));

            case AnimateSize.ZeroZeroCenter:
                return(new Rect(rect.X + (rect.Width - minSize.Width) / 2, rect.Y + (rect.Height - minSize.Height) / 2, minSize.Width, minSize.Height));

            case AnimateSize.ZeroZeroTopLeft:
                return(new Rect(rect.X, rect.Y, minSize.Width, minSize.Height));

            case AnimateSize.ZeroZeroTopRight:
                return(new Rect(rect.Right - minSize.Width, rect.Y, minSize.Width, minSize.Height));

            case AnimateSize.ZeroZeroBottomLeft:
                return(new Rect(rect.X, rect.Bottom - minSize.Height, minSize.Width, minSize.Height));

            case AnimateSize.ZeroZeroBottomRight:
                return(new Rect(rect.Right - minSize.Width, rect.Bottom - minSize.Height, minSize.Width, minSize.Height));

            default:
                // Should never happen!
                Debug.Assert(false);
                return(new Rect());
            }
        }
        /// <summary>
        /// Calculate appropriate rectangle from given current state and target size.
        /// </summary>
        /// <param name="size">Size enumeration.</param>
        /// <param name="rect">Rectangle to modify.</param>
        /// <param name="elementState">Animation state of element.</param>
        /// <returns>Calculated rectangle using provided size.</returns>
        protected Rect RectFromSize(AnimateSize size,
                                    Rect rect,
                                    MetaElementState elementState)
        {
            Size minSize = elementState.Element.DesiredSize;

            switch (size)
            {
                case AnimateSize.Original:
                    return rect;
                case AnimateSize.ZeroWidthLeft:
                    return new Rect(rect.X, rect.Y, minSize.Width, rect.Height);
                case AnimateSize.ZeroWidthCenter:
                    return new Rect(rect.X + ((rect.Width - minSize.Width) / 2), rect.Y, minSize.Width, rect.Height);
                case AnimateSize.ZeroWidthRight:
                    return new Rect(rect.Right - minSize.Width, rect.Y, minSize.Width, rect.Height);
                case AnimateSize.ZeroHeightTop:
                    return new Rect(rect.X, rect.Y, rect.Width, minSize.Height);
                case AnimateSize.ZeroHeightCenter:
                    return new Rect(rect.X, rect.Y + (rect.Height - minSize.Height) / 2, rect.Width, minSize.Height);
                case AnimateSize.ZeroHeightBottom:
                    return new Rect(rect.X, rect.Bottom - minSize.Height, rect.Width, minSize.Height);
                case AnimateSize.ZeroZeroCenter:
                    return new Rect(rect.X + (rect.Width - minSize.Width) / 2, rect.Y + (rect.Height - minSize.Height) / 2, minSize.Width, minSize.Height);
                case AnimateSize.ZeroZeroTopLeft:
                    return new Rect(rect.X, rect.Y, minSize.Width, minSize.Height);
                case AnimateSize.ZeroZeroTopRight:
                    return new Rect(rect.Right - minSize.Width, rect.Y, minSize.Width, minSize.Height);
                case AnimateSize.ZeroZeroBottomLeft:
                    return new Rect(rect.X, rect.Bottom - minSize.Height, minSize.Width, minSize.Height);
                case AnimateSize.ZeroZeroBottomRight:
                    return new Rect(rect.Right - minSize.Width, rect.Bottom - minSize.Height, minSize.Width, minSize.Height);
                default:
                    // Should never happen!
                    Debug.Assert(false);
                    return new Rect();
            }
        }