Transition_EaseOut

Syntax

Value.d = Transition_EaseOut(t.d, b.d, c.d, d.d)

Description

Calculates an intermediate value using a standard "ease-out" transition curve. The animation starts quickly and decelerates towards the end. It's equivalent to a specific cubic-bezier(0, 0, 0.58, 1) curve.

Parameters

t.d
The current elapsed time of the animation in milliseconds.

b.d
The starting value of the property being animated.

c.d
The total change in value (target value - starting value).

d.d
The total duration of the animation in milliseconds.

Return Value

Returns the interpolated value (Double) at the current time `t` according to the "ease-out" curve.

Remarks

This is a predefined easing function based on the CSS `ease-out` timing function.

Example

IncludeFile "ProGUI_PB.pbi"

Structure MyAnimData
  TargetValue.d
  StartValue.d
  x.d
EndStructure

Procedure DrawHandler(Window, EventType, *EventData.PG_EventDraw, *UserData.MyAnimData)
  
    DrawClear(RGB(200, 200, 200), 1) ; Grey background

    ; Draw a box whose X position is animated
    DrawBox(*UserData\x, (*EventData\height / 2) - 25, 50, 50, RGB(0, 0, 255))
    
EndProcedure

Procedure AnimateHandler(Window, EventType, *EventData.PG_EventAnimate, *UserData.MyAnimData)
  
  Select *EventData\state
  
    Case #PG_Event_Animate_Start
      Debug "Animation started."
      
    Case #PG_Event_Animate_Update
      ; Calculate intermediate value using the ease-out transition
      *UserData\x = Transition_EaseOut(*EventData\currentTime, *UserData\StartValue, *UserData\TargetValue - *UserData\StartValue, *EventData\duration) 
      WindowRedraw(Window)
      
    Case #PG_Event_Animate_End
      Debug "Animation ended"
      ; Ensure final value is set exactly
      *UserData\x = *UserData\TargetValue
      WindowRedraw(Window)
      ; Optional: Restart or clean up
      ; FreeStructure(*UserData) 
  EndSelect
EndProcedure

StartProGUI()

MyWindow = CreateWindow(0, 0, 300, 200, "Transition_EaseOut Example")

If MyWindow
    
  ; Setup data for animation
  *AnimData.MyAnimData = AllocateStructure(MyAnimData)
  *AnimData\StartValue = 10 
  *AnimData\TargetValue = 200
    
  AddEventHandler(MyWindow, #PG_Event_Draw, @DrawHandler(), *AnimData)
  AddEventHandler(MyWindow, #PG_Event_Animate, @AnimateHandler(), *AnimData) 

  ; Start a 2-second animation
  AnimID = StartAnimation(MyWindow, #PG_Any, 2000)

  WindowShow(MyWindow, #True, #PG_Window_ScreenCentered)
  Repeat : Event = WaitWindowEvent() : Until Event = #PB_Event_CloseWindow
  
  StopAnimation(MyWindow, AnimID) 
  FreeStructure(*AnimData)
  
EndIf 

StopProGUI()

See Also

Transition_Ease, Transition_EaseIn, Transition_EaseInOut, Transition_CubicBezier, StartAnimation

Supported OS

Windows, Linux