Ring start and end positions are calculated by passing a linearly increasing value into sine and cosine functions. Draw direction swaps if two ends meet, but are rounded in such a way to create a sort of bouncing / flickering effect.
Scroll: Zoom in / out
Click: Change theme
Double click: Enter full screen