From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。

---
 HotelPms.Share.Windows/Component/GlassButton.cs |  845 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 845 insertions(+), 0 deletions(-)

diff --git a/HotelPms.Share.Windows/Component/GlassButton.cs b/HotelPms.Share.Windows/Component/GlassButton.cs
new file mode 100644
index 0000000..874eaed
--- /dev/null
+++ b/HotelPms.Share.Windows/Component/GlassButton.cs
@@ -0,0 +1,845 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing.Drawing2D;
+using System.Drawing.Text;
+using PushButtonState = System.Windows.Forms.VisualStyles.PushButtonState;
+
+namespace HotelPms.Share.Windows.Component
+{
+    /// <summary>
+    /// Represents a glass button control.
+    /// </summary>
+    [ToolboxBitmap(typeof(GlassButton)), ToolboxItem(true), ToolboxItemFilter("System.Windows.Forms"), Description("Raises an event when the user clicks it.")]
+    public partial class GlassButton : Button
+    {
+        #region " Constructors "
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Glass.GlassButton" /> class.
+        /// </summary>
+        public GlassButton()
+        {
+            InitializeComponent();
+            timer.Interval = animationLength / framesCount;
+            base.BackColor = Color.Transparent;
+            BackColor = Color.Black;
+            ForeColor = Color.White;
+            OuterBorderColor = Color.White;
+            InnerBorderColor = Color.Black;
+            ShineColor = Color.White;
+            GlowColor = Color.FromArgb(-7488001);//unchecked((int)(0xFF8DBDFF)));
+            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true);
+            SetStyle(ControlStyles.Opaque, false);
+        }
+
+        #endregion
+
+        #region " Fields and Properties "
+
+        private Color backColor;
+        /// <summary>
+        /// Gets or sets the background color of the control.
+        /// </summary>
+        /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the background color.</returns>
+        [DefaultValue(typeof(Color), "Black")]
+        public virtual new Color BackColor
+        {
+            get { return backColor; }
+            set
+            {
+                if (!backColor.Equals(value))
+                {
+                    backColor = value;
+                    UseVisualStyleBackColor = false;
+                    CreateFrames();
+                    OnBackColorChanged(EventArgs.Empty);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the foreground color of the control.
+        /// </summary>
+        /// <returns>The foreground <see cref="T:System.Drawing.Color" /> of the control.</returns>
+        [DefaultValue(typeof(Color), "White")]
+        public virtual new Color ForeColor
+        {
+            get { return base.ForeColor; }
+            set
+            {
+                base.ForeColor = value;
+            }
+        }
+
+        private Color innerBorderColor;
+        /// <summary>
+        /// Gets or sets the inner border color of the control.
+        /// </summary>
+        /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the color of the inner border.</returns>
+        [DefaultValue(typeof(Color), "Black"), Category("Appearance"), Description("The inner border color of the control.")]
+        public virtual Color InnerBorderColor
+        {
+            get { return innerBorderColor; }
+            set
+            {
+                if (innerBorderColor != value)
+                {
+                    innerBorderColor = value;
+                    CreateFrames();
+                    if (IsHandleCreated)
+                    {
+                        Invalidate();
+                    }
+                    OnInnerBorderColorChanged(EventArgs.Empty);
+                }
+            }
+        }
+
+        private Color outerBorderColor;
+        /// <summary>
+        /// Gets or sets the outer border color of the control.
+        /// </summary>
+        /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the color of the outer border.</returns>
+        [DefaultValue(typeof(Color), "White"), Category("Appearance"), Description("The outer border color of the control.")]
+        public virtual Color OuterBorderColor
+        {
+            get { return outerBorderColor; }
+            set
+            {
+                if (outerBorderColor != value)
+                {
+                    outerBorderColor = value;
+                    CreateFrames();
+                    if (IsHandleCreated)
+                    {
+                        Invalidate();
+                    }
+                    OnOuterBorderColorChanged(EventArgs.Empty);
+                }
+            }
+        }
+
+        private Color shineColor;
+        /// <summary>
+        /// Gets or sets the shine color of the control.
+        /// </summary>
+        /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the shine color.</returns>
+        [DefaultValue(typeof(Color), "White"), Category("Appearance"), Description("The shine color of the control.")]
+        public virtual Color ShineColor
+        {
+            get { return shineColor; }
+            set
+            {
+                if (shineColor != value)
+                {
+                    shineColor = value;
+                    CreateFrames();
+                    if (IsHandleCreated)
+                    {
+                        Invalidate();
+                    }
+                    OnShineColorChanged(EventArgs.Empty);
+                }
+            }
+        }
+
+        private Color glowColor;
+        /// <summary>
+        /// Gets or sets the glow color of the control.
+        /// </summary>
+        /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the glow color.</returns>
+        [DefaultValue(typeof(Color), "255,141,189,255"), Category("Appearance"), Description("The glow color of the control.")]
+        public virtual Color GlowColor
+        {
+            get { return glowColor; }
+            set
+            {
+                if (glowColor != value)
+                {
+                    glowColor = value;
+                    CreateFrames();
+                    if (IsHandleCreated)
+                    {
+                        Invalidate();
+                    }
+                    OnGlowColorChanged(EventArgs.Empty);
+                }
+            }
+        }
+
+        private bool isHovered;
+        private bool isFocused;
+        private bool isFocusedByKey;
+        private bool isKeyDown;
+        private bool isMouseDown;
+        private bool isPressed { get { return isKeyDown || (isMouseDown && isHovered); } }
+
+        /// <summary>
+        /// Gets the state of the button control.
+        /// </summary>
+        /// <value>The state of the button control.</value>
+        [Browsable(false)]
+        public PushButtonState State
+        {
+            get
+            {
+                if (!Enabled)
+                {
+                    return PushButtonState.Disabled;
+                }
+                if (isPressed)
+                {
+                    return PushButtonState.Pressed;
+                }
+                if (isHovered)
+                {
+                    return PushButtonState.Hot;
+                }
+                if (isFocused || IsDefault)
+                {
+                    return PushButtonState.Default;
+                }
+                return PushButtonState.Normal;
+            }
+        }
+
+        #endregion
+
+        #region " Events "
+
+        /// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.InnerBorderColor" /> property changes.</summary>
+        [Description("Event raised when the value of the InnerBorderColor property is changed."), Category("Property Changed")]
+        public event EventHandler InnerBorderColorChanged;
+
+        /// <summary>
+        /// Raises the <see cref="E:Glass.GlassButton.InnerBorderColorChanged" /> event.
+        /// </summary>
+        /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
+        protected virtual void OnInnerBorderColorChanged(EventArgs e)
+        {
+            if (InnerBorderColorChanged != null)
+            {
+                InnerBorderColorChanged(this, e);
+            }
+        }
+
+        /// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.OuterBorderColor" /> property changes.</summary>
+        [Description("Event raised when the value of the OuterBorderColor property is changed."), Category("Property Changed")]
+        public event EventHandler OuterBorderColorChanged;
+
+        /// <summary>
+        /// Raises the <see cref="E:Glass.GlassButton.OuterBorderColorChanged" /> event.
+        /// </summary>
+        /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
+        protected virtual void OnOuterBorderColorChanged(EventArgs e)
+        {
+            if (OuterBorderColorChanged != null)
+            {
+                OuterBorderColorChanged(this, e);
+            }
+        }
+
+        /// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.ShineColor" /> property changes.</summary>
+        [Description("Event raised when the value of the ShineColor property is changed."), Category("Property Changed")]
+        public event EventHandler ShineColorChanged;
+
+        /// <summary>
+        /// Raises the <see cref="E:Glass.GlassButton.ShineColorChanged" /> event.
+        /// </summary>
+        /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
+        protected virtual void OnShineColorChanged(EventArgs e)
+        {
+            if (ShineColorChanged != null)
+            {
+                ShineColorChanged(this, e);
+            }
+        }
+
+        /// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.GlowColor" /> property changes.</summary>
+        [Description("Event raised when the value of the GlowColor property is changed."), Category("Property Changed")]
+        public event EventHandler GlowColorChanged;
+
+        /// <summary>
+        /// Raises the <see cref="E:Glass.GlassButton.GlowColorChanged" /> event.
+        /// </summary>
+        /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
+        protected virtual void OnGlowColorChanged(EventArgs e)
+        {
+            if (GlowColorChanged != null)
+            {
+                InnerBorderColorChanged(this, e);
+            }
+        }
+
+        #endregion
+
+        #region " Overrided Methods "
+
+        /// <summary>
+        /// Raises the <see cref="E:System.Windows.Forms.Control.SizeChanged" /> event.
+        /// </summary>
+        /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
+        protected override void OnSizeChanged(EventArgs e)
+        {
+            CreateFrames();
+            base.OnSizeChanged(e);
+        }
+
+        /// <summary>
+        /// Raises the <see cref="E:System.Windows.Forms.Control.Click" /> event.
+        /// </summary>
+        /// <param name="e">The <see cref="System.EventArgs" /> instance containing the event data.</param>
+        protected override void OnClick(EventArgs e)
+        {
+            isKeyDown = isMouseDown = false;
+            base.OnClick(e);
+        }
+
+        /// <summary>
+        /// Raises the <see cref="E:System.Windows.Forms.Control.Enter" /> event.
+        /// </summary>
+        /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
+        protected override void OnEnter(EventArgs e)
+        {
+            isFocused = isFocusedByKey = true;
+            base.OnEnter(e);
+        }
+
+        /// <summary>
+        /// Raises the <see cref="E:System.Windows.Forms.Control.Leave" /> event.
+        /// </summary>
+        /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
+        protected override void OnLeave(EventArgs e)
+        {
+            base.OnLeave(e);
+            isFocused = isFocusedByKey = isKeyDown = isMouseDown = false;
+            Invalidate();
+        }
+
+        /// <summary>
+        /// Raises the <see cref="M:System.Windows.Forms.ButtonBase.OnKeyUp(System.Windows.Forms.KeyEventArgs)" /> event.
+        /// </summary>
+        /// <param name="kevent">A <see cref="T:System.Windows.Forms.KeyEventArgs" /> that contains the event data.</param>
+        protected override void OnKeyDown(KeyEventArgs kevent)
+        {
+            if (kevent.KeyCode == Keys.Space)
+            {
+                isKeyDown = true;
+                Invalidate();
+            }
+            base.OnKeyDown(kevent);
+        }
+
+        /// <summary>
+        /// Raises the <see cref="M:System.Windows.Forms.ButtonBase.OnKeyUp(System.Windows.Forms.KeyEventArgs)" /> event.
+        /// </summary>
+        /// <param name="kevent">A <see cref="T:System.Windows.Forms.KeyEventArgs" /> that contains the event data.</param>
+        protected override void OnKeyUp(KeyEventArgs kevent)
+        {
+            if (isKeyDown && kevent.KeyCode == Keys.Space)
+            {
+                isKeyDown = false;
+                Invalidate();
+            }
+            base.OnKeyUp(kevent);
+        }
+
+        /// <summary>
+        /// Raises the <see cref="E:System.Windows.Forms.Control.MouseDown" /> event.
+        /// </summary>
+        /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs" /> that contains the event data.</param>
+        protected override void OnMouseDown(MouseEventArgs e)
+        {
+            if (!isMouseDown && e.Button == MouseButtons.Left)
+            {
+                isMouseDown = true;
+                isFocusedByKey = false;
+                Invalidate();
+            }
+            base.OnMouseDown(e);
+        }
+
+        /// <summary>
+        /// Raises the <see cref="E:System.Windows.Forms.Control.MouseUp" /> event.
+        /// </summary>
+        /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs" /> that contains the event data.</param>
+        protected override void OnMouseUp(MouseEventArgs e)
+        {
+            if (isMouseDown)
+            {
+                isMouseDown = false;
+                Invalidate();
+            }
+            base.OnMouseUp(e);
+        }
+
+        /// <summary>
+        /// Raises the <see cref="M:System.Windows.Forms.Control.OnMouseMove(System.Windows.Forms.MouseEventArgs)" /> event.
+        /// </summary>
+        /// <param name="mevent">A <see cref="T:System.Windows.Forms.MouseEventArgs" /> that contains the event data.</param>
+        protected override void OnMouseMove(MouseEventArgs mevent)
+        {
+            base.OnMouseMove(mevent);
+            if (mevent.Button != MouseButtons.None)
+            {
+                if (!ClientRectangle.Contains(mevent.X, mevent.Y))
+                {
+                    if (isHovered)
+                    {
+                        isHovered = false;
+                        Invalidate();
+                    }
+                }
+                else if (!isHovered)
+                {
+                    isHovered = true;
+                    Invalidate();
+                }
+            }
+        }
+
+        /// <summary>
+        /// Raises the <see cref="E:System.Windows.Forms.Control.MouseEnter" /> event.
+        /// </summary>
+        /// <param name="e">The <see cref="System.EventArgs" /> instance containing the event data.</param>
+        protected override void OnMouseEnter(EventArgs e)
+        {
+            isHovered = true;
+            FadeIn();
+            Invalidate();
+            base.OnMouseEnter(e);
+        }
+
+        /// <summary>
+        /// Raises the <see cref="E:System.Windows.Forms.Control.MouseLeave" /> event.
+        /// </summary>
+        /// <param name="e">The <see cref="System.EventArgs" /> instance containing the event data.</param>
+        protected override void OnMouseLeave(EventArgs e)
+        {
+            isHovered = false;
+            FadeOut();
+            Invalidate();
+            base.OnMouseLeave(e);
+        }
+
+        #endregion
+
+        #region " Painting "
+
+        /// <summary>
+        /// Raises the <see cref="M:System.Windows.Forms.ButtonBase.OnPaint(System.Windows.Forms.PaintEventArgs)" /> event.
+        /// </summary>
+        /// <param name="pevent">A <see cref="T:System.Windows.Forms.PaintEventArgs" /> that contains the event data.</param>
+        protected override void OnPaint(PaintEventArgs pevent)
+        {
+            DrawButtonBackgroundFromBuffer(pevent.Graphics);
+            DrawForegroundFromButton(pevent);
+            DrawButtonForeground(pevent.Graphics);
+        }
+
+        private void DrawButtonBackgroundFromBuffer(Graphics graphics)
+        {
+            int frame;
+            if (!Enabled)
+            {
+                frame = FRAME_DISABLED;
+            }
+            else if (isPressed)
+            {
+                frame = FRAME_PRESSED;
+            }
+            else if (!isAnimating && currentFrame == 0)
+            {
+                frame = FRAME_NORMAL;
+            }
+            else
+            {
+                if (!HasAnimationFrames)
+                {
+                    CreateFrames(true);
+                }
+                frame = FRAME_ANIMATED + currentFrame;
+            }
+            if (frames == null)
+            {
+                CreateFrames();
+            }
+            graphics.DrawImage(frames[frame], Point.Empty);
+        }
+
+        public Image CreateBackgroundFrame(bool pressed, bool hovered,
+            bool animating, bool enabled, float glowOpacity)
+        {
+            Rectangle rect = ClientRectangle;
+            if (rect.Width <= 0)
+            {
+                rect.Width = 1;
+            }
+            if (rect.Height <= 0)
+            {
+                rect.Height = 1;
+            }
+            Image img = new Bitmap(rect.Width, rect.Height);
+            using (Graphics g = Graphics.FromImage(img))
+            {
+                g.Clear(Color.Transparent);
+                DrawButtonBackground(g, rect, pressed, hovered, animating, enabled,
+                    outerBorderColor, backColor, glowColor, shineColor, innerBorderColor,
+                    glowOpacity);
+            }
+            return img;
+        }
+
+        private static void DrawButtonBackground(Graphics g, Rectangle rectangle,
+            bool pressed, bool hovered, bool animating, bool enabled,
+            Color outerBorderColor, Color backColor, Color glowColor, Color shineColor,
+            Color innerBorderColor, float glowOpacity)
+        {
+            SmoothingMode sm = g.SmoothingMode;
+            g.SmoothingMode = SmoothingMode.AntiAlias;
+
+            #region " white border "
+            Rectangle rect = rectangle;
+            rect.Width--;
+            rect.Height--;
+            using (GraphicsPath bw = CreateRoundRectangle(rect, 4))
+            {
+                using (Pen p = new Pen(outerBorderColor))
+                {
+                    g.DrawPath(p, bw);
+                }
+            }
+            #endregion
+
+            rect.X++;
+            rect.Y++;
+            rect.Width -= 2;
+            rect.Height -= 2;
+            Rectangle rect2 = rect;
+            rect2.Height >>= 1;
+
+            #region " content "
+            using (GraphicsPath bb = CreateRoundRectangle(rect, 2))
+            {
+                int opacity = pressed ? 0xcc : 0x7f;
+                using (Brush br = new SolidBrush(Color.FromArgb(opacity, backColor)))
+                {
+                    g.FillPath(br, bb);
+                }
+            }
+            #endregion
+
+            #region " glow "
+            if ((hovered || animating) && !pressed)
+            {
+                using (GraphicsPath clip = CreateRoundRectangle(rect, 2))
+                {
+                    g.SetClip(clip, CombineMode.Intersect);
+                    using (GraphicsPath brad = CreateBottomRadialPath(rect))
+                    {
+                        using (PathGradientBrush pgr = new PathGradientBrush(brad))
+                        {
+                            unchecked
+                            {
+                                int opacity = (int)(0xB2 * glowOpacity + .5f);
+                                RectangleF bounds = brad.GetBounds();
+                                pgr.CenterPoint = new PointF((bounds.Left + bounds.Right) / 2f, (bounds.Top + bounds.Bottom) / 2f);
+                                pgr.CenterColor = Color.FromArgb(opacity, glowColor);
+                                pgr.SurroundColors = new Color[] { Color.FromArgb(0, glowColor) };
+                            }
+                            g.FillPath(pgr, brad);
+                        }
+                    }
+                    g.ResetClip();
+                }
+            }
+            #endregion
+
+            #region " shine "
+            if (rect2.Width > 0 && rect2.Height > 0)
+            {
+                rect2.Height++;
+                using (GraphicsPath bh = CreateTopRoundRectangle(rect2, 2))
+                {
+                    rect2.Height++;
+                    int opacity = 0x99;
+                    if (pressed | !enabled)
+                    {
+                        opacity = (int)(.4f * opacity + .5f);
+                    }
+                    using (LinearGradientBrush br = new LinearGradientBrush(rect2, Color.FromArgb(opacity, shineColor), Color.FromArgb(opacity / 3, shineColor), LinearGradientMode.Vertical))
+                    {
+                        g.FillPath(br, bh);
+                    }
+                }
+                rect2.Height -= 2;
+            }
+            #endregion
+
+            #region " black border "
+            using (GraphicsPath bb = CreateRoundRectangle(rect, 3))
+            {
+                using (Pen p = new Pen(innerBorderColor))
+                {
+                    g.DrawPath(p, bb);
+                }
+            }
+            #endregion
+
+            g.SmoothingMode = sm;
+        }
+
+        private void DrawButtonForeground(Graphics g)
+        {
+            if (Focused && ShowFocusCues)
+            {
+                Rectangle rect = ClientRectangle;
+                rect.Inflate(-4, -4);
+                ControlPaint.DrawFocusRectangle(g, rect);
+            }
+        }
+
+        private Button imageButton;
+        private void DrawForegroundFromButton(PaintEventArgs pevent)
+        {
+            if (imageButton == null)
+            {
+                imageButton = new Button();
+                imageButton.Parent = new TransparentControl();
+                imageButton.BackColor = Color.Transparent;
+                imageButton.FlatAppearance.BorderSize = 0;
+                imageButton.FlatStyle = FlatStyle.Flat;
+            }
+            imageButton.AutoEllipsis = AutoEllipsis;
+            if (Enabled)
+            {
+                imageButton.ForeColor = ForeColor;
+            }
+            else
+            {
+                imageButton.ForeColor = Color.FromArgb((3*ForeColor.R + backColor.R) >> 2,
+                    (3*ForeColor.G + backColor.G) >> 2,
+                    (3*ForeColor.B + backColor.B) >> 2);
+            }
+            imageButton.Font = Font;
+            imageButton.RightToLeft = RightToLeft;
+            imageButton.Image = Image;
+            imageButton.ImageAlign = ImageAlign;
+            imageButton.ImageIndex = ImageIndex;
+            imageButton.ImageKey = ImageKey;
+            imageButton.ImageList = ImageList;
+            imageButton.Padding = Padding;
+            imageButton.Size = Size;
+            imageButton.Text = Text;
+            imageButton.TextAlign = TextAlign;
+            imageButton.TextImageRelation = TextImageRelation;
+            imageButton.UseCompatibleTextRendering = UseCompatibleTextRendering;
+            imageButton.UseMnemonic = UseMnemonic;
+            InvokePaint(imageButton, pevent);
+        }
+
+        class TransparentControl : Control
+        {
+            protected override void OnPaintBackground(PaintEventArgs pevent) { }
+            protected override void OnPaint(PaintEventArgs e) { }
+        }
+
+        private static GraphicsPath CreateRoundRectangle(Rectangle rectangle, int radius)
+        {
+            radius += 10;
+            GraphicsPath path = new GraphicsPath();
+            int l = rectangle.Left;
+            int t = rectangle.Top;
+            int w = rectangle.Width;
+            int h = rectangle.Height;
+            int d = radius << 1;
+            path.AddArc(l, t, d, d, 180, 90); // topleft
+            path.AddLine(l + radius, t, l + w - radius, t); // top
+            path.AddArc(l + w - d, t, d, d, 270, 90); // topright
+            path.AddLine(l + w, t + radius, l + w, t + h - radius); // right
+            path.AddArc(l + w - d, t + h - d, d, d, 0, 90); // bottomright
+            path.AddLine(l + w - radius, t + h, l + radius, t + h); // bottom
+            path.AddArc(l, t + h - d, d, d, 90, 90); // bottomleft
+            path.AddLine(l, t + h - radius, l, t + radius); // left
+            path.CloseFigure();
+            return path;
+        }
+
+        private static GraphicsPath CreateTopRoundRectangle(Rectangle rectangle, int radius)
+        {
+            radius += 10;
+            GraphicsPath path = new GraphicsPath();
+            int l = rectangle.Left;
+            int t = rectangle.Top;
+            int w = rectangle.Width;
+            int h = rectangle.Height;
+            int d = radius << 1;
+            path.AddArc(l, t, d, d, 180, 90); // topleft
+            path.AddLine(l + radius, t, l + w - radius, t); // top
+            path.AddArc(l + w - d, t, d, d, 270, 90); // topright
+            path.AddLine(l + w, t + radius, l + w, t + h); // right
+            path.AddLine(l + w, t + h, l, t + h); // bottom
+            path.AddLine(l, t + h, l, t + radius); // left
+            path.CloseFigure();
+            return path;
+        }
+
+        private static GraphicsPath CreateBottomRadialPath(Rectangle rectangle)
+        {
+            GraphicsPath path = new GraphicsPath();
+            RectangleF rect = rectangle;
+            rect.X -= rect.Width * .35f;
+            rect.Y -= rect.Height * .15f;
+            rect.Width *= 1.7f;
+            rect.Height *= 2.3f;
+            path.AddEllipse(rect);
+            path.CloseFigure();
+            return path;
+        }
+
+        #endregion
+
+        #region " Unused Properties & Events "
+
+        /// <summary>This property is not relevant for this class.</summary>
+        /// <returns>This property is not relevant for this class.</returns>
+        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
+        public new FlatButtonAppearance FlatAppearance
+        {
+            get { return base.FlatAppearance; }
+        }
+
+        /// <summary>This property is not relevant for this class.</summary>
+        /// <returns>This property is not relevant for this class.</returns>
+        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
+        public new FlatStyle FlatStyle
+        {
+            get { return base.FlatStyle; }
+            set { base.FlatStyle = value; }
+        }
+
+        /// <summary>This property is not relevant for this class.</summary>
+        /// <returns>This property is not relevant for this class.</returns>
+        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
+        public new bool UseVisualStyleBackColor
+        {
+            get { return base.UseVisualStyleBackColor; }
+            set { base.UseVisualStyleBackColor = value; }
+        }
+
+        #endregion
+
+        #region " Animation Support "
+
+        private List<Image> frames;
+
+        private const int FRAME_DISABLED = 0;
+        private const int FRAME_PRESSED = 1;
+        private const int FRAME_NORMAL = 2;
+        private const int FRAME_ANIMATED = 3;
+
+        private bool HasAnimationFrames
+        {
+            get
+            {
+                return frames != null && frames.Count > FRAME_ANIMATED;
+            }
+        }
+
+        private void CreateFrames()
+        {
+            CreateFrames(false);
+        }
+
+        private void CreateFrames(bool withAnimationFrames)
+        {
+            DestroyFrames();
+            if (!IsHandleCreated)
+            {
+                return;
+            }
+            if (frames == null)
+            {
+                frames = new List<Image>();
+            }
+            frames.Add(CreateBackgroundFrame(false, false, false, false, 0));
+            frames.Add(CreateBackgroundFrame(true, true, false, true, 0));
+            frames.Add(CreateBackgroundFrame(false, false, false, true, 0));
+            if (!withAnimationFrames)
+            {
+                return;
+            }
+            for (int i = 0; i < framesCount; i++)
+            {
+                frames.Add(CreateBackgroundFrame(false, true, true, true, (float)i / (framesCount - 1F)));
+            }
+        }
+
+        private void DestroyFrames()
+        {
+            if (frames != null)
+            {
+                while (frames.Count > 0)
+                {
+                    frames[frames.Count - 1].Dispose();
+                    frames.RemoveAt(frames.Count - 1);
+                }
+            }
+        }
+
+        private const int animationLength = 300;
+        private const int framesCount = 10;
+        private int currentFrame;
+        private int direction;
+
+        private bool isAnimating
+        {
+            get
+            {
+                return direction != 0;
+            }
+        }
+
+        private void FadeIn()
+        {
+            direction = 1;
+            timer.Enabled = true;
+        }
+
+        private void FadeOut()
+        {
+            direction = -1;
+            timer.Enabled = true;
+        }
+
+        private void timer_Tick(object sender, EventArgs e)
+        {
+            if (!timer.Enabled)
+            {
+                return;
+            }
+            Refresh();
+            currentFrame += direction;
+            if (currentFrame == -1)
+            {
+                currentFrame = 0;
+                timer.Enabled = false;
+                direction = 0;
+                return;
+            }
+            if (currentFrame == framesCount)
+            {
+                currentFrame = framesCount - 1;
+                timer.Enabled = false;
+                direction = 0;
+            }
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.10.0