/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġ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 . foundation Ċ Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Intr insic Size Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Row Scope Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . size In Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . foundation . text . Basic Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Experimental Compose Ui Api Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . shadow Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . input . pointer . Pointer EventType Ċ import Ġandroidx . compose . ui . input . pointer . pointer Input Ċ import Ġandroidx . compose . ui . text . TextStyle Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . window . Popup Ċ import Ġandroidx . compose . ui . window . remember Cursor Position Provider Ċ Ċ // ĠDesign Ġof Ġbasic Ġrep res enation Ġis Ġfrom ĠMaterial Ġspecs : Ċ // Ġhttps :// material . io / design / interaction / states . html # hover Ċ // Ġhttps :// material . io / components / menus # specs Ċ Ċ val ĠLight Default ContextMenu Representation Ġ= ĠDefault ContextMenu Representation ( ĊĠĠĠ ĠbackgroundColor Ġ= ĠColor . White , ĊĠĠĠ ĠtextColor Ġ= ĠColor . Black , ĊĠĠĠ Ġitem Hover Color Ġ= ĠColor . Black . copy ( alpha Ġ= Ġ 0 . 0 4 f ) Ċ ) Ċ Ċ val ĠDark Default ContextMenu Representation Ġ= ĠDefault ContextMenu Representation ( ĊĠĠĠ ĠbackgroundColor Ġ= ĠColor ( 0 xFF 1 2 1 2 1 2 ), Ġ// Ġlike Ġsurface Ġin Ġdark Colors ĊĠĠĠ ĠtextColor Ġ= ĠColor . White , ĊĠĠĠ Ġitem Hover Color Ġ= ĠColor . White . copy ( alpha Ġ= Ġ 0 . 0 4 f ) Ċ ) Ċ Ċ @ Opt In ( Experimental Compose Ui Api :: class ) Ċ class ĠDefault ContextMenu Representation ( ĊĠĠĠ Ġprivate Ġval ĠbackgroundColor : ĠColor , ĊĠĠĠ Ġprivate Ġval ĠtextColor : ĠColor , ĊĠĠĠ Ġprivate Ġval Ġitem Hover Color : ĠColor Ċ ) Ġ: ĠContext Menu Representation Ġ{ ĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġoverride Ġfun ĠRepresentation ( state : ĠContext Menu State , Ġitems : ĠList < Context MenuItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠisOpen Ġ= Ġstate . status Ġis ĠContext Menu State . Status . Open ĊĠĠĠĠĠĠĠ Ġif Ġ( isOpen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPopup ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus able Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ Ġstate . status Ġ= ĠContext Menu State . Status . Closed Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Position Provider Ġ= Ġremember Cursor Position Provider () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shadow ( 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( backgroundColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( vertical Ġ= Ġ 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( Intr insic Size . Max ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertical Scroll ( remember Scroll State ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . distinct By Ġ{ Ġit . label Ġ}. forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMenuItem Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Hover Color Ġ= Ġitem Hover Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . status Ġ= ĠContext Menu State . Status . Closed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . onClick () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Text ( text Ġ= Ġitem . label , Ġstyle Ġ= ĠTextStyle ( color Ġ= ĠtextColor )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠMenuItem Content ( ĊĠĠĠ Ġitem Hover Color : ĠColor , ĊĠĠĠ ĠonClick : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġcontent : Ġ@ Composable ĠRow Scope . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġhover ed Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= ĠonClick , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Hover Ġ{ Ġhover ed Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( if Ġ( hover ed ) Ġitem Hover Color Ġelse ĠColor . Transparent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠP referred Ġmin Ġand Ġmax Ġwidth Ġused Ġduring Ġthe Ġintr insic Ġmeasurement . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. size In ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġ 1 1 2 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġ 2 8 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġ 3 2 . dp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPadding Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Ġ= Ġ 1 6 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Ġ= Ġ 0 . dp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠModifier . on Hover ( on Hover : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ= Ġpointer Input ( Unit ) Ġ{ ĊĠĠĠ Ġawait Pointer Event Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġawait Pointer Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer EventType . Enter Ġ-> Ġon Hover ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer EventType . Exit Ġ-> Ġon Hover ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }