package Ġcom . example . app center . widgets Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Build Ċ import Ġandroid . text . Layout Ċ import Ġandroid . text . Static Layout Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . S parseInt Array Ċ import Ġandroid . util . Typed Value Ċ import Ġandroidx . appcompat . widget . AppCompat TextView ĊĊ Ċ class ĠAuto Fit TextView Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style : ĠInt Ġ= Ġ 0 ) Ġ: ĠAppCompat TextView ( context , Ġattrs , Ġdef Style ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ available Space Rect Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġval Ġ_ text Cached Sizes Ġ= ĠS parseInt Array () ĊĠĠĠ Ġprivate Ġval Ġ_ size Tester : ĠSize Tester ĊĠĠĠ Ġprivate Ġvar Ġ_ max Text Size : ĠFloat ĊĠĠĠ Ġprivate Ġvar Ġ_ spacing Mult Ġ= Ġ 1 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġ_ spacing Add Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġ_ min Text Size : ĠFloat ĊĠĠĠ Ġprivate Ġvar Ġ_ width Limit Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġ_ max Lines Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġ_ enable Size Cache Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġ_ initial li zed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġtext Paint : ĠText Paint ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Answer d Ġ= Ġfalse ĊĠĠĠ Ġfun Ġis Answer d (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Answer d ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Answer d ( answer d : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Answer d Ġ= Ġanswer d ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Type face ( tf : ĠType face ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( text Paint Ġ== Ġnull ) Ġtext Paint Ġ= ĠText Paint ( paint ) ĊĠĠĠĠĠĠĠ Ġtext Paint !!. type face Ġ= Ġtf ĊĠĠĠĠĠĠĠ Ġsuper . setType face ( tf ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Text Size ( size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ max Text Size Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġ_ text Cached Sizes . clear () ĊĠĠĠĠĠĠĠ Ġadjust Text Size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMax Lines (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ max Lines ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Max Lines ( max lines : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setMax Lines ( max lines ) ĊĠĠĠĠĠĠĠ Ġ_ max Lines Ġ= Ġmax lines ĊĠĠĠĠĠĠĠ Ġre Adjust () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Single Line () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Single Line () ĊĠĠĠĠĠĠĠ Ġ_ max Lines Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre Adjust () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Single Line ( single Line : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Single Line ( single Line ) ĊĠĠĠĠĠĠĠ Ġ_ max Lines Ġ= Ġif Ġ( single Line ) Ġ 1 Ġelse ĠNO _ LINE _ LIMIT ĊĠĠĠĠĠĠĠ Ġre Adjust () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Lines ( lines : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Lines ( lines ) ĊĠĠĠĠĠĠĠ Ġ_ max Lines Ġ= Ġlines ĊĠĠĠĠĠĠĠ Ġre Adjust () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Text Size ( unit : ĠInt , Ġsize : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġval Ġr : ĠResources ĊĠĠĠĠĠĠĠ Ġr Ġ= Ġif Ġ( c Ġ== Ġnull ) ĠResources . getSystem () Ġelse Ġc . resources ĊĠĠĠĠĠĠĠ Ġ_ max Text Size Ġ= ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunit , Ġsize , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr . display Metrics ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ_ text Cached Sizes . clear () ĊĠĠĠĠĠĠĠ Ġadjust Text Size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Line Spacing ( add : ĠFloat , Ġmult : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Line Spacing ( add , Ġmult ) ĊĠĠĠĠĠĠĠ Ġ_ spacing Mult Ġ= Ġmult ĊĠĠĠĠĠĠĠ Ġ_ spacing Add Ġ= Ġadd ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġlower Ġtext Ġsize Ġlimit Ġand Ġinvalidate Ġthe Ġview ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Min Text Size ( min Text Size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ min Text Size Ġ= Ġmin Text Size ĊĠĠĠĠĠĠĠ Ġre Adjust () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget _ min Text Size (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ min Text Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre Adjust () Ġ{ ĊĠĠĠĠĠĠĠ Ġadjust Text Size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadjust Text Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ initial li zed ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġstart Size Ġ= ĠMath . round (_ min Text Size ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Limit Ġ= Ġ( meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- Ġcompound Padding Bottom Ġ- Ġcompound Padding Top ) ĊĠĠĠĠĠĠĠ Ġ_ width Limit Ġ= Ġ( meas ured Width Ġ- Ġcompound Padding Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- Ġcompound Padding Right ) ĊĠĠĠĠĠĠĠ Ġif Ġ(_ width Limit Ġ<= Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġ_ available Space Rect . right Ġ= Ġ_ width Limit . toFloat () ĊĠĠĠĠĠĠĠ Ġ_ available Space Rect . bottom Ġ= Ġheight Limit . toFloat () ĊĠĠĠĠĠĠĠ Ġsuper . setText Size ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ PX , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġefficient Text Size Search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Size , Ġ_ max Text Size . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ size Tester , Ġ_ available Space Rect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnables Ġor Ġdisables Ġsize Ġcaching , Ġenabling Ġit Ġwill Ġimprove Ġperformance ĊĠĠĠĠ Ġ* Ġwhere Ġyou Ġare Ġanim ating Ġa Ġvalue Ġinside ĠTextView . ĠThis Ġstores Ġthe Ġfont ĊĠĠĠĠ Ġ* Ġsize Ġagainst ĠgetText (). length () ĠBe Ġcareful Ġthough Ġwhile Ġenabling Ġit Ġas Ġ 0 ĊĠĠĠĠ Ġ* Ġtakes Ġmore Ġspace Ġthan Ġ 1 Ġon Ġsome Ġfonts Ġand Ġso Ġon . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġenable Ġenable Ġfont Ġsize Ġcaching ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Enable Size Cache ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ enable Size Cache Ġ= Ġenable ĊĠĠĠĠĠĠĠ Ġ_ text Cached Sizes . clear () ĊĠĠĠĠĠĠĠ Ġadjust Text Size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġefficient Text Size Search ( ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , Ġend : ĠInt , ĊĠĠĠĠĠĠĠ Ġsize Tester : ĠSize Tester , Ġavailable Space : ĠRect F ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ enable Size Cache ) Ġreturn Ġbinary Search ( start , Ġend , Ġsize Tester , Ġavailable Space ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġtext . toString () ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġtext ?. length Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġ_ text Cached Sizes [ key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ!= Ġ 0 ) Ġreturn Ġsize ĊĠĠĠĠĠĠĠ Ġsize Ġ= Ġbinary Search ( start , Ġend , Ġsize Tester , Ġavailable Space ) ĊĠĠĠĠĠĠĠ Ġ_ text Cached Sizes . put ( key , Ġsize ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbinary Search ( ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , Ġend : ĠInt , ĊĠĠĠĠĠĠĠ Ġsize Tester : ĠSize Tester , Ġavailable Space : ĠRect F ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlast Best Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġvar Ġlo Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġvar Ġhi Ġ= Ġend Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġmid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( lo Ġ<= Ġhi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmid Ġ= Ġlo Ġ+ Ġhi Ġ ush r Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmid Val Cmp Ġ= Ġsize Tester . on Test Size ( mid , Ġavailable Space ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mid Val Cmp Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Best Ġ= Ġlo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo Ġ= Ġmid Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( mid Val Cmp Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhi Ġ= Ġmid Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Best Ġ= Ġhi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġreturn Ġmid ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġsure Ġto Ġreturn Ġlast Ġbest ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġwhat Ġshould Ġalways Ġbe Ġreturned ĊĠĠĠĠĠĠĠ Ġreturn Ġlast Best ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon TextChanged ( ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġbefore : ĠInt , Ġafter : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on TextChanged ( text , Ġstart , Ġbefore , Ġafter ) ĊĠĠĠĠĠĠĠ Ġre Adjust () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( ĊĠĠĠĠĠĠĠ Ġwidth : ĠInt , Ġheight : ĠInt , ĊĠĠĠĠĠĠĠ Ġold width : ĠInt , Ġold height : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ text Cached Sizes . clear () ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( width , Ġheight , Ġold width , Ġold height ) ĊĠĠĠĠĠĠĠ Ġif Ġ( width Ġ!= Ġold width Ġ|| Ġheight Ġ!= Ġold height ) Ġre Adjust () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Answer d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= Ġtext Colors . default Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġ 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( textColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinterface ĠSize Tester Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAuto Fit EditText ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsuggested Size Ġ ĠSize Ġof Ġtext Ġto Ġbe Ġtested ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġavailable Space Ġavailable Ġspace Ġin Ġwhich Ġtext Ġmust Ġfit ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġan Ġinteger Ġ< Ġ 0 Ġif Ġafter Ġapplying Ġ` suggest ed Size ` Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġtext , Ġit Ġtakes Ġless Ġspace Ġthan Ġ` available Space `, Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠ Ġ* Ġotherwise ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Test Size ( suggest ed Size : ĠInt , Ġavailable Space : ĠRect F ): ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNO _ LINE _ LIMIT Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġusing Ġthe Ġminimal Ġrecommended Ġfont Ġsize ĊĠĠĠĠĠĠĠ Ġ_ min Text Size Ġ= ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ SP , Ġ 1 2 f , Ġresources . display Metrics ) ĊĠĠĠĠĠĠĠ Ġ_ max Text Size Ġ= Ġtext Size ĊĠĠĠĠĠĠĠ Ġif Ġ(_ max Lines Ġ== Ġ 0 ) Ġ// Ġno Ġvalue Ġwas Ġassigned Ġduring Ġconstruction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ max Lines Ġ= ĠNO _ LINE _ LIMIT ĊĠĠĠĠĠĠĠ Ġ// Ġprepare Ġsize Ġtester : ĊĠĠĠĠĠĠĠ Ġ_ size Tester Ġ= Ġobject Ġ: ĠSize Tester Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Rect Ġ= ĠRect F () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . J EL LY _ BE AN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Test Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuggested Size : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable SP ace : ĠRect F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint !!. text Size Ġ= Ġsuggested Size . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġtext . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsingle line Ġ= Ġmax Lines Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( single line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Rect . bottom Ġ= Ġtext Paint !!. font Spacing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Rect . right Ġ= Ġtext Paint !!. measure Text ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠStatic Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext , Ġtext Paint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ width Limit , ĠLayout . Alignment . ALIGN _ NORMAL , Ġ_ spacing Mult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ spacing Add , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Lines Ġ!= ĠNO _ LINE _ LIMIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġlayout . line Count Ġ> Ġmax Lines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Rect . bottom Ġ= Ġlayout . height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠmaxWidth Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlayout . line Count ) Ġif Ġ( maxWidth Ġ< Ġlayout . get LineWidth ( i )) ĠmaxWidth Ġ= Ġlayout . get LineWidth ( i ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Rect . right Ġ= ĠmaxWidth . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Rect . offset To ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( available SP ace . contains ( text Rect )) Ġ- 1 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġelse , Ġtoo Ġbig ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ initial li zed Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ }