001package polaris.sdk.ui.controls; 002 003import polaris.sdk.ui.*; 004 005/** Non-modal, draggable settings window. It can remain open while interacting with other controls. */ 006public class GlassSettingsDialog extends Dialog { 007 private final ScrollPane scroller=new ScrollPane(); 008 private final GlassSettingsPanel settings=new GlassSettingsPanel(); 009 public GlassSettingsDialog(){ 010 super("LiquidGlass 设置");id("materialSettingsDialog");w=760;h=HEADER_HEIGHT+Spacing.GAP+settings.preferredHeight(w-2*Spacing.INSET)+Spacing.INSET; 011 scroller.id("materialSettingsScroll");scroller.glass(false).padding(0).layout(Panel.Layout.COLUMN); 012 settings.id("materialSettingsPanel");scroller.add(settings);add(scroller); 013 } 014 public GlassSettingsPanel settings(){return settings;} 015 @Override protected void layoutChildren(){ 016 if(ui()!=null){ 017 w=Math.min(760,Math.max(1,ui().width()-32)); 018 h=Math.min(HEADER_HEIGHT+Spacing.GAP+settings.preferredHeight(w-2*Spacing.INSET)+Spacing.INSET,Math.max(1,ui().height()-32)); 019 float nx=Math.max(16,Math.min(x,ui().width()-w-16)); 020 float ny=Math.max(16,Math.min(y,ui().height()-h-16)); 021 if(nx!=x||ny!=y){x=nx;y=ny;ax=nx;ay=ny;smoothPosition(false);} 022 } 023 scroller.bounds(Spacing.INSET,HEADER_HEIGHT+Spacing.GAP,Math.max(0,w-2*Spacing.INSET),Math.max(0,h-HEADER_HEIGHT-Spacing.GAP-Spacing.INSET)); 024 settings.bounds(0,0,scroller.contentWidth(),settings.preferredHeight(scroller.contentWidth())); 025 } 026 @Override public void open(Ui ui){settings.syncFromModel();super.open(ui);} 027}