/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 2 ĠA ur ora , ĠK ir ill ĠGro uch nik ov Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . push ing pixels . aur ora . component . utils Ċ Ċ import Ġandroidx . compose . foundation . Scrollbar Adapter Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . interaction . Mutable Interaction Source Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . foundation . vertical Scroll Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Composition Local Context Ċ import Ġandroidx . compose . runtime . State Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . awt . Compose Window Ċ import Ġandroidx . compose . ui . geometry . Rect Ċ import Ġandroidx . compose . ui . geometry . Size Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . layout . Layout Ċ import Ġandroidx . compose . ui . layout . Place able Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . text . TextStyle Ċ import Ġandroidx . compose . ui . text . font . Font Family Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . unit .* Ċ import Ġorg . push ing pixels . aur ora . common . A ur ora Internal Api Ċ import Ġorg . push ing pixels . aur ora . common . A ur ora Popup Manager Ċ import Ġorg . push ing pixels . aur ora . component .* Ċ import Ġorg . push ing pixels . aur ora . component . model .* Ċ import Ġorg . push ing pixels . aur ora . component . projection . Horizontal Separator Projection Ċ import Ġorg . push ing pixels . aur ora . the ming .* Ċ import Ġorg . push ing pixels . aur ora . the ming . color scheme . A ur ora Skin Colors Ċ import Ġjava . awt .* Ċ import Ġjava . awt . geom . Rectangle 2 D Ċ import Ġjavax . swing . border . Border Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ import Ġkotlin . math . round ToInt Ċ Ċ internal Ġval ĠColor . awt Color : Ġjava . awt . Color ĊĠĠĠ Ġget () Ġ= Ġjava . awt . Color ( ĊĠĠĠĠĠĠĠ Ġthis . red , Ġthis . green , Ġthis . blue , Ġthis . alpha ĊĠĠĠ Ġ) Ċ Ċ internal Ġdata Ġclass ĠPopup Content Layout Info ( ĊĠĠĠ Ġval Ġfull Size : ĠSize , ĊĠĠĠ Ġval Ġbutton Panel Size : ĠSize , ĊĠĠĠ Ġval Ġseparator Size : ĠSize , ĊĠĠĠ Ġval Ġgeneral Content Size : ĠSize , ĊĠĠĠ Ġval Ġgeneral Content Item Height s : ĠFloat Array , ĊĠĠĠ Ġval Ġgeneral Vertical Scrollbar Size : ĠSize Ċ ) Ċ Ċ internal Ġfun Ġdisplay Popup Content ( ĊĠĠĠ Ġcurrent Window : ĠCompose Window , ĊĠĠĠ Ġlayout Direction : ĠLayout Direction , ĊĠĠĠ Ġdensity : ĠD ensity , ĊĠĠĠ Ġtext Style : ĠTextStyle , ĊĠĠĠ ĠfontFamily Resolver : ĠFont Family . Resolver , ĊĠĠĠ Ġskin Colors : ĠA ur ora Skin Colors , ĊĠĠĠ Ġskin P ain ters : ĠA ur ora P ain ters , ĊĠĠĠ Ġdecoration Area Type : ĠDecor ation Area Type , ĊĠĠĠ Ġcomposition Local Context : ĠComp osition Local Context , ĊĠĠĠ Ġanchor Bounds In Window : ĠRect , ĊĠĠĠ Ġpopup Trigger Area In Window : ĠRect , ĊĠĠĠ Ġcontent Model : ĠState < Command Menu Content Model ? >, ĊĠĠĠ Ġpresentation Model : ĠCommand PopupMenu Presentation Model , ĊĠĠĠ Ġto Dismiss Pop ups On Activation : ĠBoolean , ĊĠĠĠ Ġto Use Background Strip ing : ĠBoolean , ĊĠĠĠ Ġpopup Placement Strategy : ĠPopup Placement Strategy , ĊĠĠĠ Ġoverlay s : ĠMap < Command , ĠCommand Button Presentation Model . Overlay > Ċ ) Ġ{ ĊĠĠĠ Ġval Ġpopup Content Window Ġ= ĠCompose Window () ĊĠĠĠ Ġpopup Content Window . focus able Window State Ġ= Ġfalse ĊĠĠĠ Ġpopup Content Window . type Ġ= ĠWindow . Type . POP UP ĊĠĠĠ Ġpopup Content Window . is Always On Top Ġ= Ġtrue ĊĠĠĠ Ġpopup Content Window . is Un decor ated Ġ= Ġtrue ĊĠĠĠ Ġpopup Content Window . is Resizable Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġfill Color Ġ= Ġskin Colors . get BackgroundColor Scheme ( decoration Area Type ). background Fill Color ĊĠĠĠ Ġval Ġa wt Fill Color Ġ= Ġfill Color . awt Color ĊĠĠĠ Ġpopup Content Window . background Ġ= Ġa wt Fill Color ĊĊĠĠĠ Ġval Ġlocation On Screen Ġ= Ġcurrent Window . root Pane . location On Screen ĊĊĠĠĠ Ġval Ġhas Button Panel Ġ= Ġ( content Model . value !!. panel Content Model Ġ!= Ġnull ) ĊĠĠĠ Ġval Ġpanel Button LayoutManager Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( has Button Panel ) Ġpresentation Model . panel Presentation Model !!. command Presentation State . create LayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Direction Ġ= Ġlayout Direction , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdensity Ġ= Ġdensity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Style Ġ= Ġtext Style , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontFamily Resolver Ġ= ĠfontFamily Resolver ĊĠĠĠĠĠĠĠ Ġ) Ġelse Ġnull ĊĊĠĠĠ Ġ// ĠCompute Ġthe Ġsize Ġof Ġthe Ġpopup Ġcontent , Ġaccounting Ġfor Ġthe Ġpanel ĊĠĠĠ Ġval Ġpanel PreferredSize Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( has Button Panel ) Ġget Preferred Command PopupMenu Panel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Model Ġ= Ġcontent Model . value !!. panel Content Model !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Model Ġ= Ġpresentation Model . panel Presentation Model !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton LayoutManager Ġ= Ġpanel Button LayoutManager !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Direction Ġ= Ġlayout Direction , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdensity Ġ= Ġdensity ĊĠĠĠĠĠĠĠ Ġ) Ġelse ĠSize ( 0 . 0 f , Ġ 0 . 0 f ) ĊĊĠĠĠ Ġ// ĠCommand Ġpresentation Ġfor Ġmenu Ġcontent , Ġtaking Ġsome Ġvalues Ġfrom ĊĠĠĠ Ġ// Ġthe Ġpopup Ġmenu Ġpresentation Ġmodel Ġconfigured Ġon Ġthe Ġtop - level Ġpresentation Ġmodel ĊĠĠĠ Ġval Ġregular Button Presentation Model Ġ= ĠCommand Button Presentation Model ( ĊĠĠĠĠĠĠĠ Ġpresentation State Ġ= Ġpresentation Model . menu Presentation State , ĊĠĠĠĠĠĠĠ Ġicon Active Filter Strategy Ġ= Ġpresentation Model . menu Icon Active Filter Strategy , ĊĠĠĠĠĠĠĠ Ġicon Enabled Filter Strategy Ġ= Ġpresentation Model . menu Icon Enabled Filter Strategy , ĊĠĠĠĠĠĠĠ Ġicon Disabled Filter Strategy Ġ= Ġpresentation Model . menu Icon Disabled Filter Strategy , ĊĠĠĠĠĠĠĠ Ġpopup Placement Strategy Ġ= Ġpresentation Model . popup Placement Strategy , ĊĠĠĠĠĠĠĠ Ġbackground Appearance Strategy Ġ= ĠBackground Appearance Strategy . Flat , ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠHorizontal Alignment . Leading , ĊĠĠĠĠĠĠĠ Ġcontent Padding Ġ= Ġpresentation Model . menu Content Padding , ĊĠĠĠĠĠĠĠ Ġis Menu Ġ= Ġtrue ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġregular Button LayoutManager Ġ= ĊĠĠĠĠĠĠĠ Ġpresentation Model . menu Presentation State . create LayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Direction Ġ= Ġlayout Direction , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdensity Ġ= Ġdensity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Style Ġ= Ġtext Style , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontFamily Resolver Ġ= ĠfontFamily Resolver ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġvar Ġat Least One Regular Button Has Icon Ġ= Ġfalse ĊĠĠĠ Ġfor Ġ( command Group Ġin Ġcontent Model . value !!. groups ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( secondary Command Ġin Ġcommand Group . commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( secondary Command . icon Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat Least One Regular Button Has Icon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( secondary Command . is Action Toggle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat Least One Regular Button Has Icon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġregular Button Presentation Model Overlay Ġ= ĊĠĠĠĠĠĠĠ ĠCommand Button Presentation Model . Overlay ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforce Allocate Space For Icon Ġ= Ġat Least One Regular Button Has Icon , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Style Ġ= ĠTextStyle ( font Weight Ġ= ĠFontWeight . Bold ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġval Ġregular Button Presentation Model With Overlay Ġ= ĊĠĠĠĠĠĠĠ Ġregular Button Presentation Model . overlay With ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregular Button Presentation Model Overlay ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠAccount Ġfor Ġpossible Ġpresence Ġof Ġvertical Ġscroll Ġbar ĊĠĠĠ Ġvar Ġshowing Vertical Regular Content ScrollBar Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġregular Button Column Width Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġvar Ġregular Button Count Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġregular Button Height Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġfor Ġ( command Group Ġin Ġcontent Model . value !!. groups ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( secondary Command Ġin Ġcommand Group . commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferred Size Ġ= Ġregular Button LayoutManager . get PreferredSize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= Ġsecondary Command , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Model Ġ= Ġregular Button Presentation Model With Overlay , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Layout Info Ġ= Ġregular Button LayoutManager . get Pre Layout Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= Ġsecondary Command , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Model Ġ= Ġregular Button Presentation Model With Overlay ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregular Button Column Width Ġ= Ġmax ( regular Button Column Width , Ġpreferred Size . width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregular Button Height Ġ= Ġmax ( regular Button Height , Ġpreferred Size . height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġregular Button Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( presentation Model . max Visible Menu Commands Ġ== Ġregular Button Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġthe Ġmaximum Ġnumber Ġof Ġmenu Ġcommands Ġthat Ġwe Ġshould Ġshow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshowing Vertical Regular Content ScrollBar Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġseparator Height Ġ= ĠSe parator S izing Constants . Thickness . value Ġ* Ġdensity . density ĊĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠ Ġval Ġitem Height s Ġ= ĠFloat Array ( regular Button Count Ġ+ Ġcontent Model . value !!. groups . size Ġ- Ġ 1 ) ĊĠĠĠ Ġfor Ġ(( group Index , Ġcommand Group ) Ġin Ġcontent Model . value !!. groups . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( secondary Command Ġin Ġcommand Group . commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Height s [ index ++] Ġ= Ġregular Button Height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( group Index Ġ< Ġ( content Model . value !!. groups . size Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Height s [ index ++] Ġ= Ġseparator Height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġvisible Commands Ġ= Ġif Ġ( presentation Model . max Visible Menu Commands Ġ== Ġ 0 ) Ġregular Button Count ĊĠĠĠ Ġelse Ġmin ( presentation Model . max Visible Menu Commands , Ġregular Button Count ) ĊĠĠĠ Ġval Ġregular Button Column Height Ġ= Ġvisible Commands Ġ* Ġregular Button Height Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( content Model . value !!. groups . size Ġ- Ġ 1 ) Ġ* Ġseparator Height ĊĊĠĠĠ Ġval Ġgeneral Vertical Scrollbar Width Ġ= Ġif Ġ( show ing Vertical Regular Content ScrollBar ) Ġ{ ĊĠĠĠĠĠĠĠ ĠScroll Bar S izing Constants . Default ScrollBar Thickness . value Ġ* Ġdensity . density Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ* ĠScroll Bar S izing Constants . Default ScrollBar Margin . value Ġ* Ġdensity . density ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠ 0 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIf Ġwe 're Ġdisplaying Ġthe Ġbutton Ġpanel , Ġwe Ġneed Ġto Ġtweak Ġeither Ġthe Ġbutton Ġpanel Ġwidth ĊĠĠĠ Ġ// Ġor Ġthe Ġgeneral Ġcontent Ġwidth Ġso Ġthat Ġthey Ġmatch ĊĠĠĠ Ġval Ġfull Content Width Ġ= Ġmax ( ĊĠĠĠĠĠĠĠ Ġpanel PreferredSize . width , ĊĠĠĠĠĠĠĠ Ġregular Button Column Width Ġ+ Ġgeneral Vertical Scrollbar Width ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġfull Content Height Ġ= Ġpanel PreferredSize . height Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( has Button Panel ) ĠSe parator S izing Constants . Thickness . value Ġ* Ġdensity . density Ġelse Ġ 0 . 0 f ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregular Button Column Height ĊĠĠĠ Ġval Ġfinal General Content Width Ġ= Ġfull Content Width Ġ- Ġgeneral Vertical Scrollbar Width ĊĊĠĠĠ Ġval Ġoffset Ġ= Ġceil ( density . density ). toInt () ĊĊĠĠĠ Ġval Ġcontent Layout Info Ġ= ĠPopup Content Layout Info ( ĊĠĠĠĠĠĠĠ Ġfull Size Ġ= ĠSize ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġfull Content Width Ġ+ Ġ 2 Ġ* Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġfull Content Height Ġ+ Ġ 2 Ġ* Ġoffset ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġbutton Panel Size Ġ= ĠSize ( width Ġ= Ġfull Content Width , Ġheight Ġ= Ġpanel PreferredSize . height ), ĊĠĠĠĠĠĠĠ Ġseparator Size Ġ= ĠSize ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġfull Content Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġif Ġ( has Button Panel ) ĠSe parator S izing Constants . Thickness . value Ġ* Ġdensity . density Ġelse Ġ 0 . 0 f ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġgeneral Content Size Ġ= ĠSize ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġfinal General Content Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġregular Button Column Height ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġgeneral Content Item Height s Ġ= Ġitem Height s , ĊĠĠĠĠĠĠĠ Ġgeneral Vertical Scrollbar Size Ġ= ĠSize ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġgeneral Vertical Scrollbar Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġregular Button Column Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠFull Ġsize Ġof Ġthe Ġpopup Ġaccounts Ġfor Ġextra Ġtwo Ġpixels Ġon Ġeach Ġside Ġfor Ġthe Ġpopup Ġborder ĊĠĠĠ Ġval Ġfull Popup Width Ġ= Ġceil ( full Content Width Ġ/ Ġdensity . density ). toInt () Ġ+ Ġ 4 ĊĠĠĠ Ġval Ġfull Popup Height Ġ= Ġceil ( full Content Height Ġ/ Ġdensity . density ). toInt () Ġ+ Ġ 4 ĊĊĠĠĠ Ġ// ĠFrom Ġthis Ġpoint , Ġall Ġcoordinates Ġare Ġin ĠSw ing Ġdisplay Ġunits Ġ- Ġwhich Ġare Ġdensity Ġindependent . ĊĠĠĠ Ġ// ĠThis Ġis Ġwhy Ġthe Ġpopup Ġwidth Ġand Ġheight Ġwas Ġconverted Ġfrom Ġpixels . ĊĠĠĠ Ġval Ġinitial Anchor X Ġ= Ġif Ġ( layout Direction Ġ== ĠLayout Direction . L tr ) ĊĠĠĠĠĠĠĠ Ġ( location On Screen . x Ġ+ Ġanchor Bounds In Window . left ). toInt () Ġelse ĊĠĠĠĠĠĠĠ Ġ( location On Screen . x Ġ+ Ġanchor Bounds In Window . left Ġ+ Ġanchor Bounds In Window . width ). toInt () Ġ- Ġfull Popup Width ĊĠĠĠ Ġval Ġinitial Anchor Ġ= ĠInt Offset ( ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġinitial Anchor X , ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġ( location On Screen . y Ġ+ Ġanchor Bounds In Window . top ). toInt () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġpopup Rect Ġ= Ġwhen Ġ( popup Placement Strategy ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPopup Placement Strategy . Down ward Ġ-> ĠRectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . x , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . y Ġ+ Ġanchor Bounds In Window . height . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠPopup Placement Strategy . Up ward Ġ-> ĠRectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . x , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . y Ġ- Ġfull Popup Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠPopup Placement Strategy . Start ward Ġ-> Ġif Ġ( layout Direction Ġ== ĠLayout Direction . L tr ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . x Ġ- Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . x Ġ+ Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠPopup Placement Strategy . End ward Ġ-> Ġif Ġ( layout Direction Ġ== ĠLayout Direction . L tr ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . x Ġ+ Ġanchor Bounds In Window . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . x Ġ- Ġanchor Bounds In Window . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠPopup Placement Strategy . Center ed Vert ically Ġ-> ĠRectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . x , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Anchor . y Ġ+ Ġanchor Bounds In Window . height . toInt () Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- Ġfull Popup Height Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Popup Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġpopup Ġstays Ġin Ġscreen Ġbounds ĊĠĠĠ Ġval Ġscreen Bounds Ġ= Ġpopup Content Window . graphics Configuration . bounds ĊĠĠĠ Ġif Ġ( popup Rect . x Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpopup Rect . translate (- popup Rect . x , Ġ 0 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(( popup Rect . x Ġ+ Ġpopup Rect . width ) Ġ> Ġscreen Bounds . width ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpopup Rect . translate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreen Bounds . width Ġ- Ġpopup Rect . x Ġ- Ġpopup Rect . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( popup Rect . y Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpopup Rect . translate ( 0 , Ġ- popup Rect . y ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(( popup Rect . y Ġ+ Ġpopup Rect . height ) Ġ> Ġscreen Bounds . height ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpopup Rect . translate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreen Bounds . height Ġ- Ġpopup Rect . y Ġ- Ġpopup Rect . height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpopup Content Window . bounds Ġ= Ġpopup Rect ĊĊĠĠĠ Ġval Ġborder Scheme Ġ= Ġskin Colors . getColor Scheme ( ĊĠĠĠĠĠĠĠ Ġdecoration Area Type Ġ= ĠDecor ation Area Type . None , ĊĠĠĠĠĠĠĠ Ġassociation Kind Ġ= ĠColor Scheme Association Kind . Border , ĊĠĠĠĠĠĠĠ Ġcomponent State Ġ= ĠComponent State . Enabled ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġpopup BorderColor Ġ= Ġskin P ain ters . border Painter . get Represent ative Color ( border Scheme ) ĊĠĠĠ Ġval Ġa wt BorderColor Ġ= Ġpopup BorderColor . awt Color ĊĠĠĠ Ġval Ġborder Thickness Ġ= Ġ 1 . 0 f Ġ/ Ġdensity . density ĊĊĠĠĠ Ġpopup Content Window . root Pane . border Ġ= Ġobject Ġ: ĠBorder Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpaint Border ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc : ĠComponent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg : ĠGraphics , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg 2 d Ġ= Ġg . create () Ġas ĠGraphics 2 D ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . set Rendering Hint ( Rendering Hints . KEY _ ANTI ALIAS ING , ĠRendering Hints . VALUE _ ANTI ALIAS _ ON ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . set Rendering Hint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRendering Hints . KEY _ ST RO KE _ CONTROL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRendering Hints . VALUE _ ST RO KE _ PURE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . color Ġ= Ġa wt Fill Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . fill ( Rectangle ( 0 , Ġ 0 , Ġwidth , Ġheight )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthickness Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . stroke Ġ= ĠBasic Stroke ( thickness , ĠBasic Stroke . CAP _ B UT T , ĠBasic Stroke . JOIN _ ROUND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . color Ġ= Ġa wt BorderColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . draw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRectangle 2 D . Float ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder Thickness Ġ/ Ġ 2 . 0 f , Ġborder Thickness Ġ/ Ġ 2 . 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġborder Thickness , Ġheight Ġ- Ġborder Thickness ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 d . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Border Insets ( c : ĠComponent ?): ĠIn sets Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIn sets ( 1 , Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Border Opaque (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpopup Content Window . composition Local Context Ġ= Ġcomposition Local Context ĊĠĠĠ Ġpopup Content Window . setContent Ġ{ ĊĠĠĠĠĠĠĠ ĠTop Level Popup Content ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Content Window Ġ= Ġpopup Content Window , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Content Model Ġ= Ġcontent Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Presentation Model Ġ= Ġpresentation Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Dismiss Pop ups On Activation Ġ= Ġto Dismiss Pop ups On Activation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Use Background Strip ing Ġ= Ġto Use Background Strip ing , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay s Ġ= Ġoverlay s , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout Info Ġ= Ġcontent Layout Info ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpopup Content Window . invalidate () ĊĠĠĠ Ġpopup Content Window . validate () ĊĠĠĠ Ġpopup Content Window . isVisible Ġ= Ġtrue ĊĊĠĠĠ Ġ// ĠHide Ġthe Ġpop ups Ġthat Ġ" start " Ġfrom Ġthe Ġcurrent Ġwindow ĊĠĠĠ ĠA ur ora Popup Manager . hide Pop ups ( origin ator Ġ= Ġcurrent Window ) ĊĠĠĠ Ġ// ĠAnd Ġdisplay Ġour Ġnew Ġpopup Ġcontent ĊĠĠĠ ĠA ur ora Popup Manager . add Popup ( ĊĠĠĠĠĠĠĠ Ġorigin ator Ġ= Ġcurrent Window , ĊĠĠĠĠĠĠĠ Ġpopup Trigger Area In Origin ator Window Ġ= Ġpopup Trigger Area In Window , ĊĠĠĠĠĠĠĠ Ġpopup Window Ġ= Ġpopup Content Window , ĊĠĠĠĠĠĠĠ Ġpopup Kind Ġ= ĠA ur ora Popup Manager . Popup Kind . POP UP ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTop Level Popup Content ( ĊĠĠĠ Ġpopup Content Window : ĠCompose Window , ĊĠĠĠ Ġmenu Content Model : ĠState < Command Menu Content Model ? >, ĊĠĠĠ Ġmenu Presentation Model : ĠCommand PopupMenu Presentation Model , ĊĠĠĠ Ġto Dismiss Pop ups On Activation : ĠBoolean , ĊĠĠĠ Ġto Use Background Strip ing : ĠBoolean , ĊĠĠĠ Ġoverlay s : ĠMap < Command , ĠCommand Button Presentation Model . Overlay >, ĊĠĠĠ Ġcontent Layout Info : ĠPopup Content Layout Info Ċ ) Ġ{ ĊĠĠĠ Ġval Ġstate Vertical Ġ= Ġremember Scroll State ( 0 ) ĊĊĠĠĠ Ġval Ġhas Panel Ġ= Ġ( menu Content Model . value !!. panel Content Model Ġ!= Ġnull ) ĊĠĠĠ ĠPopup Content Layout ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . aur ora Background (), ĊĠĠĠĠĠĠĠ Ġhas Panel Ġ= Ġhas Panel , ĊĠĠĠĠĠĠĠ Ġcontent Layout Info Ġ= Ġcontent Layout Info ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Panel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Command Button Panel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Model Ġ= Ġmenu Content Model . value !!. panel Content Model !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Model Ġ= Ġmenu Presentation Model . panel Presentation Model !!. to Command Panel Presentation Model (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Action Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Dismiss Pop ups On Activation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Popup Manager . hide Pop ups ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHorizontal Separator Projection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Model Ġ= ĠSe parator Presentation Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Gradient Amount Ġ= Ġ 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Gradient Amount Ġ= Ġ 0 . dp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). project () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLayout ( modifier Ġ= ĠModifier . vertical Scroll ( state Vertical ), Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPopup General Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Content Window Ġ= Ġpopup Content Window , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Content Model Ġ= Ġmenu Content Model , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Presentation Model Ġ= Ġmenu Presentation Model , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Dismiss Pop ups On Activation Ġ= Ġto Dismiss Pop ups On Activation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Use Background Strip ing Ġ= Ġto Use Background Strip ing , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay s Ġ= Ġoverlay s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) Ġ{ Ġmeas ur ables , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace ables Ġ= Ġmeas ur ables . map Indexed Ġ{ Ġindex , Ġmeas ur able Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMeasure Ġeach Ġchild Ġwith Ġfixed Ġ( wide st ) Ġwidth Ġand Ġmatching Ġheight Ġ( button ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġheight Ġor Ġseparator Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraints . fixed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġcontent Layout Info . general Content Size . width . round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġcontent Layout Info . general Content Item Height s [ index ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġchildren Ġare Ġla id Ġout Ġin Ġa Ġcolumn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Max Height Ġ= Ġplace ables . sum Of Ġ{ Ġit . height Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġcontent Layout Info . general Content Size . width . round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġcontent Max Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Position Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace ables . forEach Ġ{ Ġplace able Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place Relative ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġy Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Position Ġ+= Ġplace able . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( content Layout Info . general Vertical Scrollbar Size . width Ġ> Ġ 0 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Vertical Scrollbar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġremember ( state Vertical ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll bar Adapter ( state Vertical ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( A ur ora Internal Api :: class ) Ċ @ Composable Ċ private Ġfun ĠPopup General Content ( ĊĠĠĠ Ġpopup Content Window : ĠCompose Window , ĊĠĠĠ Ġmenu Content Model : ĠState < Command Menu Content Model ? >, ĊĠĠĠ Ġmenu Presentation Model : ĠCommand PopupMenu Presentation Model , ĊĠĠĠ Ġto Dismiss Pop ups On Activation : ĠBoolean , ĊĠĠĠ Ġto Use Background Strip ing : ĠBoolean , ĊĠĠĠ Ġoverlay s : ĠMap < Command , ĠCommand Button Presentation Model . Overlay > Ċ ) Ġ{ ĊĠĠĠ Ġ// ĠIf Ġat Ġleast Ġone Ġsecondary Ġcommand Ġin Ġthis Ġpopup Ġmenu Ġhas Ġicon Ġfactory ĊĠĠĠ Ġ// Ġwe Ġforce Ġall Ġcommand Ġbuttons Ġto Ġallocate Ġspace Ġfor Ġthe Ġicon Ġ( for Ġoverall ĊĠĠĠ Ġ// Ġalignment Ġof Ġcontent Ġacross Ġthe Ġentire Ġpopup Ġmenu ) ĊĠĠĠ Ġvar Ġat Least One Button Has Icon Ġ= Ġfalse ĊĠĠĠ Ġfor Ġ( command Group Ġin Ġmenu Content Model . value !!. groups ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( secondary Command Ġin Ġcommand Group . commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( secondary Command . icon Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat Least One Button Has Icon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( secondary Command . is Action Toggle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat Least One Button Has Icon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCommand Ġpresentation Ġfor Ġmenu Ġcontent , Ġtaking Ġsome Ġvalues Ġfrom ĊĠĠĠ Ġ// Ġthe Ġpopup Ġmenu Ġpresentation Ġmodel Ġconfigured Ġon Ġthe Ġtop - level Ġpresentation Ġmodel ĊĠĠĠ Ġval Ġmenu Button Presentation Model Ġ= ĠCommand Button Presentation Model ( ĊĠĠĠĠĠĠĠ Ġpresentation State Ġ= Ġmenu Presentation Model . menu Presentation State , ĊĠĠĠĠĠĠĠ Ġicon Active Filter Strategy Ġ= Ġmenu Presentation Model . menu Icon Active Filter Strategy , ĊĠĠĠĠĠĠĠ Ġicon Enabled Filter Strategy Ġ= Ġmenu Presentation Model . menu Icon Enabled Filter Strategy , ĊĠĠĠĠĠĠĠ Ġicon Disabled Filter Strategy Ġ= Ġmenu Presentation Model . menu Icon Disabled Filter Strategy , ĊĠĠĠĠĠĠĠ Ġforce Allocate Space For Icon Ġ= Ġat Least One Button Has Icon , ĊĠĠĠĠĠĠĠ Ġpopup Placement Strategy Ġ= Ġmenu Presentation Model . popup Placement Strategy , ĊĠĠĠĠĠĠĠ Ġbackground Appearance Strategy Ġ= ĠBackground Appearance Strategy . Flat , ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠHorizontal Alignment . Leading , ĊĠĠĠĠĠĠĠ Ġcontent Padding Ġ= Ġmenu Presentation Model . menu Content Padding , ĊĠĠĠĠĠĠĠ Ġis Menu Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġsides Ġ= ĠS ides ( stra ight Side s Ġ= ĠSide . values (). toSet ()) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġvar Ġrunning Command Index Ġ= Ġ 0 ĊĠĠĠ Ġval ĠbackgroundColor Scheme Ġ= ĠA ur ora Skin . colors . get BackgroundColor Scheme ( ĊĠĠĠĠĠĠĠ Ġdecoration Area Type Ġ= ĠA ur ora Skin . decoration Area Type ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġbackground Even Rows Ġ= ĠbackgroundColor Scheme . background Fill Color ĊĠĠĠ Ġval Ġbackground Odd Rows Ġ= ĠbackgroundColor Scheme . accent ed Background Fill Color ĊĠĠĠ Ġfor Ġ(( command Group Index , Ġcommand Group ) Ġin Ġmenu Content Model . value !!. groups . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( secondary Command Ġin Ġcommand Group . commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġwe Ġhave Ġa Ġpresentation Ġoverlay Ġfor Ġthis Ġsecondary Ġcommand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Overlay Ġ= Ġoverlay s . containsKey ( secondary Command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurr Secondary Presentation Model Ġ= Ġif Ġ( has Overlay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Button Presentation Model . overlay With ( overlay s [ secondary Command ] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġmenu Button Presentation Model ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( secondary Command Ġ== Ġmenu Content Model . value !!. highlighted Command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġour Ġsecondary Ġcontent Ġmodel Ġhas Ġa Ġhighlighted Ġcommand , Ġpass Ġbold ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfont Ġweight Ġto Ġthe Ġtext Ġstyle Ġof Ġthe Ġmatching Ġcommand Ġbutton . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Secondary Presentation Model Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Secondary Presentation Model . overlay With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Button Presentation Model . Overlay ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Style Ġ= ĠTextStyle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġcommand Ġbutton Ġfor Ġeach Ġsecondary Ġcommand , Ġpassing Ġthe Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoverlay s Ġinto Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Command Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġif Ġ( to Use Background Strip ing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġif Ġ(( running Command Index Ġ% Ġ 2 ) Ġ== Ġ 0 ) Ġbackground Even Rows Ġelse Ġbackground Odd Rows ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse ĠModifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Interaction Source Ġ= Ġremember Ġ{ ĠMutable Interaction Source () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Interaction Source Ġ= Ġremember Ġ{ ĠMutable Interaction Source () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= Ġsecondary Command , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Window Ġ= Ġpopup Content Window , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Action Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Dismiss Pop ups On Activation Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Secondary Presentation Model . to Dismiss Pop ups On Activation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Popup Manager . hide Pop ups ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Placement Strategy Provider Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Model Ġ= Ġcurr Secondary Presentation Model , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay s Ġ= Ġoverlay s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Command Index ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( command Group Index Ġ< Ġ( menu Content Model . value !!. groups . size Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHorizontal Separator Projection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Model Ġ= ĠSe parator Presentation Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Gradient Amount Ġ= Ġ 0 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Gradient Amount Ġ= Ġ 0 . dp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). project () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠPopup Content Layout ( ĊĠĠĠ Ġhas Panel : ĠBoolean , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġcontent Layout Info : ĠPopup Content Layout Info , ĊĠĠĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġoffset Ġ= Ġceil ( Local Density . current . density ). toInt () ĊĠĠĠ ĠLayout ( modifier Ġ= Ġmodifier , Ġcontent Ġ= Ġcontent ) Ġ{ Ġmeas ur ables , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġpanel Place able : ĠPlace able ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġpanel Separator Place able : ĠPlace able ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( has Panel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġcolumn Ġwidth Ġis Ġdetermined Ġby Ġthe Ġpanel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpanel Place able Ġ= Ġmeas ur ables [ 0 ]. measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraints . fixed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġcontent Layout Info . button Panel Size . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġcontent Layout Info . button Panel Size . height . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpanel Separator Place able Ġ= Ġmeas ur ables [ 1 ]. measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraints . fixed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġcontent Layout Info . separator Size . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġcontent Layout Info . separator Size . height . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgeneral Content Place able Ġ= Ġmeas ur ables [ if Ġ( has Panel ) Ġ 2 Ġelse Ġ 0 ]. measure ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstraints . fixed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġcontent Layout Info . general Content Size . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġcontent Layout Info . general Content Size . height . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvar Ġvertical ScrollBar Place able : ĠPlace able ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġscroll Bar Margin Px Ġ= ĠScroll Bar S izing Constants . Default ScrollBar Margin . round To Px () ĊĠĠĠĠĠĠĠ Ġval Ġscroll Bar Thickness Px Ġ= ĠScroll Bar S izing Constants . Default ScrollBar Thickness . round To Px () ĊĠĠĠĠĠĠĠ Ġif Ġ( content Layout Info . general Vertical Scrollbar Size . width Ġ> Ġ 0 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical ScrollBar Place able Ġ= Ġmeas ur ables [ if Ġ( has Panel ) Ġ 3 Ġelse Ġ 1 ]. measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraints . fixed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġscroll Bar Thickness Px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġcontent Layout Info . general Vertical Scrollbar Size . height . toInt () Ġ- Ġ 2 Ġ* Ġscroll Bar Margin Px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlayout ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġcontent Layout Info . full Size . width . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġcontent Layout Info . full Size . height . toInt () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOffset Ġeverything Ġby Ġ[ offset , offset ] Ġfor Ġborder Ġin sets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Position Ġ= Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( panel Place able Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpanel Place able . place Relative ( offset , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Position Ġ+= Ġpanel Place able . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpanel Separator Place able !!. place Relative ( offset , Ġy Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Position Ġ+= Ġpanel Separator Place able . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeneral Content Place able . place Relative ( x Ġ= Ġoffset , Ġy Ġ= Ġy Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical ScrollBar Place able ?. place Relative ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġoffset Ġ+ Ġgeneral Content Place able . width Ġ+ Ġscroll Bar Margin Px Ġ+ Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġy Position Ġ+ Ġscroll Bar Margin Px ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ