anchor.diff:    System.SysUtils;
   
   type
  +  IEasing = interface ['{97B451B6-FBAB-45DE-9979-7A740CDC3AFA}']
  +    procedure Complete;
  +  end; { IEasing }
  +
     Easing = class
  -    class procedure Linear(start, stop: integer; duration_ms, tick_ms: integer; updater: TProc<integer>); static;
  +    class function InOutCubic(start, stop: integer; duration_ms, tick_ms: integer;
  +      updater: TProc<integer>): IEasing; static;
  +    class function InOutQuintic(start, stop: integer; duration_ms, tick_ms: integer;
  +      updater: TProc<integer>): IEasing; static;
  +    class function Linear(start, stop: integer; duration_ms, tick_ms: integer;
  +      updater: TProc<integer>): IEasing; static;
     end; { Easing }
   
   implementation
  
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:   DSiWin32;
  
  type
    TEasing = class(TInterfacedObject, IEasing)
    strict private
      FDuration_ms: integer;
      FEasingFunc : TFunc<integer, integer>;
      FStartValue : integer;
      FStopValue  : integer;
      FStart_ms   : int64;
      FTick_ms    : integer;
      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;
  