/* Ċ Ġ* ĠCopyright Ġ( c ) ĠMicrosoft ĠCorporation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . microsoft . device . display . samples . dual view . ui . home Ċ Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . gest ures . detect Drag Gest ures Ċ import Ġandroidx . compose . foundation . gest ures . remember Transform able State Ċ import Ġandroidx . compose . foundation . gest ures . transform able Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . offset Ċ import Ġandroidx . compose . foundation . layout . wrap Content Size Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . IconButton Ċ import Ġandroidx . compose . material . Sca ffold Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . Top AppBar Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip To Bounds Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . graphics Layer Ċ import Ġandroidx . compose . ui . input . pointer . pointer Input Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . TextStyle Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . unit . Int Offset Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġcom . microsoft . device . display . samples . dual view . R Ċ import Ġcom . microsoft . device . display . samples . dual view . models . AppState ViewModel Ċ import Ġcom . microsoft . device . display . samples . dual view . models . rest aurants Ċ import Ġcom . microsoft . device . dual screen . tw op anel ayout . navigate To Pane 1 Ċ import Ġkotlin . math . round ToInt Ċ Ċ private Ġconst Ġval Ġnon Selection Ġ= Ġ- 1 Ċ Ċ @ Composable Ċ fun ĠMap View With Top Bar ( is Dual Screen : ĠBoolean , Ġapp State ViewModel : ĠApp State ViewModel ) Ġ{ ĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMap Top Bar ( is Dual Screen ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMap View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . wrap Content Size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp State ViewModel Ġ= Ġapp State ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ fun ĠMap Top Bar ( is Dual Screen : ĠBoolean ) Ġ{ ĊĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Dual Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( R . string . app _ name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTextStyle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 9 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Sem iB old , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġactions Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Dual Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Pane 1 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġpainter Resource ( R . drawable . ic _ list ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠColor . White ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ fun ĠMap View ( modifier : ĠModifier , Ġapp State ViewModel : ĠApp State ViewModel ) Ġ{ ĊĠĠĠ Ġval Ġselection LiveData Ġ= Ġapp State ViewModel . selection LiveData ĊĠĠĠ Ġval Ġselected Index Ġ= Ġselection LiveData . observe As State ( initial Ġ= Ġnon Selection ). value ĊĠĠĠ Ġvar Ġselected Map Id Ġ= ĠR . drawable . un selected _ map ĊĠĠĠ Ġif Ġ( selectedIndex Ġ> Ġnon Selection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Map Id Ġ= Ġrest aurants [ selectedIndex ]. map Image ResourceId ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠBox ( modifier Ġ= Ġmodifier . then ( Modifier . clip To Bounds ())) Ġ{ ĊĠĠĠĠĠĠĠ ĠScal able ImageView ( image Id Ġ= Ġselected Map Id ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠScal able ImageView ( image Id : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġmin Scale Ġ= Ġ 1 f ĊĠĠĠ Ġval Ġmax Scale Ġ= Ġ 8 f ĊĠĠĠ Ġval Ġdefault Scale Ġ= Ġ 2 f ĊĠĠĠ Ġvar Ġscale Ġby Ġremember Ġ{ Ġmutable State Of ( default Scale ) Ġ} ĊĠĠĠ Ġvar Ġoffset Ġby Ġremember Ġ{ Ġmutable State Of ( Offset . Zero ) Ġ} ĊĠĠĠ Ġval Ġstate Ġ= Ġremember Transform able State Ġ{ Ġzoom Change , Ġoffset Change , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġscale Ġ*= Ġzoom Change ĊĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġoffset Change ĊĠĠĠ Ġ} ĊĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠ Ġpainter Ġ= Ġpainter Resource ( id Ġ= Ġimage Id ), ĊĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcontent Scale Ġ= ĠContent Scale . Crop , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. graphics Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġmax Of ( min Scale , Ġmin Of ( max Scale , Ġscale )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġmax Of ( min Scale , Ġmin Of ( max Scale , Ġscale )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset Ġ{ ĠInt Offset ( offset . x . round ToInt (), Ġoffset . y . round ToInt ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. transform able ( state Ġ= Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. pointer Input ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Drag Gest ures ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Drag Ġ= Ġ{ Ġ_, Ġdrag Amount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġoffset . plus ( drag Amount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize (), ĊĠĠĠ Ġ) Ċ } Ċ