/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġjet brains . datal ore . vis . canvas . awt ĊĊ Ċ import Ġjet brains . datal ore . base . registration . Disposable Ċ import Ġjava . awt . EventQueue Ċ import Ġjava . awt . event . ActionListener Ċ import Ġjavax . swing . Timer Ċ Ċ class ĠA wt Animation Timer Peer ( ĊĠĠĠ Ġval Ġexecutor : Ġ(() Ġ-> ĠUnit ) Ġ-> ĠUnit Ġ= Ġ{ Ġf Ġ-> ĠEvent Queue . invoke Later Ġ{ Ġf () Ġ} Ġ}, ĊĠĠĠ Ġprivate Ġval Ġupdate Rate : ĠInt Ġ= Ġ 6 0 Ċ ) Ġ: ĠDis posable Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmy Handlers Ġ= ĠArrayList <( Long ) Ġ-> ĠUnit >() ĊĊĠĠĠ Ġprivate Ġvar Ġaction Listener Ġ= ĠActionListener Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Handlers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmy Timer : ĠTimer Ġ= ĠTimer ( 1 0 0 0 Ġ/ Ġupdate Rate , Ġaction Listener ) ĊĊĠĠĠ Ġfun Ġadd Handler ( handler : Ġ( Long ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( my Handlers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Handlers . add ( handler ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! my Timer . isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Timer . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Handler ( handler : Ġ( Long ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( my Handlers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Handlers . remove ( handler ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Handlers . isEmpty () Ġ&& Ġmy Timer . isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Timer . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Timer . stop () ĊĠĠĠĠĠĠĠ Ġmy Timer . remove ActionListener ( action Listener ) ĊĠĠĠĠĠĠĠ Ġaction Listener Ġ= ĠActionListener Ġ{} ĊĠĠĠĠĠĠĠ Ġmy Handlers . clear () ĊĠĠĠ Ġ} Ċ }