/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 Ġ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 Ġandroidx . compose . ui . text . input Ċ Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . view . input method . Cursor Anchor Info Ċ import Ġandroidx . compose . ui . text . Text Layout Result Ċ import Ġandroidx . compose . ui . text . style . Resolved Text Direction Ċ Ċ /** Ċ Ġ* ĠHelper Ġfunction Ġto Ġbuild Ġ[ Cursor Anchor Info ]( https :// developer . android . com / reference / android / view / input method / Cursor Anchor Info ). Ċ Ġ* Ċ Ġ* Ġ@ param Ġtext FieldValue Ġrequired Ġto Ġset Ġtext , Ġcomposition Ġand Ġselection Ġinformation Ġinto Ġthe Ċ Ġ* ĠCursor Anchor Info . Ċ Ġ* Ġ@ param Ġtext Layout Result ĠText Layout Result Ġfor Ġthe Ġ[ text FieldValue ] Ġused Ġto Ġenter Ġcursor Ġand Ċ Ġ* Ġcharacter Ġinformation Ċ Ġ* Ġ@ param Ġmatrix ĠMatrix Ġused Ġto Ġconvert Ġlocal Ġcoordinates Ġto Ġglobal Ġcoordinates . Ċ Ġ*/ Ċ internal Ġfun ĠCursor Anchor Info . Builder . build ( ĊĠĠĠ Ġtext FieldValue : ĠText FieldValue , ĊĠĠĠ Ġtext Layout Result : ĠText Layout Result , ĊĠĠĠ Ġmatrix : ĠMatrix Ċ ): ĠCursor Anchor Info Ġ{ ĊĠĠĠ Ġreset () ĊĊĠĠĠ Ġset Matrix ( matrix ) ĊĊĠĠĠ Ġval Ġselection Start Ġ= Ġtext FieldValue . selection . min ĊĠĠĠ Ġval Ġselection End Ġ= Ġtext FieldValue . selection . max ĊĠĠĠ Ġset Selection Range ( selection Start , Ġselection End ) ĊĊĠĠĠ Ġset Insertion Marker ( selection Start , Ġtext Layout Result ) ĊĊĠĠĠ Ġ// Ġset Ġcomposition ĊĠĠĠ Ġval Ġcomposition Start Ġ= Ġtext FieldValue . composition ?. min Ġ?: Ġ- 1 ĊĠĠĠ Ġval Ġcomposition End Ġ= Ġtext FieldValue . composition ?. max Ġ?: Ġ- 1 ĊĊĠĠĠ Ġif Ġ( composition Start Ġin Ġ 0 Ġuntil Ġcomposition End ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Comp osing Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposition Start , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext FieldValue . text . sub Sequence ( composition Start , Ġcomposition End ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġbuild () Ċ } Ċ Ċ private Ġfun ĠCursor Anchor Info . Builder . set Insertion Marker ( ĊĠĠĠ Ġselection Start : ĠInt , ĊĠĠĠ Ġtext Layout Result : ĠText Layout Result Ċ ): ĠCursor Anchor Info . Builder Ġ{ ĊĠĠĠ Ġif Ġ( selection Start Ġ< Ġ 0 ) Ġreturn Ġthis ĊĊĠĠĠ Ġval Ġcursor Rect Ġ= Ġtext Layout Result . get Cursor Rect ( selection Start ) ĊĠĠĠ Ġval Ġis R tl Ġ= Ġtext Layout Result . getB idi Run Direction ( selection Start ) Ġ== ĠResolved Text Direction . R tl ĊĊĠĠĠ Ġvar Ġflags Ġ= Ġ 0 ĊĠĠĠ Ġif Ġ( is R tl ) Ġflags Ġ= Ġflags Ġor ĠCursor Anchor Info . FLAG _ IS _ RTL ĊĊĠĠĠ Ġ// ĠSets Ġthe Ġlocation Ġof Ġthe Ġtext Ġinsertion Ġpoint Ġ( zero Ġwidth Ġcursor ) Ġas Ġa Ġrectangle Ġin Ġlocal ĊĠĠĠ Ġ// Ġcoordinates . ĊĠĠĠ Ġset Insertion Marker Location ( ĊĠĠĠĠĠĠĠ Ġcursor Rect . left , ĊĠĠĠĠĠĠĠ Ġcursor Rect . top , ĊĠĠĠĠĠĠĠ Ġcursor Rect . bottom , ĊĠĠĠĠĠĠĠ Ġcursor Rect . bottom , ĊĠĠĠĠĠĠĠ Ġflags ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn Ġthis Ċ }