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:
- [impl.Interactor] — root base “class”; stores the backpointer, layout attributes, and drawing context.
- [impl.ThemedInteractor] — extends [impl.Interactor] with a Theme reference; provides BgColor, FgColor, and font resolution.
- [impl.Parent] — mixin for interactors that have children; discovers children through the constraint network.
- [impl.Decorator] — single-child parent with inside-out sizing and customizable visual decoration.
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):
- Raised — proud of the surface, casting external dark and light shadows
- Flush — level with the surface, with a thin edge outline
- Inset — recessed into the surface, with inner shadows
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
- func BindStrings(prog *vm.Program, bindings …string) *vm.Program
- func BindStringsChildren(prog *vm.Program, bindings …string) *vm.Program
- func BoolPrefix() string
- func ChildHeight(l Layouter, fallback float64) float64
- func ChildPattern() string
- func ChildWidth(l Layouter, fallback float64) float64
- func DefaultName(typeName string) string
- func DrawHand(dc DrawContext, cx, cy, angle, length, width float64, col color.NRGBA)
- func GlobalToLocal(globalX, globalY int64, d Drawer) (localX, localY int64, inside bool)
- func Init()
- func Int64Prefix() string
- func LayoutURI(myName string, dt DataType, prop LayoutProp) string
- func MeasureTextWidth(face font.Face, text string) int64
- func NeuMaxPad(p NeuParams) int64
- func PopClip()
- func PublishLayout(l *LayoutAttributes, x, y, w, h float64)
- func PushClip(x, y, w, h float64)
- func RegisterInteractor(name string, i Interactor)
- type Alignment
- type ChildAccessor
- type ClassicFace
- type ClipEdge
- type ClippedContext
- type ClockFace
- type DamageAttributes
- type DataType
- type Decoratable
- type DetailedHit
- type DigitFace
- type DrawContext
- type Drawer
- type FaceDrawer
- type Feature
- type FlushParams
- type FontConfig
- type FontResolver
- type FramebufferContext
- type InsetParams
- type Interactor
- type LayoutAttributes
- func NewDecoratorLayout(name string, parent Interactor, hMargin, vMargin, maxSize int64) *LayoutAttributes
- func NewDecoratorLayoutByParentName(myName, parentName string, hMargin, vMargin, maxSize int64) *LayoutAttributes
- func NewLayoutAttributes(myName, parent string) *LayoutAttributes
- func NewLayoutAttributesBase(myName, parent string) *LayoutAttributes
- func (lh *LayoutAttributes) GetCrossAlign() Alignment
- func (lh *LayoutAttributes) GetSpacing() float64
- func (lh *LayoutAttributes) InitBounds(myName string)
- func (lh *LayoutAttributes) InitLeafDamage(bgColorURI, fgColorURI, contentHashURI string)
- func (lh *LayoutAttributes) InitParentDamage(bgColorURI, fgColorURI, childDamageURI string)
- func (lh *LayoutAttributes) Name() string
- func (lh *LayoutAttributes) SnapshotDamage()
- func (lh *LayoutAttributes) SnapshotDamageColors(bgColor, fgColor int64)
- func (lh *LayoutAttributes) SnapshotDamageContentHash(hash int64)
- type LayoutProp
- type Layouter
- type MetricFace
- type MouseState
- type MovadoFace
- type NeuDepth
- type NeuParams
- type NeumorphicParams
- type NewDrawer
- type Palette
- type Parent
- type PolarFace
- type RaisedParams
- type RomanFace
- type StdMouseFeedback
- type Theme
- type ThemedInteractor
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].
- Heavy — window-weight shadows, used by [std.AppWindow] and [std.FreeFloatingWindow].
- Light — control-weight shadows, used by [std.Button], [std.Checkbox], [std.Scrollbar], [std.NOfMChooser], and other controls.
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(true) — you are active (mouse inside, button held)
- Feedback(false) — you are inactive (mouse dragged outside)
- Complete(true) — interaction succeeded (released inside)
- Complete(false) — interaction cancelled (released outside)
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