Overview

SwirlEffectLib creates a swirl/twist distortion around a center point, wrapping the FireMonkey TSwirlEffect component. Pixels are rotated in a spiral pattern, with the rotation amount decreasing toward the edges — creating mesmerizing vortex effects.

PropertyDetails
LibrarySwirlEffectLib
Prefixswirl_
WrapsTSwirlEffect
Functions16
TypeVisual effect (distortion)
CategoryCountDescription
Creation / Destruction2Create and free effect
Strength2Get/set swirl intensity
Center Position4Get/set X and Y center
Effect Control4Enabled and trigger get/set
Error Handling4Error codes and messages
🌀 Vortex Distortion: Positive strength spirals clockwise, negative counter-clockwise. Animate the strength with sin() for a mesmerizing pulsating swirl effect.

Cross-Platform Support

PlatformSupport
Windows✅ Full support
Linux✅ Full support
Android✅ Full support

Creation & Destruction

swirl#(parent#)

Creates a new swirl effect attached to the specified visual control.

ParameterTypeDescription
parent#PointerTarget visual control
ReturnsPointerEffect handle, or 0 on failure

swirl_free(effect#)

Destroys the effect and releases associated resources.

Error Handling

FunctionSignatureDescription
swirl_error()swirl_error@Returns last error code (0 = none)
swirl_errormsg$()swirl_errormsg$@Returns last error message
swirl_strerror$(code)swirl_strerror$@nConverts error code to text
swirl_clearerror()swirl_clearerror@Clears the error state

Strength

Controls the swirl intensity. The range is unbounded — larger absolute values create more dramatic spirals.

FunctionSignatureDescription
swirl_strength#(effect#, value)swirl_strength#@#nSet swirl intensity
swirl_strength(effect#)swirl_strength@#Get strength
ValueEffect
-3 to -1Strong counter-clockwise
-0.5Gentle counter-clockwise
0No swirl (original image)
0.5Gentle clockwise (default)
1 to 3Strong clockwise

Center Position

Sets the center point of the swirl using normalized coordinates (0–1).

FunctionSignatureDescription
swirl_centerx#(effect#, value)swirl_centerx#@#nSet X center (0–1)
swirl_centerx(effect#)swirl_centerx@#Get X center
swirl_centery#(effect#, value)swirl_centery#@#nSet Y center (0–1)
swirl_centery(effect#)swirl_centery@#Get Y center

Effect Control

FunctionSignatureDescription
swirl_enabled#(effect#, value)swirl_enabled#@#nEnable (1) or disable (0)
swirl_enabled(effect#)swirl_enabled@#Gets enabled state
swirl_trigger#(effect#, trigger$)swirl_trigger#@#$Sets trigger string
swirl_trigger$(effect#)swirl_trigger$@#Gets trigger string

Complete Examples

Example 1: Adjustable Swirl

╯ swirl-control.bas
let frm# = Pointer#(0)
let img# = Pointer#(0)
let swirl# = Pointer#(0)
let trkStr# = Pointer#(0)
let lblStr# = Pointer#(0)

frm# = form#("Swirl Control", 450, 400)

img# = image#(frm#)
image_bounds#(img#, 125, 30, 200, 150)
image_load#(img#, "https://picsum.photos/200/150")

swirl# = swirl#(img#)
swirl_strength#(swirl#, 0)

' Strength slider (-3 to +3)
lblStr# = label#(frm#, "Strength: 0.0", 180, 200)
trkStr# = trackbar#(frm#)
trackbar_bounds#(trkStr#, 50, 230, 350, 30)
trackbar_max#(trkStr#, 60)
trackbar_value#(trkStr#, 30)
trackbar_onchange#(trkStr#, "OnStrength")

form_show(frm#)

function OnStrength(sender#) local s
  let s = (trackbar_value(trkStr#) - 30) / 10
  swirl_strength#(swirl#, s)
  label_text#(lblStr#, "Strength: " + stri$(s, 1))
endfunction

Example 2: Animated Pulsating Swirl

╯ animated-swirl.bas
let frm# = Pointer#(0)
let img# = Pointer#(0)
let swirl# = Pointer#(0)
let tmr# = Pointer#(0)
let btn# = Pointer#(0)
let strength = 0
let running = 0

frm# = form#("Animated Swirl", 400, 350)

img# = image#(frm#)
image_bounds#(img#, 100, 30, 200, 150)
image_load#(img#, "https://picsum.photos/200/150")

swirl# = swirl#(img#)
swirl_strength#(swirl#, 0)

tmr# = timer#()
timer_interval#(tmr#, 50)
timer_enabled#(tmr#, 0)
timer_ontimer#(tmr#, "Animate")

btn# = button#(frm#, "Start Swirl")
button_bounds#(btn#, 140, 210, 120, 30)
button_onclick#(btn#, "ToggleAnimation")

form_show(frm#)

function ToggleAnimation(sender#)
  if running = 0 then
    running = 1
    timer_enabled#(tmr#, 1)
    button_text#(btn#, "Stop Swirl")
  else
    running = 0
    timer_enabled#(tmr#, 0)
    button_text#(btn#, "Start Swirl")
  endif
endfunction

function Animate(sender#)
  strength = strength + 0.05
  swirl_strength#(swirl#, sin(strength) * 2)
endfunction

Quick Reference

FunctionSignatureDescription
CREATION & DESTRUCTION
swirl#(parent#)swirl#@#Create effect
swirl_free(effect#)swirl_free@#Destroy effect
STRENGTH
swirl_strength#(effect#, value)swirl_strength#@#nSet intensity
swirl_strength(effect#)swirl_strength@#Get strength
CENTER POSITION
swirl_centerx#(effect#, value)swirl_centerx#@#nSet X center (0–1)
swirl_centerx(effect#)swirl_centerx@#Get X center
swirl_centery#(effect#, value)swirl_centery#@#nSet Y center (0–1)
swirl_centery(effect#)swirl_centery@#Get Y center
EFFECT CONTROL
swirl_enabled#(effect#, value)swirl_enabled#@#nEnable/disable
swirl_enabled(effect#)swirl_enabled@#Get enabled state
swirl_trigger#(effect#, trigger$)swirl_trigger#@#$Set trigger
swirl_trigger$(effect#)swirl_trigger$@#Get trigger
ERROR HANDLING
swirl_error()swirl_error@Last error code
swirl_errormsg$()swirl_errormsg$@Last error message
swirl_strerror$(code)swirl_strerror$@nCode to text
swirl_clearerror()swirl_clearerror@Clear error state

See Also

LibraryDescription
SwirlTransitionEffectLibSwirl-based transition
RippleEffectLibWater ripple distortion
PinchEffectLibPinch/bulge distortion
WaveEffectLibWave distortion