package Ġcom . cr ane . pdf viewer . view Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroidx . core . util . Pools Ċ Ċ class ĠPdf Page Layer ( ĊĠĠĠ Ġpdf Source : ĠPdf Source , ĊĠĠĠ Ġpage Index : ĠInt , ĊĠĠĠ Ġposition World : ĠRect F , ĊĠĠĠ Ġmatrix : ĠMatrix , ĊĠĠĠ Ġmatrix Inv : ĠMatrix Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPO OL _ SIZE Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpool Ġ= ĠP ools . Simple Pool < Pdf Page Layer Cell >( POOL _ SIZE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcells Ġ= Ġmutable ListOf < Pdf Page Layer Cell >() ĊĠĠĠ Ġprivate Ġvar Ġis Release Pending Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġstate Time : ĠFloat Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġvar Ġis Ready To Release Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcell Size Screen Ġ= ĠPdf Page Layer Cell Loader . BITMAP _ SIZE . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġcell Size World Ġ= Ġmatrix Inv . map Radius ( cell Size Screen ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġmatrix . map Radius ( position World . width ()) Ġ/ Ġposition World . width () ĊĊĠĠĠĠĠĠĠ Ġvar Ġleft Ġ= Ġposition World . left ĊĠĠĠĠĠĠĠ Ġwhile Ġ( left Ġ< Ġposition World . right ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġif Ġ( left Ġ+ Ġcell Size World Ġ> Ġposition World . right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition World . right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ+ Ġcell Size World ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbw Ġ= Ġmatrix . map Radius ( right Ġ- Ġleft ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bw Ġ< Ġ 1 . 0 f ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtop Ġ= Ġposition World . top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( top Ġ< Ġposition World . bottom ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġif Ġ( top Ġ+ Ġcell Size World Ġ> Ġposition World . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition World . bottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ+ Ġcell Size World ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbh Ġ= Ġmatrix . map Radius ( bottom Ġ- Ġtop ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bh Ġ< Ġ 1 . 0 f ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Position World Ġ= ĠRect F ( left , Ġtop , Ġright , Ġbottom ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Clip Ġ= ĠRect ( 0 , Ġ 0 , Ġbw . toInt (), Ġbh . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Position Local Ġ= ĠRect F ( cell Position World ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Position Local . left Ġ-= Ġposition World . left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Position Local . right Ġ-= Ġposition World . left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Position Local . top Ġ-= Ġposition World . top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Position Local . bottom Ġ-= Ġposition World . top ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Matrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Matrix . post Translate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- cell Position Local . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- cell Position Local . top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Matrix . post Scale ( scale , Ġscale ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells Ġ+= ĠPdf Page Layer Cell ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf Source , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Position World , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Clip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Matrix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ+= Ġcell Size World ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ+= Ġcell Size World ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Layer ( delta : ĠFloat , Ġview Rect World : ĠRect F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Time Ġ+= Ġdelta ĊĠĠĠĠĠĠĠ Ġif Ġ( is Release Pending Ġ&& Ġstate Time Ġ> Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ready To Release Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( cell Ġin Ġcells ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . update Cell ( delta , Ġview Rect World ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Layer ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cell Ġin Ġcells ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . draw Cell ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cell Ġin Ġcells ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease Pending () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Release Pending Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Ready To Release Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġstate Time Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġ} Ċ }