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