 
 : <trails-gadget> ( -- trails-gadget )
     trails-gadget new
-        300 point-list >>points
+        300 f <array> <circular> >>points
         t >>clipped?
         dup '[ _ dup iterate-system relayout-1 ]
         f 10 milliseconds <timer> >>timer ;

    ! Return the mouse location relative to the current gadget
    hand-loc get hand-gadget get screen-loc v- ;

: point-list ( n -- seq ) { 0 0 } <array> <circular> ;

: percent->radius ( percent -- radius ) neg 1 + 25 * 5 max ;

: dot ( pos percent -- ) percent->radius draw-circle ;

TUPLE: trails-gadget < gadget points timer ;


:: iterate-system ( GADGET -- )
    ! Add a valid point if the mouse is in the gadget
    ! Otherwise, add an "invisible" point
    hand-gadget get GADGET = [ mouse ] [ f ] if
    GADGET points>> circular-push ;

M: trails-gadget pref-dim* drop { 500 500 } ;
