mirror of
https://github.com/greenshot/greenshot
synced 2025-08-20 21:43:24 -07:00
Made some changes which make the switch from region to window more interesting, for this I had to change some code so the "fade in/out" animations are running until finished.
git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2352 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
parent
010e43704d
commit
4800bedde2
2 changed files with 140 additions and 80 deletions
|
@ -24,18 +24,44 @@ using System.Drawing.Drawing2D;
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace Greenshot.Helpers {
|
||||
|
||||
/// <summary>
|
||||
/// Helper interface for passing base type
|
||||
/// </summary>
|
||||
public interface IAnimator {
|
||||
/// <summary>
|
||||
/// Is there a next frame?
|
||||
/// </summary>
|
||||
bool hasNext {
|
||||
get;
|
||||
}
|
||||
/// <summary>
|
||||
/// The amount of frames
|
||||
/// </summary>
|
||||
int Frames {
|
||||
get;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Current frame number
|
||||
/// </summary>
|
||||
int CurrentFrameNr {
|
||||
get;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Base class for the animation logic, this only implements Properties and a constructor
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Type for the animation, like Point/Rectangle/Size</typeparam>
|
||||
public abstract class AnimatorBase<T> {
|
||||
public abstract class AnimatorBase<T> : IAnimator {
|
||||
private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(AnimatorBase<T>));
|
||||
protected T first;
|
||||
protected T last;
|
||||
protected T current;
|
||||
protected Queue<T> queue = new Queue<T>();
|
||||
protected double frames;
|
||||
protected double currentFrame = 0;
|
||||
protected int frames;
|
||||
protected int currentFrameNr = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
|
@ -57,15 +83,15 @@ namespace Greenshot.Helpers {
|
|||
/// <summary>
|
||||
/// The amount of frames
|
||||
/// </summary>
|
||||
public double Frames {
|
||||
public int Frames {
|
||||
get { return frames; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Current frame number
|
||||
/// </summary>
|
||||
public double CurrentFrame {
|
||||
get { return currentFrame; }
|
||||
public int CurrentFrameNr {
|
||||
get { return currentFrameNr; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -107,12 +133,12 @@ namespace Greenshot.Helpers {
|
|||
/// </summary>
|
||||
/// <param name="newDestination"></param>
|
||||
/// <param name="frames"></param>
|
||||
public void ChangeDestination(T newDestination, double frames) {
|
||||
public void ChangeDestination(T newDestination, int frames) {
|
||||
queue.Clear();
|
||||
this.first = current;
|
||||
this.currentFrame = 0;
|
||||
this.currentFrameNr = 0;
|
||||
this.frames = frames;
|
||||
this.last = newDestination;
|
||||
queue.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -146,12 +172,12 @@ namespace Greenshot.Helpers {
|
|||
get {
|
||||
switch (EasingMode) {
|
||||
case EasingMode.EaseOut:
|
||||
return Easing.EaseOut(currentFrame / frames, EasingType);
|
||||
return Easing.EaseOut((double)currentFrameNr / (double)frames, EasingType);
|
||||
case EasingMode.EaseInOut:
|
||||
return Easing.EaseInOut(currentFrame / frames, EasingType);
|
||||
return Easing.EaseInOut((double)currentFrameNr / (double)frames, EasingType);
|
||||
case EasingMode.EaseIn:
|
||||
default:
|
||||
return Easing.EaseIn(currentFrame / frames, EasingType);
|
||||
return Easing.EaseIn((double)currentFrameNr / (double)frames, EasingType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -170,14 +196,14 @@ namespace Greenshot.Helpers {
|
|||
/// </summary>
|
||||
public virtual bool NextFrame {
|
||||
get {
|
||||
if (currentFrame < frames) {
|
||||
currentFrame++;
|
||||
if (currentFrameNr < frames) {
|
||||
currentFrameNr++;
|
||||
return true;
|
||||
}
|
||||
if (queue.Count > 0) {
|
||||
this.first = current;
|
||||
this.last = queue.Dequeue();
|
||||
this.currentFrame = 0;
|
||||
this.currentFrameNr = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -189,7 +215,7 @@ namespace Greenshot.Helpers {
|
|||
/// </summary>
|
||||
public virtual bool hasNext {
|
||||
get {
|
||||
if (currentFrame < frames) {
|
||||
if (currentFrameNr < frames) {
|
||||
return true;
|
||||
}
|
||||
return queue.Count > 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue