View on GitHub

Mazarin

All-Go Operating System For ARM64, RISC-V and x86_64

mancini

import "mazzy/mazarin/mancini"

Code generated by compile-constraints from add_sub_deref.vgo. DO NOT EDIT.

Code generated by compile-constraints from bounds_from_xywh.vgo. DO NOT EDIT.

Code generated by compile-constraints from bounds_hash.vgo. DO NOT EDIT.

Code generated by compile-constraints from decorationHeight.vgo. DO NOT EDIT.

Code generated by compile-constraints from decorationWidth.vgo. DO NOT EDIT.

Package mancini is the core of the Mazzy UI toolkit. It defines the interfaces and types that all interactors share: layout, drawing, theming, and neumorphic shadow parameters.

Architecture

Mancini uses an object-oriented design layered on Go’s embedding. Every UI element (“interactor”) ultimately satisfies the Interactor interface, which provides position (X, Y), size (W, H), visibility, and access to the current DrawContext. Themed interactors additionally satisfy ThemedInteractor, adding palette colors and font resolution.

Concrete interactor types live in the mazzy/mazarin/mancini/std package. Their implementation base types live in mazzy/mazarin/mancini/impl:

Backpointer and Virtual Dispatch

Go embedding promotes methods but does not provide virtual dispatch. Mancini solves this with a backpointer pattern: every [impl.Interactor] stores an “owner” field of type Interactor that points to the outermost concrete type. During construction, the concrete type passes itself:

b := &Button{...}
b.ThemedInteractor.Init(b, layout, theme)  // b is the backpointer

The Draw protocol uses this backpointer as the “self” parameter:

func (b *Button) Draw(self Interactor, x, y, w, h int64) { ... }

This ensures that self.DC(), self.Visible(), etc. resolve through the concrete type, enabling correct virtual dispatch across the embedding hierarchy.

Layout and Constraints

Each interactor has a LayoutAttributes that publishes its position, size, and visibility as named attributes in a global constraint network. Container interactors ([impl.Parent]) discover children by querying which attributes name them as their parent. This decouples parent–child relationships from Go’s type system — children register themselves by setting their Parent attribute to the parent’s constraint-system name.

Neumorphic Rendering

The visual system supports three depth states (NeuDepth):

Shadow parameters are bundled in NeuParams and delivered through the Theme via the NeumorphicParams interface. Two weight classes exist: Heavy (for windows) and Light (for controls). Either may return nil to disable neumorphic rendering entirely, falling back to flat drawing.

Drawing

All rendering goes through DrawContext, which wraps a github.com/fogleman/gg context. The NewDrawer interface is the standard draw protocol:

Draw(self Interactor, x, y, w, h int64)

The parent passes authoritative bounds (x, y, w, h) that override any stale values in the layout attributes. The “self” parameter is the backpointer described above.

Code generated by compile-constraints from horizontal_center.vgo. DO NOT EDIT.

Code generated by compile-constraints from identity_i64.vgo. DO NOT EDIT.

Code generated by compile-constraints from identity_rect.vgo. DO NOT EDIT.

Code generated by compile-constraints from leaf_damage_rect.vgo. DO NOT EDIT.

Code generated by compile-constraints from parent_damage_rect.vgo. DO NOT EDIT.

Code generated by compile-constraints from vertical_center.vgo. DO NOT EDIT.

Index

Variables

ErrPink is the background color drawn when an interactor has no children (almost always a programming error).

var ErrPink = color.NRGBA{255, 105, 180, 255}

GrooveParams are the default InsetParams used for thin inset separator lines. Used by [std.NeuGroove] and by [std.NOfMChooser] for inter-strip groove separators.

var GrooveParams = InsetParams{Off: 1, DarkBlur: 3, LightBlur: 2}

var ProgAddSubDeref = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_a_",
        "_b_",
        "_c_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "addSubDeref", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

var ProgBoundsFromXywh = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 60, Op2: 4, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_x_",
        "_y_",
        "_width_",
        "_height_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "boundsFromXywh", PC: 0, NumArgs: 0, NumLocals: 4, LocalBase: 0},
    },
    Entry: 0,
}

var ProgBoundsHash = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x9e3779b1},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x85ebca77},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0xc2b2ae3d},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x27d4eb2f},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_x_",
        "_y_",
        "_width_",
        "_height_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "boundsHash", PC: 0, NumArgs: 0, NumLocals: 4, LocalBase: 0},
    },
    Entry: 0,
}

var ProgDecorationHeight = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1e},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x05, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_margin_",
        "_maxSize_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "decorationHeight", PC: 200, NumArgs: 0, NumLocals: 6, LocalBase: 40},
    },
    Entry: 12,
}

var ProgDecorationWidth = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x14},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x05, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_margin_",
        "_maxSize_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "decorationWidth", PC: 200, NumArgs: 0, NumLocals: 6, LocalBase: 40},
    },
    Entry: 12,
}

var ProgHorizontalCenter = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x23, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_containerX_",
        "_containerWidth_",
        "_elementWidth_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "horizontalCenter", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

var ProgIdentityI64 = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "identityI64", PC: 0, NumArgs: 0, NumLocals: 0, LocalBase: 0},
    },
    Entry: 0,
}

var ProgIdentityRect = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_0_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "identityRect", PC: 0, NumArgs: 0, NumLocals: 0, LocalBase: 0},
    },
    Entry: 0,
}

var ProgLeafDamageRect = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x03, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 60, Op2: 4, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_bounds_",
        "_lpBounds_",
        "_visible_",
        "_lpVisible_",
        "_contentHash_",
        "_lpContentHash_",
        "_bgColor_",
        "_lpBgColor_",
        "_fgColor_",
        "_lpFgColor_",
        "_boundsHash_",
        "_lpBoundsHash_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "leafDamageRect", PC: 0, NumArgs: 0, NumLocals: 12, LocalBase: 0},
    },
    Entry: 0,
}

var ProgParentDamageRect = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 60, Op2: 4, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x03, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 65, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x42, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 65, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_bounds_",
        "_lpBounds_",
        "_visible_",
        "_lpVisible_",
        "_bgColor_",
        "_lpBgColor_",
        "_fgColor_",
        "_lpFgColor_",
        "_boundsHash_",
        "_lpBoundsHash_",
        "_childDamage_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "parentDamageRect", PC: 0, NumArgs: 0, NumLocals: 12, LocalBase: 0},
    },
    Entry: 0,
}

var ProgVerticalCenter = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x23, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_containerY_",
        "_containerHeight_",
        "_elementHeight_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "verticalCenter", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

Init initializes the mancini layout system using the shepherd’s SID from attr.SID(). Must be called after attr.Init(). VisSuffix is the URI suffix for the Visible attribute, used by constraint programs to check child visibility.

var VisSuffix = LayoutVisible.Suffix()

func BindStrings

func BindStrings(prog *vm.Program, bindings ...string) *vm.Program

BindStrings returns a copy of prog with placeholder strings replaced by the given bindings. Bindings are alternating name-value pairs:

BindStrings(prog, "_maxWidth_", maxWidthURI, "_spacing_", spacingURI, ...)

Any string in the program’s string table that matches a placeholder name (underscore-prefixed and suffixed, e.g. “_maxWidth_”) is replaced with the corresponding value. Non-placeholder strings are preserved.

func BindStringsChildren

func BindStringsChildren(prog *vm.Program, bindings ...string) *vm.Program

BindStringsChildren is BindStrings plus automatic binding of the placeholders required by the “children” vgo library: child discovery (_childPattern_), type prefixes (_boolPrefix_, _int64Prefix_), and layout property suffixes (_xSuffix_, _ySuffix_, _widthSuffix_, _heightSuffix_, _visSuffix_, _boundsHashSuffix_).

func BoolPrefix

func BoolPrefix() string

BoolPrefix returns the URI prefix for bool attributes in the mancini namespace.

func ChildHeight

func ChildHeight(l Layouter, fallback float64) float64

ChildHeight reads a Layouter’s height from its constraint attributes. Returns fallback if the layout is nil or height is 0.

func ChildPattern

func ChildPattern() string

ChildPattern returns the URI pattern for discovering children via their Parent attributes.

func ChildWidth

func ChildWidth(l Layouter, fallback float64) float64

ChildWidth reads a Layouter’s width from its constraint attributes. Returns fallback if the layout is nil or width is 0.

func DefaultName

func DefaultName(typeName string) string

func DrawHand

func DrawHand(dc DrawContext, cx, cy, angle, length, width float64, col color.NRGBA)

DrawHand draws a single clock hand as a line from center. Exported as a convenience for ClockFace implementations.

func GlobalToLocal

func GlobalToLocal(globalX, globalY int64, d Drawer) (localX, localY int64, inside bool)

GlobalToLocal transforms global screen coordinates to local coordinates relative to the interactor’s layout origin. Returns the local coordinates and whether the point falls inside the interactor’s bounds.

func Init

func Init()

func Int64Prefix

func Int64Prefix() string

Int64Prefix returns the URI prefix for int64 attributes in the mancini namespace.

func LayoutURI

func LayoutURI(myName string, dt DataType, prop LayoutProp) string

LayoutURI builds an attribute URI in the mancini namespace.

func MeasureTextWidth

func MeasureTextWidth(face font.Face, text string) int64

MeasureTextWidth returns the advance width of text using a pre-resolved font.Face.

func NeuMaxPad

func NeuMaxPad(p NeuParams) int64

NeuMaxPad computes the maximum shadow padding across all depth states. Returns the ceiling as an integer — all interactor dimensions are int64.

func PopClip

func PopClip()

PopClip restores the previous clip rectangle.

func PublishLayout

func PublishLayout(l *LayoutAttributes, x, y, w, h float64)

PublishLayout writes position and size to an interactor’s layout attributes. Panics if a non-nil attribute is a constraint — constraint values are computed by the VM and must not be set imperatively.

func PushClip

func PushClip(x, y, w, h float64)

PushClip pushes a clip rectangle (global coords). The effective clip is the intersection of this rect with the parent’s clip.

func RegisterInteractor

func RegisterInteractor(name string, i Interactor)

RegisterInteractor adds an interactor to the global registry keyed by its constraint-system name. Called from impl.Interactor.Init().

type Alignment

Alignment controls cross-axis positioning of children within a container. For Column (vertical layout), this aligns children horizontally. For Row (horizontal layout), this aligns children vertically.

type Alignment int

const (
    AxisMinimum Alignment = 0 // left (Column) or top (Row)
    AxisMiddle  Alignment = 1 // centered
    AxisMaximum Alignment = 2 // right (Column) or bottom (Row)
)

type ChildAccessor

ChildAccessor is implemented by decorator interactors that wrap a single child.

type ChildAccessor interface {
    GetChild() Drawer
}

type ClassicFace

ClassicFace draws a traditional analog clock with dot hour markers, three hands (hour, minute, second), and a center dot.

type ClassicFace struct {
    HandColor color.NRGBA    // hand and marker color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*ClassicFace) DrawFace

func (f *ClassicFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the classic clock face.

func (*ClassicFace) FaceName

func (f *ClassicFace) FaceName() string

func (*ClassicFace) Location

func (f *ClassicFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type ClipEdge

ClipEdge indicates which edge of the clip rect has overflow.

type ClipEdge int

const (
    ClipRight  ClipEdge = iota // Row: child overflows to the right
    ClipBottom                 // Column: child overflows downward
)

type ClippedContext

ClippedContext wraps a DrawContext and enforces rectangular clipping on one edge. It saves overflow pixels before the child draws, then restores them in Flush(). Only the overflow side is saved — the child’s shadows on other sides (within the parent) are left intact.

type ClippedContext struct {
    DrawContext
    // contains filtered or unexported fields
}

func WithClip

func WithClip(dc DrawContext, clipX, clipY, clipW, clipH, pad float64, edge ClipEdge) *ClippedContext

WithClip creates a ClippedContext that will erase overflow drawing past the given clip rectangle on the specified edge. pad is the maximum shadow spread the child might draw beyond the clip boundary.

For ClipRight (Row): saves the strip to the right of clipX+clipW. For ClipBottom (Column): saves the strip below clipY+clipH.

func (*ClippedContext) Flush

func (c *ClippedContext) Flush()

Flush restores the overflow pixels saved during WithClip construction.

type ClockFace

ClockFace defines how an analog clock renders and what timezone it displays. Implementations control the visual appearance of the face, markers, hands, and center. The Clock interactor handles layout and time conversion.

type ClockFace interface {
    // DrawFace renders the complete clock within a circle centered at (cx, cy)
    // with the given radius. Time components are already converted to the
    // face's local timezone by the Clock interactor.
    DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

    // Location returns the timezone for this clock face.
    Location() *time.Location

    // FaceName returns a short display name for this face style.
    FaceName() string
}

type DamageAttributes

DamageAttributes holds “last painted” mirror attributes and the computed damage rectangle for an interactor. The damage rectangle is the union of current and last-painted bounds when any tracked property changes.

type DamageAttributes struct {
    DamageRect    *attr.Attribute[vm.Value] // constraint: damaged region (empty if no change)
    LPBounds      *attr.Attribute[vm.Value] // value: last-painted bounds (set after painting)
    LPVisible     *attr.Attribute[bool]     // value: last-painted visibility
    LPBoundsHash  *attr.Attribute[int64]    // value: last-painted bounds hash
    LPBgColor     *attr.Attribute[int64]    // value: last-painted background color
    LPFgColor     *attr.Attribute[int64]    // value: last-painted foreground color
    LPContentHash *attr.Attribute[int64]    // value: last-painted content hash
}

type DataType

DataType identifies the type segment in an attribute URI.

type DataType string

const (
    DataTypeInt64 DataType = "int64"
    DataTypeBool  DataType = "bool"
    DataTypeStr   DataType = "str"
    DataTypeRect  DataType = "rect"
)

type Decoratable

Decoratable is implemented by types that customize the visual decoration drawn by [impl.Decorator]. The default [impl.Decorator] draws a thick black box; [std.NeuBox] and [std.NeuCircle] override Decorate to draw neumorphic shadows, and [std.AppWindow] draws both shadows and a title bar.

x, y, w, h are the decorator’s authoritative bounds from its parent.

type Decoratable interface {
    Decorate(self Interactor, x, y, w, h int64)
}

type DetailedHit

DetailedHit is optionally implemented by interactors that need finer-grained hit testing than their rectangular bounds. The mouse state machine calls DetailedHit with local coordinates after the bounding-box check passes. If the interactor does not implement this interface, the bounding-box hit is accepted as-is.

type DetailedHit interface {
    DetailedHit(localX, localY int64) bool
}

type DigitFace

DigitFace draws an analog clock with Arabic numerals rotated to match their angular position around the dial. 12 is upright, 3 is rotated 90° clockwise, 6 is upside-down, 9 is rotated 270° clockwise, etc.

type DigitFace struct {
    HandColor color.NRGBA    // hand and digit color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*DigitFace) DrawFace

func (f *DigitFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the digit clock face with rotated numerals.

func (*DigitFace) FaceName

func (f *DigitFace) FaceName() string

func (*DigitFace) Location

func (f *DigitFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type DrawContext

DrawContext abstracts the drawing surface for all interactor rendering. The github.com/fogleman/gg.Context type satisfies this interface via structural typing.

DrawContext is propagated from parent to child during the draw pass via SetDC (see [impl.Interactor.SetDC]). All interactors access it through self.DC() in their [NewDrawer.Draw] method.

Limitations

DrawContext does not expose ClosePath, DrawArc, SetFillRuleEvenOdd, or Clip. Interactors that need these features (e.g., [std.RadialMenu] for even-odd annulus fills, [std.Scrollbar] for triangle arrows) use temporary github.com/fogleman/gg.Context buffers and composite via image/draw.Draw or image/draw.DrawMask.

ClippedContext wraps a DrawContext to enforce rectangular clipping by saving/restoring overflow pixels — used by [std.Column], [std.Row], and [std.AppWindow] for child overflow.

type DrawContext interface {
    // Shape primitives (add to current path).
    DrawRectangle(x, y, w, h float64)
    DrawRoundedRectangle(x, y, w, h, r float64)
    DrawCircle(x, y, r float64)
    DrawLine(x1, y1, x2, y2 float64)

    // Path building.
    MoveTo(x, y float64)
    LineTo(x, y float64)

    // Path rendering.
    Fill()
    Stroke()

    // Fast-path rectangle fill using current color (bypasses rasterizer).
    FillRectangle(x, y, w, h float64)

    // Text.
    DrawString(s string, x, y float64)
    DrawStringAnchored(s string, x, y, ax, ay float64)
    MeasureString(s string) (float64, float64)

    // Graphics state.
    SetColor(c color.Color)
    SetFillStyle(pattern gg.Pattern)
    SetLineWidth(lineWidth float64)
    SetLineCap(lineCap gg.LineCap)
    SetFontFace(fontFace font.Face)
    LoadFontFace(path string, points int64) error

    // Transform stack and clipping.
    Push()
    Pop()
    Rotate(angle float64)
    RotateAbout(angle, x, y float64)

    // Canvas access.
    Image() image.Image
}

type Drawer

Drawer draws itself into the given bounds using a DrawContext. This is the legacy interface — new interactors should implement NewDrawer instead.

type Drawer interface {
    Draw(dc DrawContext, x, y, w, h float64)
}

type FaceDrawer

FaceDrawer draws content onto the face of a neumorphic shape. It is used as a callback by [std.NeuBoxWith], [std.NeuCircleWith], [std.Button], [std.NOfMChooser], [std.RadialNOfMChooser], and [std.RadialMenu] to render icons, text, or other content on top of the neumorphic surface.

The coordinates (x, y, w, h) are the content area within the shape, excluding shadow padding. FaceDrawer also satisfies the Drawer interface.

type FaceDrawer func(dc DrawContext, x, y, w, h float64)

func (FaceDrawer) Draw

func (f FaceDrawer) Draw(dc DrawContext, x, y, w, h float64)

Draw implements the Drawer interface.

type Feature

Feature selects a font variant within a family. Used by [Theme.Font] and FontResolver to request specific weights and styles.

type Feature int

const (
    None       Feature = iota // Regular weight, upright.
    Bold                      // Bold weight.
    Italic                    // Italic style.
    BoldItalic                // Bold weight, italic style.
)

func (Feature) String

func (f Feature) String() string

String returns the style name used by the font index CSV.

type FlushParams

FlushParams controls the thin edge outline for the Flush depth state. EdgeW is the stroke width; EdgeAlpha is the opacity of both the dark and light edge strokes.

type FlushParams struct {
    EdgeW     float64
    EdgeAlpha uint8
}

type FontConfig

FontConfig holds font loading and text measurement functions, independent of palette or rendering configuration. It is returned by [Theme.Font] and [Theme.DefaultFont].

If LoadFace is nil (e.g., when no FontResolver was provided to the theme), text measurement falls back to a rough character-width estimate.

type FontConfig struct {
    // LoadFace creates a font.Face at the given size.
    LoadFace func(bold bool, size int64) font.Face

    // FontRegular is the path to the regular-weight font file.
    // Used when LoadFace is nil.
    FontRegular string

    // FontBold is the path to the bold-weight font file.
    // Used when LoadFace is nil.
    FontBold string
}

func (*FontConfig) MeasureText

func (fc *FontConfig) MeasureText(text string, bold bool, fontSize int64) float64

MeasureText returns the advance width of text at the given font size.

type FontResolver

FontResolver loads a font.Face for a given family, Feature, and point size. It is typically backed by a font cache (e.g., fontcache.FontCache). Passed to [theme.NewDefaultTheme] at application startup.

type FontResolver func(family string, feature Feature, size int64) font.Face

type FramebufferContext

FramebufferContext wraps the GPU framebuffer as an *image.RGBA and provides Flush for sending dirty regions to the GPU. This is the minimal bridge between mancini rendering (via *gg.Context) and the hardware framebuffer.

type FramebufferContext struct {
    // contains filtered or unexported fields
}

func NewFramebufferContext

func NewFramebufferContext() *FramebufferContext

NewFramebufferContext maps the GPU framebuffer and returns a context for rendering into it. The returned Image() can be passed to gg.NewContextForRGBA for neumorphic rendering.

func (*FramebufferContext) Flush

func (fc *FramebufferContext) Flush(x0, y0, x1, y1 int32)

Flush sends the given rectangle to the GPU.

func (*FramebufferContext) Image

func (fc *FramebufferContext) Image() *image.RGBA

Image returns the framebuffer as an *image.RGBA.

type InsetParams

InsetParams controls the inner shadow layers for the Inset depth state. Off is the shadow offset (dark biased upper-left, light biased lower-right). DarkBlur and LightBlur set the Gaussian blur radius for each shadow layer. Inner shadows are masked to the shape boundary.

type InsetParams struct {
    Off                 float64
    DarkBlur, LightBlur float64
}

type Interactor

Interactor is the base interface for all UI elements in the tree. Every concrete interactor type satisfies this interface via struct embedding of [impl.Interactor] or [impl.ThemedInteractor].

Position (X, Y) and size (W, H) are read from LayoutAttributes published in the constraint network. DrawContext is set by the parent before each draw pass via SetDC.

type Interactor interface {
    X() int64
    Y() int64
    W() int64
    H() int64
    Visible() bool
    DC() DrawContext
}

func FindChildren

func FindChildren(parentName string) []Interactor

FindChildren discovers children of the named parent via the constraint network. It calls attr.Find with the wildcard Parent pattern, reads each matching Parent value, filters by parentName, extracts the child’s constraint-system name from the URI, looks it up in the registry, and returns them sorted by registration sequence number.

func LookupInteractor

func LookupInteractor(name string) Interactor

LookupInteractor returns the interactor registered under the given constraint-system name, or nil if not found.

type LayoutAttributes

LayoutAttributes holds constraint system attributes for an interactor’s layout.

type LayoutAttributes struct {
    X, Y, Width, Height *attr.Attribute[int64]
    Visible             *attr.Attribute[bool]
    Bounds              *attr.Attribute[vm.Value] // Rectangle2D: (x, y, x+w, y+h)
    BoundsHash          *attr.Attribute[int64]    // hash of X,Y,W,H for fast change detection
    Parent              *attr.Attribute[string]
    SpacingAttr         *attr.Attribute[int64] // inter-child spacing (containers only)
    CrossAlignAttr      *attr.Attribute[int64] // cross-axis alignment (containers only)
    MaxWidthAttr        *attr.Attribute[int64] // max width for overflow clipping (Row)
    MaxHeightAttr       *attr.Attribute[int64] // max height for overflow clipping (Column)
    LastChildDrawnAttr  *attr.Attribute[int64] // 0-based index of last child to draw (Row/Column)
    Damage              *DamageAttributes      // damage rectangle tracking (nil = no damage)
    // contains filtered or unexported fields
}

func NewDecoratorLayout

func NewDecoratorLayout(name string, parent Interactor, hMargin, vMargin, maxSize int64) *LayoutAttributes

NewDecoratorLayout creates layout attributes with inside-out constraint sizing for decorator-style parents. The parent interactor is used to extract the parent’s constraint-system name. hMargin and vMargin are the half-margins for width and height respectively: width = child.Width + 2*hMargin, height = child.Height + 2*vMargin (both clamped to maxSize). For symmetric decorators (equal insets), pass the same value for both. If no child is found, defaults from ProgDecorationWidth/Height apply (20/30).

func NewDecoratorLayoutByParentName

func NewDecoratorLayoutByParentName(myName, parentName string, hMargin, vMargin, maxSize int64) *LayoutAttributes

NewDecoratorLayoutByParentName is the string-based variant of NewDecoratorLayout. Prefer NewDecoratorLayout which takes an Interactor — this version exists for cases where only the parent’s constraint-system name is available.

func NewLayoutAttributes

func NewLayoutAttributes(myName, parent string) *LayoutAttributes

NewLayoutAttributes creates all layout attributes as Value attributes, plus a Bounds constraint derived from X, Y, Width, Height.

func NewLayoutAttributesBase

func NewLayoutAttributesBase(myName, parent string) *LayoutAttributes

NewLayoutAttributesBase creates X, Y, Visible, Parent attributes (no Width/Height).

func (*LayoutAttributes) GetCrossAlign

func (lh *LayoutAttributes) GetCrossAlign() Alignment

GetCrossAlign returns the current cross-axis alignment, or AxisMinimum if unavailable.

func (*LayoutAttributes) GetSpacing

func (lh *LayoutAttributes) GetSpacing() float64

GetSpacing returns the current inter-child spacing value, or 0 if unavailable.

func (*LayoutAttributes) InitBounds

func (lh *LayoutAttributes) InitBounds(myName string)

InitBounds creates the Bounds constraint: rect(X, Y, X+Width, Y+Height), plus a BoundsHash constraint for fast layout-change detection.

func (*LayoutAttributes) InitLeafDamage

func (lh *LayoutAttributes) InitLeafDamage(bgColorURI, fgColorURI, contentHashURI string)

InitLeafDamage creates damage tracking for a leaf interactor (no children). bgColorURI and fgColorURI point to the interactor’s current color attributes. contentHashURI points to a content hash attribute (use “” for non-text interactors; the placeholder will remain unbound and the deref will return 0 — matching the LP default).

func (*LayoutAttributes) InitParentDamage

func (lh *LayoutAttributes) InitParentDamage(bgColorURI, fgColorURI, childDamageURI string)

InitParentDamage creates damage tracking for a parent interactor. childDamageURI is the URI of the first child’s DamageRect attribute.

func (*LayoutAttributes) Name

func (lh *LayoutAttributes) Name() string

Name returns the interactor’s constraint-system name.

func (*LayoutAttributes) SnapshotDamage

func (lh *LayoutAttributes) SnapshotDamage()

SnapshotDamage copies current visual state into last-painted attributes. Called by the draw loop after painting an interactor.

func (*LayoutAttributes) SnapshotDamageColors

func (lh *LayoutAttributes) SnapshotDamageColors(bgColor, fgColor int64)

SnapshotDamageColors copies current color values into last-painted attributes. bgColor and fgColor are the current values to snapshot.

func (*LayoutAttributes) SnapshotDamageContentHash

func (lh *LayoutAttributes) SnapshotDamageContentHash(hash int64)

SnapshotDamageContentHash copies a content hash into the last-painted attribute.

type LayoutProp

LayoutProp identifies a layout property name in an attribute URI. The Suffix method returns the “/layout/<prop>” form used in constraint program bindings.

type LayoutProp string

const (
    // Core layout properties.
    LayoutX       LayoutProp = "X"
    LayoutY       LayoutProp = "Y"
    LayoutWidth   LayoutProp = "Width"
    LayoutHeight  LayoutProp = "Height"
    LayoutVisible LayoutProp = "Visible"
    LayoutParent  LayoutProp = "Parent"

    // Derived layout properties.
    LayoutBounds     LayoutProp = "Bounds"
    LayoutBoundsHash LayoutProp = "BoundsHash"

    // Container properties (Row, Column, ColumnOutsideIn).
    LayoutSpacing        LayoutProp = "Spacing"
    LayoutCrossAlign     LayoutProp = "CrossAlign"
    LayoutMaxWidth       LayoutProp = "MaxWidth"
    LayoutLastChildDrawn LayoutProp = "LastChildDrawn"
    LayoutMinHeight      LayoutProp = "MinHeight"
    LayoutMaxHeight      LayoutProp = "MaxHeight"

    // Decorator properties (NeuBox, NeuCircle, AppWindow, AppTitleBar).
    LayoutMargin  LayoutProp = "Margin"
    LayoutHMargin LayoutProp = "HMargin"
    LayoutVMargin LayoutProp = "VMargin"
    LayoutMaxSize LayoutProp = "MaxSize"

    // Clock properties.
    LayoutFaceName LayoutProp = "FaceName"

    // Damage rectangle tracking.
    LayoutDamageRect    LayoutProp = "DamageRect"
    LayoutLPBounds      LayoutProp = "LPBounds"
    LayoutLPVisible     LayoutProp = "LPVisible"
    LayoutLPBoundsHash  LayoutProp = "LPBoundsHash"
    LayoutLPBgColor     LayoutProp = "LPBgColor"
    LayoutLPFgColor     LayoutProp = "LPFgColor"
    LayoutLPContentHash LayoutProp = "LPContentHash"
)

func (LayoutProp) Suffix

func (p LayoutProp) Suffix() string

Suffix returns the “/layout/<prop>” form used in constraint program bindings.

type Layouter

Layouter is implemented by interactors that have LayoutAttributes. All interactors that embed [impl.Interactor] satisfy this interface via the promoted GetLayout method.

type Layouter interface {
    GetLayout() *LayoutAttributes
}

type MetricFace

MetricFace draws an analog clock using French Revolutionary / metric time: 10 hours per day, 100 minutes per hour, 100 seconds per minute. The dial shows digits 0-9 evenly spaced (36 degrees each), with 0 at top. All hands move slower than conventional clocks because one revolution of the hour hand covers an entire day.

type MetricFace struct {
    HandColor color.NRGBA    // hand and digit color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone (for converting UTC to local midnight)
}

func (*MetricFace) DrawFace

func (f *MetricFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the metric clock face. The hour/minute/second/millis parameters are conventional (24h) local time; this method converts them to metric time for display.

func (*MetricFace) FaceName

func (f *MetricFace) FaceName() string

func (*MetricFace) Location

func (f *MetricFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type MouseState

MouseState tracks the press-drag-release state machine for mouse interactions. Create one with NewMouseState and call Press/Move/Release from the event loop.

type MouseState struct {
    // contains filtered or unexported fields
}

func NewMouseState

func NewMouseState(interactors []Drawer) *MouseState

NewMouseState creates a MouseState for the given set of interactors.

func (*MouseState) Move

func (m *MouseState) Move(x, y int64)

Move handles a mouse move at global coordinates (x, y) during a drag. Transitions between armed and disarmed states.

func (*MouseState) Press

func (m *MouseState) Press(x, y int64)

Press handles a mouse press at global coordinates (x, y). Hit-tests each interactor and begins an interaction if one is found.

func (*MouseState) Release

func (m *MouseState) Release(x, y int64)

Release handles a mouse release at global coordinates (x, y). Completes the interaction: success if armed, failure if disarmed.

func (*MouseState) SetTargets

func (m *MouseState) SetTargets(interactors []Drawer)

SetTargets replaces the set of interactors that receive mouse events.

type MovadoFace

MovadoFace draws a minimalist clock inspired by the Movado Museum Watch: black face, white hands, single dot marker at 12 o’clock.

type MovadoFace struct {
    Loc *time.Location // timezone
}

func (*MovadoFace) DrawFace

func (f *MovadoFace) DrawFace(dc DrawContext, _ *FontConfig, _ Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the Movado-style clock face.

func (*MovadoFace) FaceName

func (f *MovadoFace) FaceName() string

func (*MovadoFace) Location

func (f *MovadoFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type NeuDepth

NeuDepth represents the neumorphic depth of an interactor relative to the surface. It controls which shadow treatment is applied by [std.NeuBoxWith] and [std.NeuCircleWith].

Interactive controls like [std.Button] use NeuDepth.MouseDown to animate between states on press/release.

type NeuDepth int

const (
    Raised NeuDepth = iota // Proud of the surface — casts outer shadows.
    Flush                  // Level with the surface — thin edge outline only.
    Inset                  // Recessed into the surface — inner shadows.
)

func (NeuDepth) MouseDown

func (d NeuDepth) MouseDown() NeuDepth

MouseDown returns the depth a button transitions to when pressed.

Raised → Inset  (pushes below surface)
Flush  → Inset  (pushes below surface)
Inset  → Flush  (pops back to surface level)

func (NeuDepth) String

func (d NeuDepth) String() string

type NeuParams

NeuParams bundles per-depth drawing parameters for an interactor class. Each NeuDepth state has its own parameter sub-struct. Interactors select which sub-struct to use based on their current depth.

A nil *NeuParams disables all neumorphic rendering. See NeumorphicParams for details on the nil convention.

type NeuParams struct {
    Raised RaisedParams
    Flush  FlushParams
    Inset  InsetParams
}

type NeumorphicParams

NeumorphicParams provides two weight classes of shadow parameters, delivered through [Theme.Neumorphic]. The default implementation is [theme.DefaultNeumorphicParams].

Either method may return nil to disable neumorphic rendering for that weight class. All interactors in mazzy/mazarin/mancini/std handle nil gracefully by falling back to flat rendering.

type NeumorphicParams interface {
    Heavy() *NeuParams
    Light() *NeuParams
}

type NewDrawer

NewDrawer is the standard draw protocol for all interactors. The parent passes authoritative x, y, w, h — these override any stale layout handle values. The self parameter is the backpointer to the concrete type, enabling virtual dispatch for DC(), Visible(), and other interface methods. See the package documentation for details on the backpointer pattern.

All concrete interactors in mazzy/mazarin/mancini/std implement this interface.

type NewDrawer interface {
    Draw(self Interactor, x, y, w, h int64)
}

type Palette

Palette provides the color vocabulary for neumorphic rendering. The default implementation is [theme.DefaultPalette]. All shadow rendering in mazzy/mazarin/mancini/std reads colors from the Palette returned by [Theme.Palette].

type Palette interface {
    Surface() color.NRGBA
    SurfaceTint() color.NRGBA
    DarkShadow() color.NRGBA
    LightShadow() color.NRGBA
    Text() color.NRGBA
    Icon() color.NRGBA
    Highlight() color.NRGBA
    HighlightText() color.NRGBA
    DisabledAlpha() float64
    SwapRB() bool
}

type Parent

Parent is an Interactor that has children. [impl.Parent] provides a default implementation that discovers children via the constraint network (each child’s Parent attribute names this interactor) and draws them by propagating the DrawContext and calling each child’s [NewDrawer.Draw].

Container interactors ([std.Column], [std.Row]) embed [impl.Parent] but override DrawChildren with custom layout logic. Decorator interactors ([impl.Decorator]) use GetChildren but handle the single child directly in their own Draw method.

type Parent interface {
    GetChildren() []Interactor
    DrawChildren(self Interactor, x, y, w, h int64)
}

type PolarFace

PolarFace draws a 24-hour analog clock inspired by the Raketa Polar watch. A single hand makes one revolution per day. The dial shows 0 at top, 6 at 3 o’clock, 12 at bottom, 18 at 9 o’clock — with dots at all other hour positions.

type PolarFace struct {
    HandColor color.NRGBA    // hand and marker color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*PolarFace) DrawFace

func (f *PolarFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the Raketa Polar clock face.

func (*PolarFace) FaceName

func (f *PolarFace) FaceName() string

func (*PolarFace) Location

func (f *PolarFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type RaisedParams

RaisedParams controls the dark and light outer shadow layers for the Raised depth state. DarkOff/LightOff set the shadow offset in pixels; DarkBlur/LightBlur set the Gaussian blur radius; DarkAlpha/LightAlpha set the shadow opacity.

type RaisedParams struct {
    LightOff, LightBlur   float64
    DarkOff, DarkBlur     float64
    DarkAlpha, LightAlpha uint8
}

type RomanFace

RomanFace draws an analog clock with Roman numeral hour markers.

type RomanFace struct {
    HandColor color.NRGBA    // hand and numeral color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*RomanFace) DrawFace

func (f *RomanFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the Roman numeral clock face.

func (*RomanFace) FaceName

func (f *RomanFace) FaceName() string

func (*RomanFace) Location

func (f *RomanFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type StdMouseFeedback

StdMouseFeedback is implemented by interactors that respond to press-drag-release interactions. The mancini state machine handles all armed/disarmed transitions and calls these two methods:

Feedback is called on each state change during the drag. Complete is called exactly once when the button is released.

type StdMouseFeedback interface {
    Feedback(active bool)
    Complete(success bool)
}

type Theme

Theme provides the complete visual styling for all interactors: colors (Palette), shadow parameters (NeumorphicParams), and font resolution (FontConfig).

The standard implementation is [theme.DefaultTheme], created by [theme.NewDefaultTheme] or [std.NewDefaultTheme].

Theme is accessed by interactors through [impl.ThemedInteractor.Theme].

type Theme interface {
    // Palette returns the color scheme for neumorphic rendering.
    Palette() Palette

    // Neumorphic returns the shadow parameter provider. May return nil
    // to disable all neumorphic rendering.
    Neumorphic() NeumorphicParams

    // Font returns a [FontConfig] for the given feature and size.
    // The returned FontConfig's LoadFace closure resolves the theme's
    // font family with the requested variant.
    Font(feature Feature, size int64) *FontConfig

    // DefaultFont returns a [FontConfig] for the theme's default
    // family and size using the [None] (regular) feature.
    DefaultFont() *FontConfig

    // DefaultFontSize returns the theme's default font size in points.
    DefaultFontSize() int64
}

type ThemedInteractor

ThemedInteractor extends Interactor with access to the Theme’s colors and fonts. The standard implementation is [impl.ThemedInteractor], which most leaf interactors and controls embed.

type ThemedInteractor interface {
    Interactor
    BgColor() color.NRGBA
    FgColor() color.NRGBA
    Font(feature Feature, size int64) *FontConfig
    DefaultFont() *FontConfig
    DefaultSize() int64
}

Generated by gomarkdoc