--- title: UI Properties type: docs weight: 13 --- This page documents common properties available on UI widgets. ## Anchor (Positioning) The `Anchor` property controls widget position and size. ### Position Properties ``` Anchor: ( Left: 10, // Distance from left edge Right: 10, // Distance from right edge Top: 10, // Distance from top edge Bottom: 10 // Distance from bottom edge ); ``` ### Size Properties ``` Anchor: ( Width: 200, // Fixed width Height: 100 // Fixed height ); ``` ### Shorthand Properties ``` Anchor: (Full: 10); // All sides = 10 Anchor: (Horizontal: 20); // Left and Right = 20 Anchor: (Vertical: 15); // Top and Bottom = 15 ``` ### Combined Example ``` // Fixed size, positioned from top-left Anchor: (Left: 50, Top: 100, Width: 300, Height: 200); // Fill parent with margins Anchor: (Full: 16); // Anchored to bottom-right corner Anchor: (Right: 20, Bottom: 20, Width: 100, Height: 40); // Full width, fixed height at bottom Anchor: (Horizontal: 0, Bottom: 0, Height: 50); ``` ## Background The `Background` property sets widget background appearance. ### Solid Color ``` Background: (Color: #ff5500); Background: (Color: #000000(0.5)); // With opacity ``` ### Simple Texture ``` Background: "MyTexture.png"; Background: (TexturePath: "MyTexture.png"); ``` ### 9-Patch (Stretchable) Texture ``` // Uniform border Background: (TexturePath: "Panel.png", Border: 20); // Separate horizontal/vertical borders Background: ( TexturePath: "Button.png", HorizontalBorder: 80, VerticalBorder: 12 ); ``` ### Using PatchStyle ``` @MyBackground = PatchStyle( TexturePath: "Panel.png", Border: 16 ); Group { Background: @MyBackground; } ``` ## Padding The `Padding` property sets inner spacing. ``` Padding: (Full: 16); // All sides Padding: (Horizontal: 20); // Left and Right Padding: (Vertical: 10); // Top and Bottom Padding: (Left: 10, Right: 20); // Individual sides Padding: (Top: 5, Bottom: 15, Horizontal: 10); ``` ### Using Padding Constructor ``` @ContentPadding = Padding(Full: 16, Top: 8); Group { Padding: @ContentPadding; } ``` ## LayoutMode The `LayoutMode` property controls how children are arranged. ### Stacking Modes | Mode | Description | |------|-------------| | `Top` | Stack children from top to bottom | | `Bottom` | Stack children from bottom to top | | `Left` | Stack children from left to right | | `Right` | Stack children from right to left | ``` Group { LayoutMode: Top; // Vertical list, top-aligned Label { Text: "First"; Anchor: (Height: 30); } Label { Text: "Second"; Anchor: (Height: 30); } Label { Text: "Third"; Anchor: (Height: 30); } } ``` ### Centering Modes | Mode | Description | |------|-------------| | `Middle` | Center children vertically | | `CenterMiddle` | Center children both horizontally and vertically | ``` Group { LayoutMode: CenterMiddle; Label { Text: "Centered!"; } } ``` ### Scrolling Modes | Mode | Description | |------|-------------| | `TopScrolling` | Vertical scroll, content from top | | `BottomScrolling` | Vertical scroll, content from bottom (chat-style) | ``` Group #ChatLog { LayoutMode: BottomScrolling; ScrollbarStyle: @DefaultScrollbarStyle; AutoScrollDown: true; } ``` ### Wrapping Mode | Mode | Description | |------|-------------| | `LeftCenterWrap` | Flow left-to-right, wrap to next row | ``` Group #ItemGrid { LayoutMode: LeftCenterWrap; // Items will wrap to new rows } ``` ## FlexWeight The `FlexWeight` property controls flexible sizing in layout. ``` Group { LayoutMode: Left; Group { Anchor: (Width: 100); // Fixed width } Group { FlexWeight: 1; // Takes remaining space } Group { FlexWeight: 2; // Takes 2x the space of FlexWeight: 1 } } ``` ## Visible Controls widget visibility. ``` Group #Panel { Visible: true; // or false, or @Variable } Button #CloseButton { Visible: @CloseButton; // Controlled by template parameter } ``` ## Text Sets text content for Label and TextButton widgets. ``` Label { Text: "Static text"; } Label { Text: %server.ui.title; // Translation key } Label #DynamicText { Text: ""; // Set from Java } ``` ## ScrollbarStyle Configures scrollbar appearance for scrolling containers. ``` Group { LayoutMode: TopScrolling; ScrollbarStyle: ( Spacing: 6, Size: 6, Background: (TexturePath: "Scrollbar.png", Border: 3), Handle: (TexturePath: "ScrollbarHandle.png", Border: 3), HoveredHandle: (TexturePath: "ScrollbarHandleHovered.png", Border: 3), DraggedHandle: (TexturePath: "ScrollbarHandleDragged.png", Border: 3) ); } ``` ### ScrollbarStyle Options | Property | Description | |----------|-------------| | `Spacing` | Gap between scrollbar and content | | `Size` | Scrollbar width/height | | `Background` | Track background | | `Handle` | Normal handle appearance | | `HoveredHandle` | Handle when hovered | | `DraggedHandle` | Handle when dragging | | `OnlyVisibleWhenHovered` | Hide when not interacting | ## AutoScrollDown For BottomScrolling containers, automatically scroll to new content. ``` Group #ChatLog { LayoutMode: BottomScrolling; AutoScrollDown: true; } ``` ## Disabled Disables interaction with a widget. ``` Button #SubmitButton { Disabled: false; } ActionButton #Binding { Disabled: true; } ``` ## TooltipText Displays tooltip on hover. ``` Button #InfoButton { TooltipText: %ui.tooltip.help; } ``` ## TextTooltipStyle Configures tooltip appearance. ``` Button { TooltipText: "Help text"; TextTooltipStyle: ( Background: (TexturePath: "TooltipBg.png", Border: 24), MaxWidth: 400, LabelStyle: (Wrap: true, FontSize: 16), Padding: 24 ); } ``` ## Common Property Combinations ### Panel with Title and Content ``` Group #Panel { Anchor: (Width: 400, Height: 300); Background: (TexturePath: "Panel.png", Border: 20); LayoutMode: Top; Padding: (Full: 16); Label #Title { Anchor: (Height: 40); // ... } Group #Content { FlexWeight: 1; LayoutMode: TopScrolling; ScrollbarStyle: @DefaultScrollbarStyle; Padding: (Top: 8); } } ``` ### Horizontal Button Row ``` Group #ButtonRow { Anchor: (Height: 50); LayoutMode: Right; Padding: (Horizontal: 10); TextButton #Cancel { Anchor: (Width: 100); } Group { Anchor: (Width: 10); } // Spacer TextButton #Confirm { Anchor: (Width: 100); } } ``` ### Full-Screen Overlay ``` Group #Overlay { Anchor: (Full: 0); Background: (Color: #000000(0.7)); LayoutMode: CenterMiddle; Group #Dialog { Anchor: (Width: 500, Height: 300); Background: (TexturePath: "Dialog.png", Border: 20); } } ```