Documentation
¶
Overview ¶
Package ui defines bounded author-owned presentation assets shared by the build pipeline and host. It has no dependency on a rendering library.
Index ¶
Constants ¶
const ( MaxAssetBytes = 64 * 1024 MaxElements = 64 MaxTextBytes = 4096 MaxNameBytes = 128 MaxRows = 256 MaxTransitionMilliseconds = 2000 BackElementID uint32 = MaxElements + 1 AssetPrefix = "karty.ui/" FontAssetPrefix = "karty.font/" SectionName = "karty.ui.v1" SchemaComposition uint32 = 2 SchemaStyle uint32 = 3 SchemaImageStyle uint32 = 4 SchemaLayout uint32 = 5 SchemaResponsive uint32 = 6 SchemaControlTransition uint32 = 7 SchemaVisualHierarchy uint32 = 8 SchemaInteractionPolish uint32 = 9 MinResponsiveWidth = 240 MaxResponsiveWidth = 1024 )
const ( StyleBackground uint32 = 1 << iota StyleBackgroundHover StyleBackgroundPressed StyleColor StylePadding StyleGap StyleFontSize StyleMinHeight StyleBackgroundImage StyleBackgroundImageHover StyleBackgroundImagePressed StyleBackgroundDisabled StyleBackgroundImageDisabled StyleColorHover StyleColorPressed StyleColorDisabled StyleFlexDirection StyleAlignItems StyleMinWidth StyleMaxWidth StyleMaxHeight StyleJustifyContent StyleFlexGrow StyleMargin StyleOverflow StyleTransitionDuration StyleTransitionEnter StyleTransitionExit StyleTextAlign StyleFontFamily StyleContentImage )
const ( Style2BackgroundFocus uint32 = 1 << iota Style2BackgroundImageFocus Style2ColorFocus Style2TransitionDelay Style2TransitionEasing Style2Position Style2Left Style2Right Style2Top Style2Bottom Style2ImageFit Style2Tint Style2Icon Style2IconSize Style2IconPosition Style2IconGap )
const ( FlexDirectionColumn uint8 = iota + 1 FlexDirectionRow )
const ( AlignItemsStart uint8 = iota + 1 AlignItemsCenter AlignItemsEnd AlignItemsStretch )
const ( JustifyContentStart uint8 = iota + 1 JustifyContentCenter JustifyContentEnd JustifyContentSpaceBetween )
const ( OverflowVisible uint8 = iota + 1 OverflowScroll )
const ( TransitionNone uint8 = iota TransitionLeft TransitionRight TransitionTop TransitionBottom )
const ( TransitionEasingLinear uint8 = iota + 1 TransitionEasingOut TransitionEasingInOut )
const ( ImageFitStretch uint8 = iota + 1 ImageFitContain ImageFitCover )
const ( IconPositionStart uint8 = iota + 1 IconPositionEnd )
const ( TextAlignStart uint8 = iota + 1 TextAlignCenter TextAlignEnd )
const ( FontFamilyBody uint8 = iota + 1 FontFamilyDisplay FontFamilyMono )
const ( ImageScopeGame uint8 = iota + 1 ImageScopeLevel )
const PositionOverlay uint8 = 1
Variables ¶
var ErrTemplate = errors.New("invalid UI template")
Functions ¶
func EncodeComposition ¶
Types ¶
type Element ¶
type Element struct {
ID uint32 `json:"id"`
Parent uint32 `json:"parent,omitempty"`
Name string `json:"name"`
Kind string `json:"kind"`
Text string `json:"text"`
Action uint32 `json:"action,omitempty"`
Style Style `json:"style,omitzero"`
// ResponsiveStyle is the fully resolved style selected at or below the
// template's ResponsiveMaxWidth. A zero Set inherits Style unchanged.
ResponsiveStyle Style `json:"responsiveStyle,omitzero"`
}
type Image ¶
type Image struct {
Scope uint8 `json:"scope"`
Name string `json:"name,omitempty"`
AssetID uint32 `json:"assetId,omitempty"`
Top uint16 `json:"top,omitempty"`
Right uint16 `json:"right,omitempty"`
Bottom uint16 `json:"bottom,omitempty"`
Left uint16 `json:"left,omitempty"`
}
Image is a compiler-resolved nine-slice reference. Game images use a logical name; level images use the stable numeric ID from their owning .kld.
type Style ¶
type Style struct {
Set uint32 `json:"set,omitempty"`
Set2 uint32 `json:"set2,omitempty"`
Background uint32 `json:"background,omitempty"`
BackgroundHover uint32 `json:"backgroundHover,omitempty"`
BackgroundPressed uint32 `json:"backgroundPressed,omitempty"`
Color uint32 `json:"color,omitempty"`
Padding uint16 `json:"padding,omitempty"`
Gap uint16 `json:"gap,omitempty"`
FontSize uint16 `json:"fontSize,omitempty"`
MinHeight uint16 `json:"minHeight,omitempty"`
BackgroundImage Image `json:"backgroundImage,omitzero"`
BackgroundImageHover Image `json:"backgroundImageHover,omitzero"`
BackgroundImagePressed Image `json:"backgroundImagePressed,omitzero"`
BackgroundDisabled uint32 `json:"backgroundDisabled,omitempty"`
BackgroundImageDisabled Image `json:"backgroundImageDisabled,omitzero"`
ColorHover uint32 `json:"colorHover,omitempty"`
ColorPressed uint32 `json:"colorPressed,omitempty"`
ColorDisabled uint32 `json:"colorDisabled,omitempty"`
FlexDirection uint8 `json:"flexDirection,omitempty"`
AlignItems uint8 `json:"alignItems,omitempty"`
MinWidth uint16 `json:"minWidth,omitempty"`
MaxWidth uint16 `json:"maxWidth,omitempty"`
MaxHeight uint16 `json:"maxHeight,omitempty"`
JustifyContent uint8 `json:"justifyContent,omitempty"`
FlexGrow uint8 `json:"flexGrow,omitempty"`
Margin uint16 `json:"margin,omitempty"`
Overflow uint8 `json:"overflow,omitempty"`
TransitionDuration uint16 `json:"transitionDuration,omitempty"`
TransitionEnter uint8 `json:"transitionEnter,omitempty"`
TransitionExit uint8 `json:"transitionExit,omitempty"`
TextAlign uint8 `json:"textAlign,omitempty"`
FontFamily uint8 `json:"fontFamily,omitempty"`
ContentImage Image `json:"contentImage,omitzero"`
BackgroundFocus uint32 `json:"backgroundFocus,omitempty"`
BackgroundImageFocus Image `json:"backgroundImageFocus,omitzero"`
ColorFocus uint32 `json:"colorFocus,omitempty"`
TransitionDelay uint16 `json:"transitionDelay,omitempty"`
TransitionEasing uint8 `json:"transitionEasing,omitempty"`
Position uint8 `json:"position,omitempty"`
Left uint16 `json:"left,omitempty"`
Right uint16 `json:"right,omitempty"`
Top uint16 `json:"top,omitempty"`
Bottom uint16 `json:"bottom,omitempty"`
ImageFit uint8 `json:"imageFit,omitempty"`
Tint uint32 `json:"tint,omitempty"`
Icon Image `json:"icon,omitzero"`
IconSize uint16 `json:"iconSize,omitempty"`
IconPosition uint8 `json:"iconPosition,omitempty"`
IconGap uint16 `json:"iconGap,omitempty"`
}
Style is a compact, compiler-resolved presentation value. Set distinguishes an authored zero/transparent value from an omitted property.
type Template ¶
type Template struct {
Version uint32 `json:"version"`
Modal bool `json:"modal"`
Back bool `json:"back,omitempty"`
Panel Style `json:"panel,omitzero"`
ResponsiveMaxWidth uint16 `json:"responsiveMaxWidth,omitempty"`
ResponsivePanel Style `json:"responsivePanel,omitzero"`
Elements []Element `json:"elements"`
}
Template version 1 is a vertical panel of named labels, buttons, and lists. A modal panel captures game input. A nonmodal HUD must contain only labels.
func DecodeComposition ¶
DecodeComposition accepts all versioned retained-tree presentation schemas.
func (Template) ValidateComposition ¶
ValidateComposition also accepts composition, style, layout, and responsive schemas. Legacy packaging continues using Validate, which accepts schema 1 only.