anchor.diff:    DSiWin32;
   
   type
  -  TEasing = class
  +  TEasing = class(TInterfacedObject, IEasing)
     strict private
       FDuration_ms: integer;
  +    FEasingFunc : TFunc<integer, integer>;
       FStartValue : integer;
       FStopValue  : integer;
  +    FStart_ms   : int64;
       FTick_ms    : integer;
  -    FStart_ms   : int64;
       FTimer      : TTimer;
       FUpdater    : TProc<integer>;
  +    FValueDiff  : integer;
     strict protected
  +    function  InOutCubicEasing(delta_ms: integer): integer;
  +    function  InOutQuinticEasing(delta_ms: integer): integer;
  +    function  LinearEasing(delta_ms: integer): integer;
       procedure StartTimer;
       procedure UpdateValue(sender: TObject);
     public
       destructor Destroy; override;
  +    procedure Complete;
  +    procedure InOutCubic;
  +    procedure InOutQuintic;
       procedure Linear;
       property Duration_ms: integer read FDuration_ms write FDuration_ms;
       property StartValue: integer read FStartValue write FStartValue;
  
positive.code: destructor TEasing.Destroy;
  begin
    FreeAndNil(FTimer);
    updater(StopValue);
    inherited;
  end; { TEasing }
  
  procedure TEasing.Linear;
  begin
    StartTimer;
  end; { TEasing.Linear }
  
  procedure TEasing.StartTimer;
  begin
    FTimer := TTimer.Create(nil);
    FTimer.Interval := Tick_ms;
    FTimer.OnTimer := UpdateValue;
  
negative.code: unit GpEasing;
  
  // Easing functions: http://www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm
  
  interface
  
  