refine animation
This commit is contained in:
@@ -7,6 +7,7 @@ using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Diagnostics;
|
||||
|
||||
|
||||
namespace Shadowsocks.View
|
||||
@@ -20,7 +21,7 @@ namespace Shadowsocks.View
|
||||
this.Load += QRCodeSplashForm_Load;
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
this.BackColor = System.Drawing.Color.White;
|
||||
this.ClientSize = new System.Drawing.Size(284, 262);
|
||||
this.ClientSize = new System.Drawing.Size(1, 1);
|
||||
this.ControlBox = false;
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
||||
this.MaximizeBox = false;
|
||||
@@ -31,14 +32,14 @@ namespace Shadowsocks.View
|
||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||
this.TopMost = true;
|
||||
|
||||
}
|
||||
|
||||
private Timer timer;
|
||||
private int animationStep;
|
||||
private int flashStep;
|
||||
private static int ANIMATION_STEPS = 30;
|
||||
private static double ANIMATION_TIME = 0.3;
|
||||
private static double FPS = 1.0 / 15 * 1000; // System.Windows.Forms.Timer resolution is 15ms
|
||||
private static double ANIMATION_TIME = 0.5;
|
||||
private static int ANIMATION_STEPS = (int)(ANIMATION_TIME * FPS);
|
||||
Stopwatch sw;
|
||||
int x;
|
||||
int y;
|
||||
int w;
|
||||
@@ -52,12 +53,12 @@ namespace Shadowsocks.View
|
||||
{
|
||||
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
|
||||
this.BackColor = Color.Transparent;
|
||||
animationStep = 0;
|
||||
flashStep = 0;
|
||||
x = 0;
|
||||
y = 0;
|
||||
w = Width;
|
||||
h = Height;
|
||||
sw = Stopwatch.StartNew();
|
||||
timer = new Timer();
|
||||
timer.Interval = (int)(ANIMATION_TIME * 1000 / ANIMATION_STEPS);
|
||||
timer.Tick += timer_Tick;
|
||||
@@ -80,10 +81,9 @@ namespace Shadowsocks.View
|
||||
|
||||
void timer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (animationStep < ANIMATION_STEPS)
|
||||
double percent = (double)sw.ElapsedMilliseconds / 1000.0 / (double)ANIMATION_TIME;
|
||||
if (percent < 1)
|
||||
{
|
||||
animationStep++;
|
||||
double percent = (double)animationStep / (double)ANIMATION_STEPS;
|
||||
// ease out
|
||||
percent = 1 - Math.Pow((1 - percent), 4);
|
||||
x = (int)(TargetRect.X * percent);
|
||||
@@ -101,14 +101,15 @@ namespace Shadowsocks.View
|
||||
}
|
||||
else
|
||||
{
|
||||
timer.Interval = 50;
|
||||
if (flashStep == 0)
|
||||
{
|
||||
timer.Interval = 100;
|
||||
g.Clear(Color.Transparent);
|
||||
SetBitmap(bitmap);
|
||||
}
|
||||
else if (flashStep == 1)
|
||||
{
|
||||
timer.Interval = 50;
|
||||
g.FillRectangle(brush, x, y, w, h);
|
||||
g.DrawRectangle(pen, x, y, w, h);
|
||||
SetBitmap(bitmap);
|
||||
@@ -137,6 +138,7 @@ namespace Shadowsocks.View
|
||||
}
|
||||
else
|
||||
{
|
||||
sw.Stop();
|
||||
timer.Stop();
|
||||
pen.Dispose();
|
||||
brush.Dispose();
|
||||
|
||||
Reference in New Issue
Block a user