/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . android . egg . paint Ċ Ċ import Ġjava . util . LinkedList Ċ Ċ import Ġandroid . view . Motion Event Ċ Ċ class ĠSpot Filter ( internal Ġvar Ġm Buf Size : ĠInt , Ġpos Dec ay : ĠFloat , Ġpressure Dec ay : ĠFloat , Ġinternal Ġvar Ġm Plot ter : ĠPlot ter ) Ġ{ ĊĠĠĠ Ġval Ġsp ots Ġ= ĠLinkedList < Motion Event . Pointer Coords >() Ġ// Ġnewest Ġat Ġfront ĊĠĠĠ Ġval Ġtmp Spot Ġ= ĠMotion Event . Pointer Coords () ĊĠĠĠ Ġvar Ġlast Tool Ġ= ĠMotion Event . TOOL _ TYPE _ UNKNOWN ĊĊĠĠĠ Ġval Ġpos Dec ay : ĠFloat ĊĠĠĠ Ġval Ġpressure Dec ay : ĠFloat ĊĊĠĠĠ Ġinterface ĠPlot ter Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġplot ( s : ĠMotion Event . Pointer Coords ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pos Dec ay Ġ= Ġif Ġ( pos Dec ay Ġin Ġ 0 f .. 1 f ) Ġpos Dec ay Ġelse Ġ 1 f ĊĠĠĠĠĠĠĠ Ġthis . pressure Dec ay Ġ= Ġif Ġ( pressure Dec ay Ġin Ġ 0 f .. 1 f ) Ġpressure Dec ay Ġelse Ġ 1 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfilter Into ( out : ĠMotion Event . Pointer Coords , Ġtool : ĠInt ): ĠMotion Event . Pointer Coords Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Tool Ġ= Ġtool ĊĊĠĠĠĠĠĠĠ Ġvar Ġwi Ġ= Ġ 1 f Ġ// Ġweight Ġfor Ġ ith Ġcomponent Ġ( position ) ĊĠĠĠĠĠĠĠ Ġvar Ġw Ġ= Ġ 0 f Ġ// Ġtotal Ġweight ĊĠĠĠĠĠĠĠ Ġvar Ġwi _ press Ġ= Ġ 1 f Ġ// Ġweight Ġfor Ġ ith Ġcomponent Ġ( pressure ) ĊĠĠĠĠĠĠĠ Ġvar Ġw _ press Ġ= Ġ 0 f Ġ// Ġtotal Ġweight Ġ( pressure ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġpressure Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġfor Ġ( pi Ġin Ġsp ots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġpi . x Ġ* Ġwi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġpi . y Ġ* Ġwi ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressure Ġ+= Ġpi . pressure Ġ* Ġwi _ press ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ+= Ġpi . size Ġ* Ġwi _ press ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ+= Ġwi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwi Ġ*= Ġpos Dec ay Ġ// Ġexponential Ġbackoff ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġw _ press Ġ+= Ġwi _ press ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwi _ press Ġ*= Ġpressure Dec ay ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( PRE CI SE _ STY L US _ INPUT Ġ&& Ġtool Ġ== ĠMotion Event . TOOL _ TYPE _ STY L US ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġjust Ġtake Ġthe Ġnewest Ġone , Ġno Ġneed Ġto Ġaverage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġout . x Ġ= Ġx Ġ/ Ġw ĊĠĠĠĠĠĠĠ Ġout . y Ġ= Ġy Ġ/ Ġw ĊĠĠĠĠĠĠĠ Ġout . pressure Ġ= Ġpressure Ġ/ Ġw _ press ĊĠĠĠĠĠĠĠ Ġout . size Ġ= Ġsize Ġ/ Ġw _ press ĊĠĠĠĠĠĠĠ Ġreturn Ġout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd Internal ( c : ĠMotion Event . Pointer Coords , Ġtool : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoord Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( spot s . size Ġ== Ġm Buf Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ots . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . Pointer Coords () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcoord . copyFrom ( c ) ĊĊĠĠĠĠĠĠĠ Ġsp ots . add ( 0 , Ġcoord ) ĊĊĠĠĠĠĠĠĠ Ġfilter Into ( tmp Spot , Ġtool ) ĊĠĠĠĠĠĠĠ Ġm Plot ter . plot ( tmp Spot ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( cv : ĠList < Motion Event . Pointer Coords >, Ġtool : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcv ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Internal ( c , Ġtool ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( evt : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtool Ġ= Ġevt . get Tool Type ( 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġevt . history Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevt . get H istorical Pointer Coords ( 0 , Ġi , Ġtmp Spot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Internal ( tmp Spot , Ġtool ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevt . get Pointer Coords ( 0 , Ġtmp Spot ) ĊĠĠĠĠĠĠĠ Ġadd Internal ( tmp Spot , Ġtool ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( spot s . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Into ( tmp Spot , Ġlast Tool ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ots . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Plot ter . plot ( tmp Spot ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsp ots . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠPRE CI SE _ STY L US _ INPUT Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } ĊĊĊ