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 ( LengthAuto uint8 = iota LengthPixels LengthPercent )
const ( PercentScale = 10000 MaxDimensionPixels = 2048 )
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 SchemaWidgets uint32 = 10 SchemaSizing uint32 = 11 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 Style2Width Style2Height )
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 ¶
func ValidateStyle ¶ added in v0.0.5
ValidateStyle checks a resolved style against a widget's complete current presentation contract. Authoring compilers may use this to omit invalid declarations; serialized templates still undergo strict versioned validation.
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"`
Value string `json:"value,omitempty"`
Min int32 `json:"min,omitempty"`
Max int32 `json:"max,omitempty"`
Placeholder string `json:"placeholder,omitempty"`
Tooltip string `json:"tooltip,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"`
}
func (Element) ValidValue ¶ added in v0.0.5
ValidValue checks a control's canonical wire value. Selection membership is checked by the host against the complete staged tree and its current rows.
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 Length ¶ added in v0.0.5
Length stores logical pixels or hundredths of a percent; zero means auto. A style presence bit distinguishes an explicit auto override from omission.
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"`
Width Length `json:"width,omitzero"`
Height Length `json:"height,omitzero"`
}
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. Schema 9 also permits actionable nonmodal HUD controls; older nonmodal templates retain their noninteractive contract.
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.