std
import "mazzy/mazarin/mancini/std"
BoxesAndGlueInteractor renders text using Knuth-Plass paragraph layout from the boxesandglue library. It receives text via a shared memory page whose address and length are provided at construction time. The length is driven by an eager constraint, so the BAG redraws automatically when the source updates.
This interactor replaces WebInteractor for TeX-quality text rendering without an HTML engine. Font metrics and glyph bitmaps come from the same GlyphProvider / fontsvc infrastructure used by all other interactors.
Code generated by compile-constraints from column_height.vgo. DO NOT EDIT.
Code generated by compile-constraints from column_last_child.vgo. DO NOT EDIT.
Code generated by compile-constraints from column_width.vgo. DO NOT EDIT.
console.go — Console and consoleLine interactors for monospaced terminal text display. Console is a column of consoleLine children, sized by font metrics. It exposes a terminal-like API (HandleByte, AddLine) and manages all line content internally. consoleLine is unexported — external code interacts only with Console.
Console is designed to be a child of a NeuBox (Heavy, Inset) so that the text area appears recessed into the neumorphic surface. It uses the standard palette colors (dark text on light surface) rather than the traditional white-on-black terminal look.
corner_radial_chooser.go — Self-contained pulsing indicator + radial overlay menu.
CornerRadialChooser is a drop-in interactor: create it as a child of any container, and it handles its own throbber animation, overlay lifecycle, and mouse input. The caller only needs to route WM events and call Tick() at 10Hz.
Unlike ThrobberRadialChooser, CornerRadialChooser tracks its own drawn position and app screen origin — no manual coordinate wiring.
Usage:
crc := std.NewCornerRadialChooser("crc", parentName, theme, pal,
rachelSID, []string{"Small","Medium","Large"}, 0)
crc.OnSelect = func(idx int) { ... }
// In event loop:
// crc.Tick() at 10Hz
// Route OverlayReady/Released and mouse events via crc methods
Package std provides the standard library of concrete interactor types for the Mancini UI toolkit. Every interactor here embeds one of the base types from mazzy/mazarin/mancini/impl and satisfies [mancini.NewDrawer].
Interactor Catalog
Leaf interactors (no children, embed [impl.ThemedInteractor]):
- Button — neumorphic push button with configurable depth and face content
- Checkbox — toggle box (Inset ↔ Raised with checkmark)
- CheckboxWithLabel — Checkbox paired with a text Label
- Label — single-line static or dynamic text
- ConsoleLabel — left-aligned monospaced text with per-instance background
- SingleLineText — editable text input field with cursor and auto-scroll
- Scrollbar — vertical or horizontal scrollbar with thumb and optional arrows
- NOfMChooser — strip-based N-of-M multi-select with grooves and selection
- RadialNOfMChooser — arc-shaped annular segment N-of-M chooser
- RadialMenu — full-circle annular menu with selectable segments
Leaf interactors (no children, embed [impl.Interactor] directly):
- Clock — analog clock face with configurable styles and click cycling
- Spacer — invisible fixed-size placeholder
Container interactors (embed [impl.Interactor] + [impl.Parent]):
- Column — vertical layout with inside-out sizing, spacing, cross-axis alignment
- Row — horizontal layout with inside-out sizing, spacing, cross-axis alignment
- ColumnOutsideIn — vertical layout with clamped height and visibility toggling
Decorator interactors (embed [impl.Decorator]):
- NeuBox — single-child wrapper with rectangular neumorphic shadows
- NeuCircle — single-child wrapper with circular neumorphic shadows
- AppWindow — root application window with title bar and content clipping
- FreeFloatingWindow — floating panel with title and groove separator
Title bar renderers (not interactors; used as callbacks for AppWindow):
- [GradientTitle] — animated horizontal gradient with oscillating peak
- [StripedTitle] — classic Mac OS horizontal pinstripes
Neumorphic Rendering Helpers
The package also exports rendering helpers used by interactors and available for custom interactor implementations:
- NeuBoxWith — draws a neumorphic rounded rectangle at any depth
- NeuCircleWith — draws a neumorphic circle at any depth
- NeuGroove — draws a thin horizontal inset groove separator
Nil\-Safe Neumorphic Parameters
All interactors handle nil [mancini.NeuParams] gracefully. When the [mancini.Theme]’s [mancini.NeumorphicParams] returns nil for Heavy() or Light(), interactors fall back to flat rendering: filled shapes with face content, but no shadows, grooves, or selection effects. This allows themes to disable neumorphic rendering for specific weight classes.
Code generated by compile-constraints from minmax_column_height.vgo. DO NOT EDIT.
Code generated by compile-constraints from row_fill_last_child_width.vgo. DO NOT EDIT.
Code generated by compile-constraints from row_height.vgo. DO NOT EDIT.
Code generated by compile-constraints from row_last_child.vgo. DO NOT EDIT.
Code generated by compile-constraints from row_width.vgo. DO NOT EDIT.
throbber_radial_chooser.go — Pulsing indicator that opens a radial overlay menu on click.
ThrobberRadialChooser is a small pulsing circle (throbber) that, when clicked, requests an overlay from rachel and draws a RadialNOfMChooser inside it. The overlay is dismissed on segment selection or on focus loss.
The caller provides labels and an initial selection index. After the user selects a segment, OnSelect is called with the segment index.
Usage:
trc := std.NewThrobberRadialChooser("trc", parentName, theme, pal,
rachelSID, mainDC, []string{"Small","Large"}, 0)
// In the main loop, route OverlayReady/OverlayReleased/MouseMove/MouseRelease
// to trc.HandleOverlayReady, trc.HandleOverlayReleased, trc.HandleMouseMove,
// trc.HandleMouseRelease.
// Call trc.Tick() at 10Hz for the pulsing animation.
Index
- Constants
- Variables
- func ApplyDisabledCircleOverlay(pal mancini.Palette, dc mancini.DrawContext, cx, cy, radius float64)
- func ApplyDisabledOverlay(pal mancini.Palette, dc mancini.DrawContext, x1, y1, x2, y2, r float64)
- func NeuBoxWith(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA, p *mancini.NeuParams)
- func NeuCacheStats() (int64, int64)
- func NeuCircleWith(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, cx, cy, rad float64, face color.NRGBA, p *mancini.NeuParams)
- func NeuGroove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
- func NewConsoleWithBox(myName, parent string, pal mancini.Palette, neuParams mancini.NeuParams, fonts *mancini.FontConfig, fontSize int64, cols, rows int) (*NeuBox, *Console)
- func NewDefaultTheme(family string, defaultSize int64, resolve mancini.FontResolver) mancini.Theme
- func NewDefaultThemeColors(fg, bg color.NRGBA, family string, defaultSize int64, resolve mancini.FontResolver) mancini.Theme
- func ResetDrawPerf()
- func ResetNeuCacheStats()
- func ScrollerHeightURI(myName string) string
- type AppWindow
- func NewAppWindow(pal mancini.Palette, title string) *AppWindow
- func (w *AppWindow) AnnounceToWM(x, y, width, height int32)
- func (w *AppWindow) AnnounceToWMWithPlacement(x, y, width, height, placement int32)
- func (w *AppWindow) Decorate(self mancini.Interactor, x, y, ww, hh int64)
- func (w *AppWindow) DispatchAnimation(wmMsg any) bool
- func (w *AppWindow) Draw(self mancini.Interactor, x, y, ww, hh int64, damage image.Rectangle)
- func (w *AppWindow) Focus()
- func (w *AppWindow) HandleBackingStoreReady(addr uintptr, length int)
- func (w *AppWindow) InitInput() (*mancini.AppDispatcher, *mancini.ClickAgent, *mancini.KeyAgent)
- func (w *AppWindow) PublishThemeAttributes(theme mancini.Theme)
- func (w *AppWindow) RegisterAnimation(a mancini.Animatable, startNanos, endNanos int64) uint64
- func (w *AppWindow) SendBlit()
- func (w *AppWindow) SetSize(appW, appH int64)
- func (w *AppWindow) Unfocus()
- func (w *AppWindow) UnregisterAnimation(localID uint64)
- type BackingStoreEntry
- type BoxesAndGlueInteractor
- func NewBoxesAndGlueInteractor(myName, parent string, theme mancini.Theme, fontSize int32) *BoxesAndGlueInteractor
- func NewBoxesAndGlueInteractorWithLayout(myName string, lh *mancini.LayoutAttributes, theme mancini.Theme, fontSize int32) *BoxesAndGlueInteractor
- func (b *BoxesAndGlueInteractor) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (b *BoxesAndGlueInteractor) SetFontFamily(family string)
- func (b *BoxesAndGlueInteractor) SetFontSize(size int32)
- func (b *BoxesAndGlueInteractor) SetLeading(px float64)
- func (b *BoxesAndGlueInteractor) SetTextSource(pageAddr uintptr, lenAttr *attr.Attribute[int64])
- type Button
- func NewButton(layout *mancini.LayoutAttributes, theme mancini.Theme, depth mancini.NeuDepth) *Button
- func NewButtonNamed(myName, parent string, theme mancini.Theme, depth mancini.NeuDepth, width, height int64) *Button
- func (b *Button) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type Checkbox
- func NewCheckbox(layout *mancini.LayoutAttributes, theme mancini.Theme, size float64, checked bool) *Checkbox
- func NewCheckboxNamed(myName, parent string, theme mancini.Theme, size float64, checked bool) *Checkbox
- func (c *Checkbox) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type CheckboxWithLabel
- func NewCheckboxWithLabel(layout *mancini.LayoutAttributes, theme mancini.Theme, checkSize float64, checked bool, side LabelSide, gap float64, label mancini.Face, labelW, labelH float64) *CheckboxWithLabel
- func NewCheckboxWithLabelNamed(myName, parent string, theme mancini.Theme, checkSize float64, checked bool, side LabelSide, gap float64, label mancini.Face, labelW, labelH float64) *CheckboxWithLabel
- func (c *CheckboxWithLabel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type Clock
- func NewClock(myName, parent string, pal mancini.Palette, fonts *mancini.FontConfig, size int64, utcFunc func() (int64, int64), normalFaces, weirdFaces []mancini.ClockFace) *Clock
- func (c *Clock) Click(ev *mancini.InputEvent) bool
- func (c *Clock) DetailedHit(localX, localY int64) bool
- func (c *Clock) DoubleClick(ev *mancini.InputEvent) bool
- func (c *Clock) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type Column
- func NewColumn(myName, parent string, pal mancini.Palette, maxHeight int64, crossAlign mancini.Alignment, vPadding, hPadding int64, clipOverflow bool) *Column
- func NewColumnWithLayout(lh *mancini.LayoutAttributes, pal mancini.Palette, crossAlign mancini.Alignment, hPadding, vPadding int64, clipOverflow bool) *Column
- func (c *Column) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (c *Column) SetSpacing(v float64)
- type ColumnOutsideIn
- type ColumnPercentage
- type Console
- func NewConsole(myName, parent string, pal mancini.Palette, fonts *mancini.FontConfig, fontSize int64, cols, rows int) *Console
- func (c *Console) AddLine(text string, fg color.NRGBA)
- func (c *Console) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (c *Console) HandleByte(b byte, fd byte)
- func (c *Console) StderrColor() color.NRGBA
- type ConsoleLabel
- type CornerRadialChooser
- func NewCornerRadialChooser(myName, parent string, theme mancini.Theme, pal mancini.Palette, rachelSID int, labels []string, values []int64, initialSel int) *CornerRadialChooser
- func (crc *CornerRadialChooser) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
- func (crc *CornerRadialChooser) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool) bool
- func (crc *CornerRadialChooser) ClickDragStart(ev *mancini.InputEvent) bool
- func (crc *CornerRadialChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (crc *CornerRadialChooser) HandleOverlayReady(m wm.OverlayReady)
- func (crc *CornerRadialChooser) HandleOverlayReleased(m wm.OverlayReleased)
- func (crc *CornerRadialChooser) HitTest(lx, ly int) bool
- func (crc *CornerRadialChooser) OverlayActive() bool
- func (crc *CornerRadialChooser) RequestOverlay()
- func (crc *CornerRadialChooser) Selected() int
- func (crc *CornerRadialChooser) SetAppScreenPos(x, y int32)
- func (crc *CornerRadialChooser) SetScreenSize(w, h int32)
- func (crc *CornerRadialChooser) Tick() bool
- func (crc *CornerRadialChooser) ValueURI() string
- type Divider
- func NewDivider(myName, parent string, pal mancini.Palette, colIndex int, splitAttr *attr.Attribute[int64]) *Divider
- func (d *Divider) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
- func (d *Divider) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool) bool
- func (d *Divider) ClickDragStart(ev *mancini.InputEvent) bool
- func (d *Divider) DetailedHit(localX, localY int64) bool
- func (d *Divider) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (d *Divider) SetupPositionConstraints()
- func (d *Divider) SetupXConstraint(other *Divider)
- type DrawPerfStats
- type DynamicLabel
- func NewDynamicLabel(myName, parent string, theme mancini.Theme, text string, fontSizeURI string) *DynamicLabel
- func NewDynamicLabelBold(myName, parent string, theme mancini.Theme, text string, fontSizeURI string) *DynamicLabel
- func (dl *DynamicLabel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (dl *DynamicLabel) SetAlign(align mancini.TextAlignmentParams)
- func (dl *DynamicLabel) SetPaddingAttrs(padXURI, padYURI string)
- type FlatStyle
- func NewFlatStyle(delta int, borderWidth float64) *FlatStyle
- func (s *FlatStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)
- func (s *FlatStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)
- func (s *FlatStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
- func (s *FlatStyle) Pad(weight mancini.Weight) float64
- func (s *FlatStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)
- type FourteenSeg
- func NewFourteenSeg(myName, parent string, text string, cellW, cellH float64, onColor color.NRGBA) *FourteenSeg
- func NewFourteenSegValue(myName, parent string, text string, cellW, cellH float64, onColor color.NRGBA) (*FourteenSeg, *attr.Attribute[string])
- func (s *FourteenSeg) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (s *FourteenSeg) SetOnColor(c color.NRGBA)
- func (s *FourteenSeg) SetText(text string)
- type FreeFloatingWindow
- func NewFreeFloatingWindow(name string, parent mancini.Interactor, pal mancini.Palette, neuParams mancini.NeuParams, fonts *mancini.FontConfig, title string, radius float64) *FreeFloatingWindow
- func (w *FreeFloatingWindow) Decorate(self mancini.Interactor, x, y, ww, hh int64)
- func (w *FreeFloatingWindow) Draw(self mancini.Interactor, x, y, ww, hh int64, damage image.Rectangle)
- type GradientTitleBar
- func NewGradientTitleBar(pal mancini.Palette, fonts *mancini.FontConfig, title string, fontSize int64, radius float64) *GradientTitleBar
- func (g *GradientTitleBar) DrawTitleBar(dc mancini.DrawContext, title string, state mancini.WindowState, _ mancini.WindowType, x, y, w, h float64)
- func (g *GradientTitleBar) Start(w, h int)
- type GridFrame
- func NewGridFrame(myName, parent string, pal mancini.Palette, theme mancini.Theme, overhang int64, fontSizeURI string, headers []string, percents []float64, splitURIs []string, splitSrcAttrs []*attr.Attribute[int64]) *GridFrame
- func (gf *GridFrame) AddRow(row GridRow) func()
- func (gf *GridFrame) DamageAll()
- func (gf *GridFrame) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (gf *GridFrame) FirstVisibleMsgNumAttr() *attr.Attribute[int64]
- func (gf *GridFrame) LastVisibleMsgNumAttr() *attr.Attribute[int64]
- func (gf *GridFrame) MoveSelection(delta int64)
- func (gf *GridFrame) RefreshSelected()
- func (gf *GridFrame) ScrollBy(delta int64)
- func (gf *GridFrame) SelectedAttr() *attr.Attribute[int64]
- func (gf *GridFrame) SelectedSetAttr() *attr.Attribute[[]int64]
- func (gf *GridFrame) SelectedSetCountAttr() *attr.Attribute[int64]
- func (gf *GridFrame) SelectedSetPagesAttr() *attr.Attribute[int64]
- func (gf *GridFrame) SetRowFactory(f func() GridRow)
- func (gf *GridFrame) SetTotalRows(n int64)
- func (gf *GridFrame) VisibleRowCountAttr() *attr.Attribute[int64]
- type GridRow
- type GridTable
- func NewGridTable(myName, parent string, pal mancini.Palette, theme mancini.Theme, fontSizeURI string, headers []string, percents []float64, splitURIs []string) *GridTable
- func (gt *GridTable) AddRow(row GridRow) func()
- func (gt *GridTable) DamageAll()
- func (gt *GridTable) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (gt *GridTable) MoveSelection(delta int64)
- func (gt *GridTable) RefreshSelected()
- func (gt *GridTable) ScrollBy(delta int64)
- func (gt *GridTable) SetRowFactory(f func() GridRow)
- func (gt *GridTable) SetTotalRows(n int64)
- type HexDisplay
- func NewHexDisplay(myName, parent, widthSource string, cellW, cellH float64, onColor, bgColor color.NRGBA) *HexDisplay
- func (hd *HexDisplay) Display(x int)
- func (hd *HexDisplay) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (hd *HexDisplay) NumDigits() int
- func (hd *HexDisplay) SetText(text string)
- type Label
- func NewLabel(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *Label
- func NewLabelBold(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *Label
- func NewLabelColor(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64, col color.NRGBA) *Label
- func NewLabelNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64) *Label
- func NewLabelNamedBold(myName, parent string, theme mancini.Theme, text string, fontSize int64) *Label
- func NewLabelNamedColor(myName, parent string, theme mancini.Theme, text string, fontSize int64, col color.NRGBA) *Label
- func (l *Label) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (l *Label) SetAlign(align mancini.TextAlignmentParams)
- type LabelSide
- type LightScrollbar
- func NewLightScrollbar(layout *mancini.LayoutAttributes, theme mancini.Theme, isVertical bool, thumbFrac, thumbPos float64) *LightScrollbar
- func NewLightScrollbarNamed(myName, parent string, theme mancini.Theme, isVertical bool, length, thumbFrac, thumbPos float64) *LightScrollbar
- func (s *LightScrollbar) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
- func (s *LightScrollbar) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool
- func (s *LightScrollbar) ClickDragStart(ev *mancini.InputEvent) bool
- func (s *LightScrollbar) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type MarginParent
- func NewMarginParent(myName, parent string, top, right, bottom, left int64, borderWidth int64, label string, theme mancini.Theme, pal mancini.Palette) *MarginParent
- func NewMarginParentConstrained(myName, parent string, top, right, bottom, left int64, borderWidth int64, label string, width, height *attr.Attribute[int64], theme mancini.Theme, pal mancini.Palette) *MarginParent
- func (mp *MarginParent) ControlsInteractor() mancini.Interactor
- func (mp *MarginParent) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type MotifStyle
- func NewMotifStyle(bevelWidth float64) *MotifStyle
- func (s *MotifStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, _ float64, face color.NRGBA)
- func (s *MotifStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)
- func (s *MotifStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
- func (s *MotifStyle) Pad(weight mancini.Weight) float64
- func (s *MotifStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, _ float64, face color.NRGBA)
- type MultiLineText
- func NewMultiLineText(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *MultiLineText
- func NewMultiLineTextNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64, width, height int64) *MultiLineText
- func (m *MultiLineText) Alert()
- func (m *MultiLineText) AnimationFinish(localID uint64, endNanos int64)
- func (m *MultiLineText) AnimationStart(localID uint64, startNanos int64)
- func (m *MultiLineText) AnimationUpdate(localID uint64, startNanos, endNanos int64, coveredStart, coveredEnd float64, nanosSinceStart int64)
- func (m *MultiLineText) ClearAlert()
- func (m *MultiLineText) ClearSelection()
- func (m *MultiLineText) Click(ev *mancini.InputEvent) bool
- func (m *MultiLineText) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool)
- func (m *MultiLineText) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool)
- func (m *MultiLineText) ClickDragStart(ev *mancini.InputEvent) bool
- func (m *MultiLineText) CursorDocEnd(extend bool)
- func (m *MultiLineText) CursorDocStart(extend bool)
- func (m *MultiLineText) CursorDown(extend bool)
- func (m *MultiLineText) CursorEnd(extend bool)
- func (m *MultiLineText) CursorHome(extend bool)
- func (m *MultiLineText) CursorLeft(extend bool)
- func (m *MultiLineText) CursorRight(extend bool)
- func (m *MultiLineText) CursorUp(extend bool)
- func (m *MultiLineText) CursorWordLeft(extend bool)
- func (m *MultiLineText) CursorWordRight(extend bool)
- func (m *MultiLineText) DeleteBackward()
- func (m *MultiLineText) DeleteBackwardWord()
- func (m *MultiLineText) DeleteForward()
- func (m *MultiLineText) DoubleClick(ev *mancini.InputEvent) bool
- func (m *MultiLineText) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (m *MultiLineText) HasAlert() bool
- func (m *MultiLineText) HasSelection() bool
- func (m *MultiLineText) InsertRune(ch rune)
- func (m *MultiLineText) InsertString(s string)
- func (m *MultiLineText) KeyPress(ch rune, action string, ev *mancini.InputEvent) bool
- func (m *MultiLineText) SelectAll()
- func (m *MultiLineText) SelectedText() string
- func (m *MultiLineText) SelectionRange() (start, end int)
- func (m *MultiLineText) SetFocused(v bool)
- func (m *MultiLineText) SetText(s string)
- func (m *MultiLineText) Text() string
- func (m *MultiLineText) TripleClick(ev *mancini.InputEvent) bool
- func (m *MultiLineText) WriteTo(w io.Writer) (int64, error)
- type NOfMChooser
- func NewNOfMChooser(layout *mancini.LayoutAttributes, theme mancini.Theme, stripW, stripH float64, faces []mancini.LatinTextFace, selected []bool) *NOfMChooser
- func NewNOfMChooserNamed(myName, parent string, theme mancini.Theme, stripW, stripH float64, faces []mancini.LatinTextFace, selected []bool) *NOfMChooser
- func (c *NOfMChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type NeuBox
- func NewNeuBox(layout *mancini.LayoutAttributes, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams, radius float64) *NeuBox
- func NewNeuBoxStyled(layout *mancini.LayoutAttributes, theme mancini.Theme, depth mancini.NeuDepth, weight mancini.Weight, radius float64) *NeuBox
- func (n *NeuBox) Decorate(self mancini.Interactor, x, y, w, h int64)
- type NeuCircle
- func NewNeuCircle(layout *mancini.LayoutAttributes, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams) *NeuCircle
- func NewNeuCircleNamed(myName, parent string, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams) *NeuCircle
- func (n *NeuCircle) Decorate(self mancini.Interactor, x, y, w, h int64)
- func (n *NeuCircle) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type NeumorphicStyle
- func NewNeumorphicStyle(heavy, light *mancini.NeuParams) *NeumorphicStyle
- func (s *NeumorphicStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)
- func (s *NeumorphicStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)
- func (s *NeumorphicStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
- func (s *NeumorphicStyle) Pad(weight mancini.Weight) float64
- func (s *NeumorphicStyle) TintOverlay(dc mancini.DrawContext, _ mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)
- type OutputFormat
- type Panel
- type RadialMenu
- func NewRadialMenu(layout *mancini.LayoutAttributes, theme mancini.Theme, outerR, innerR float64, faces []mancini.LatinTextFace, selected int) *RadialMenu
- func NewRadialMenuNamed(myName, parent string, theme mancini.Theme, outerR, innerR float64, faces []mancini.LatinTextFace, selected int) *RadialMenu
- func (m *RadialMenu) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type RadialNOfMChooser
- func NewRadialNOfMChooser(layout *mancini.LayoutAttributes, theme mancini.Theme, cx, cy, innerR, outerR, startDeg, endDeg float64, labels []string, fontSize int64, m int) *RadialNOfMChooser
- func NewRadialNOfMChooserNamed(myName, parent string, theme mancini.Theme, cx, cy, innerR, outerR, startDeg, endDeg float64, labels []string, fontSize int64, m int) *RadialNOfMChooser
- func (c *RadialNOfMChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (c *RadialNOfMChooser) ForceSelect(k int)
- func (c *RadialNOfMChooser) HitTestSegment(lx, ly float64) int
- func (c *RadialNOfMChooser) Hovered() int
- func (c *RadialNOfMChooser) IsSelected(k int) bool
- func (c *RadialNOfMChooser) NumSegments() int
- func (c *RadialNOfMChooser) Select(k int) int
- func (c *RadialNOfMChooser) Selected() []int
- func (c *RadialNOfMChooser) SetHovered(seg int) bool
- func (c *RadialNOfMChooser) TextToIndex() map[string]int
- func (c *RadialNOfMChooser) Unselect(k int) int
- type Row
- type RowFillLastChild
- func NewRowFillLastChild(myName, parent string, pal mancini.Palette, spacing int64) *RowFillLastChild
- func NewRowFillLastChildWithLayout(lh *mancini.LayoutAttributes, pal mancini.Palette, spacing int64) *RowFillLastChild
- func (r *RowFillLastChild) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (r *RowFillLastChild) FinishLayout()
- func (r *RowFillLastChild) SetSpacing(v float64)
- type RowPercentage
- type Scrollbar
- func NewScrollbar(layout *mancini.LayoutAttributes, theme mancini.Theme, isVertical bool, trackWidth, thumbFrac, thumbPos float64, showArrows bool) *Scrollbar
- func NewScrollbarNamed(myName, parent string, theme mancini.Theme, isVertical bool, length, trackWidth, thumbFrac, thumbPos float64, showArrows bool) *Scrollbar
- func (s *Scrollbar) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
- func (s *Scrollbar) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool
- func (s *Scrollbar) ClickDragStart(ev *mancini.InputEvent) bool
- func (s *Scrollbar) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- type ScrollbarStyle
- type Scroller
- func NewScroller(myName, parent string, pal mancini.Palette, width, height *attr.Attribute[int64], virtualY *attr.Attribute[int64]) *Scroller
- func (s *Scroller) DeleteChild(child mancini.Interactor)
- func (s *Scroller) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (s *Scroller) MarkContentDirty()
- func (s *Scroller) MaxScrollYURI() string
- func (s *Scroller) Pick(localX, localY int64) []mancini.Interactor
- func (s *Scroller) ScrollBy(dx, dy int64)
- func (s *Scroller) ScrollTo(vx, vy int64)
- func (s *Scroller) SetVirtualSize(vw, vh int64)
- type ScrollerVertical
- func NewScrollerVertical(myName, parent string, theme mancini.Theme, pal mancini.Palette, parentWidthURI, parentHeightURI string, trackWidth int64, style ScrollbarStyle) *ScrollerVertical
- func (sv *ScrollerVertical) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (sv *ScrollerVertical) ScrollerName() string
- func (sv *ScrollerVertical) ScrollerWidthURI() string
- type SingleLineText
- func NewSingleLineText(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *SingleLineText
- func NewSingleLineTextNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64, width int64) *SingleLineText
- func NewSingleLineTextWithLimit(myName, parent string, theme mancini.Theme, text string, fontSize int64, width int64, charLimit int) *SingleLineText
- func (t *SingleLineText) Alert()
- func (t *SingleLineText) AnimationFinish(localID uint64, endNanos int64)
- func (t *SingleLineText) AnimationStart(localID uint64, startNanos int64)
- func (t *SingleLineText) AnimationUpdate(localID uint64, startNanos, endNanos int64, coveredStart, coveredEnd float64, nanosSinceStart int64)
- func (t *SingleLineText) ClearAlert()
- func (t *SingleLineText) ClearSelection()
- func (t *SingleLineText) CursorMoveBackwardWord()
- func (t *SingleLineText) CursorMoveBeginningOfLine()
- func (t *SingleLineText) CursorMoveEndOfLine()
- func (t *SingleLineText) CursorMoveForwardWord()
- func (t *SingleLineText) CursorMoveLeftChar()
- func (t *SingleLineText) CursorMoveRightChar()
- func (t *SingleLineText) DeleteBackward()
- func (t *SingleLineText) DeleteBackwardWord()
- func (t *SingleLineText) DeleteForward()
- func (t *SingleLineText) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (t *SingleLineText) HasAlert() bool
- func (t *SingleLineText) HasSelection() bool
- func (t *SingleLineText) InsertAtCursor(ch rune)
- func (t *SingleLineText) KeyPress(ch rune, action string, ev *mancini.InputEvent) bool
- func (t *SingleLineText) NextWord() int
- func (t *SingleLineText) PreviousWord() int
- func (t *SingleLineText) SelectedText() string
- func (t *SingleLineText) SelectionAll()
- func (t *SingleLineText) SelectionExtendBackwardWord()
- func (t *SingleLineText) SelectionExtendForwardWord()
- func (t *SingleLineText) SelectionExtendLeftChar()
- func (t *SingleLineText) SelectionExtendRightChar()
- func (t *SingleLineText) SelectionExtendToBeginning()
- func (t *SingleLineText) SelectionExtendToEnd()
- func (t *SingleLineText) SelectionRange() (start, end int)
- func (t *SingleLineText) SetText(s string)
- func (t *SingleLineText) Text() string
- func (t *SingleLineText) TextLen() int64
- type Spacer
- type StripedTitleBar
- type SubtleStyle
- func NewSubtleStyle(delta int) *SubtleStyle
- func (s *SubtleStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)
- func (s *SubtleStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)
- func (s *SubtleStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
- func (s *SubtleStyle) Pad(weight mancini.Weight) float64
- func (s *SubtleStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)
- type ThrobberRadialChooser
- func NewThrobberRadialChooser(myName, parent string, theme mancini.Theme, pal mancini.Palette, rachelSID int, mainDC mancini.DrawContext, labels []string, initialSel int) *ThrobberRadialChooser
- func (trc *ThrobberRadialChooser) Click(ev *mancini.InputEvent) bool
- func (trc *ThrobberRadialChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (trc *ThrobberRadialChooser) HandleMouseMove(m wm.MouseMove, appScreenX, appScreenY int32) bool
- func (trc *ThrobberRadialChooser) HandleMouseRelease(m wm.MouseRelease, appScreenX, appScreenY int32) bool
- func (trc *ThrobberRadialChooser) HandleOverlayReady(m wm.OverlayReady)
- func (trc *ThrobberRadialChooser) HandleOverlayReleased(m wm.OverlayReleased)
- func (trc *ThrobberRadialChooser) HitTest(lx, ly int) bool
- func (trc *ThrobberRadialChooser) OverlayActive() bool
- func (trc *ThrobberRadialChooser) RequestOverlay()
- func (trc *ThrobberRadialChooser) Selected() int
- func (trc *ThrobberRadialChooser) SetMainDC(dc mancini.DrawContext)
- func (trc *ThrobberRadialChooser) Tick() bool
- type VSplitter
- func NewVSplitter(myName, parent string, pal mancini.Palette) *VSplitter
- func (vs *VSplitter) Click(ev *mancini.InputEvent) bool
- func (vs *VSplitter) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
- func (vs *VSplitter) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool
- func (vs *VSplitter) ClickDragStart(ev *mancini.InputEvent) bool
- func (vs *VSplitter) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (vs *VSplitter) HeightURI() string
- func (vs *VSplitter) SetFocusToSelf()
- type VerticalLine
- type WebInteractor
- func NewWebInteractor(myName, parent string, engine WebRenderEngine) *WebInteractor
- func NewWebInteractorWithLayout(myName string, lh *mancini.LayoutAttributes, engine WebRenderEngine) *WebInteractor
- func (w *WebInteractor) Draw(self mancini.Interactor, x, y, width, height int64, damage image.Rectangle)
- func (w *WebInteractor) Scroll(dy int64)
- func (w *WebInteractor) SetHTML(html []byte)
- type WebRenderEngine
- type WebScrollerVertical
- func NewWebScrollerVertical(myName, parent string, theme mancini.Theme, pal mancini.Palette, trackWidth int64, engine WebRenderEngine) *WebScrollerVertical
- func (wsv *WebScrollerVertical) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
- func (wsv *WebScrollerVertical) SetHTML(html []byte)
- func (wsv *WebScrollerVertical) WebInteractorName() string
Constants
DefaultMaxLineCount is the default maximum number of logical lines.
const DefaultMaxLineCount = 200
Variables
var ProgColumnHeight = &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: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 8, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x14},
{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: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, 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: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x68, Typ: 0x00, Op1: 46, Op2: 47, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 47, 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: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, 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: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 42, 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: 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: 40, 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: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, 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: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
{Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{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{
"_int64Prefix_",
"_xSuffix_",
"_ySuffix_",
"_widthSuffix_",
"_heightSuffix_",
"_boolPrefix_",
"_visSuffix_",
"_boundsHashSuffix_",
"_childPattern_",
"",
"_maxHeight_",
"_spacing_",
"_vPadding_",
"_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: "columnHeight", PC: 200, NumArgs: 0, NumLocals: 11, LocalBase: 40},
},
Entry: 12,
}
var ProgColumnLastChild = &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: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 8, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
{Opcode: 0x25, Typ: 0x01, 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: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, 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: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x68, Typ: 0x00, Op1: 46, Op2: 47, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 47, 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: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, 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: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 42, 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: 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: 45, 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: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, 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: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x69, 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_",
"",
"_maxHeight_",
"_spacing_",
"_vPadding_",
"_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: "columnLastChild", PC: 200, NumArgs: 0, NumLocals: 11, LocalBase: 40},
},
Entry: 12,
}
var ProgColumnWidth = &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: 0x81, Typ: 0x00, Op1: 7, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x14},
{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: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 40, 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: 40, 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: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, 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: 0x81, Typ: 0x00, Op1: 6, 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: 0x0},
{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: 0x68, Typ: 0x00, Op1: 44, Op2: 45, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, 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: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 43, 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: 46, Op2: 0, 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: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 43, 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_",
"",
"_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: "columnWidth", PC: 200, NumArgs: 0, NumLocals: 7, LocalBase: 40},
},
Entry: 12,
}
var ProgMinmaxColumnHeight = &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: 7, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 40, 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: 12, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 6, 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: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x68, Typ: 0x00, Op1: 45, Op2: 46, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 46, 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: 47, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, 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: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
{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: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
{Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, 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: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x80, Typ: 0x00, Op1: 2, Op2: 3, 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_",
"",
"_minH_",
"_maxH_",
"_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: "minMaxColumnHeight", PC: 200, NumArgs: 0, NumLocals: 9, LocalBase: 40},
},
Entry: 12,
}
var ProgRowFillLastChildWidth = &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: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, 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: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
{Opcode: 0x32, 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: 40, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
{Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x22, Typ: 0x01, Op1: 0, 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},
{Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
{Opcode: 0x32, 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: 40, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
{Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x22, Typ: 0x01, Op1: 0, 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},
{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: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x68, Typ: 0x00, Op1: 47, Op2: 48, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
{Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x35, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x6a, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 48, 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: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, 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: 46, 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: 46, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
{Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x22, Typ: 0x01, Op1: 0, 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: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x22, Typ: 0x01, Op1: 0, 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{
"_int64Prefix_",
"_xSuffix_",
"_ySuffix_",
"_widthSuffix_",
"_heightSuffix_",
"_boolPrefix_",
"_visSuffix_",
"_boundsHashSuffix_",
"_childPattern_",
"",
"_rowWidth_",
"_spacing_",
"_hPadding_",
"_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: "rowFillLastChildWidth", PC: 200, NumArgs: 0, NumLocals: 10, LocalBase: 40},
},
Entry: 12,
}
var ProgRowHeight = &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: 0x81, Typ: 0x00, Op1: 7, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1e},
{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: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 40, 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: 40, 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: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, 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: 0x81, Typ: 0x00, Op1: 6, 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: 0x0},
{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: 0x68, Typ: 0x00, Op1: 44, Op2: 45, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, 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: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 43, 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: 46, Op2: 0, 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: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 43, 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_",
"",
"_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: "rowHeight", PC: 200, NumArgs: 0, NumLocals: 7, LocalBase: 40},
},
Entry: 12,
}
var ProgRowLastChild = &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: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 8, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
{Opcode: 0x25, Typ: 0x01, 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: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, 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: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x68, Typ: 0x00, Op1: 46, Op2: 47, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 47, 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: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, 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: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 42, 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: 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: 45, 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: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, 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: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x69, 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_",
"",
"_maxWidth_",
"_spacing_",
"_hPadding_",
"_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: "rowLastChild", PC: 200, NumArgs: 0, NumLocals: 11, LocalBase: 40},
},
Entry: 12,
}
var ProgRowWidth = &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: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 8, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x14},
{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: 13, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, 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: 43, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x68, Typ: 0x00, Op1: 46, Op2: 47, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 47, 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: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, 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: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 42, 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: 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: 40, 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: 50, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 45, 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: 45, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
{Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
{Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
{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{
"_int64Prefix_",
"_xSuffix_",
"_ySuffix_",
"_widthSuffix_",
"_heightSuffix_",
"_boolPrefix_",
"_visSuffix_",
"_boundsHashSuffix_",
"_childPattern_",
"",
"_maxWidth_",
"_spacing_",
"_hPadding_",
"_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: "rowWidth", PC: 200, NumArgs: 0, NumLocals: 11, LocalBase: 40},
},
Entry: 12,
}
func ApplyDisabledCircleOverlay
func ApplyDisabledCircleOverlay(pal mancini.Palette, dc mancini.DrawContext, cx, cy, radius float64)
ApplyDisabledCircleOverlay draws a semi-transparent Surface-colored circle overlay to indicate a disabled circular control.
func ApplyDisabledOverlay
func ApplyDisabledOverlay(pal mancini.Palette, dc mancini.DrawContext, x1, y1, x2, y2, r float64)
ApplyDisabledOverlay draws a semi-transparent Surface-colored overlay over the given rectangle to indicate a disabled control. The opacity is determined by the palette’s DisabledAlpha (0.0–1.0).
func NeuBoxWith
func NeuBoxWith(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA, p *mancini.NeuParams)
NeuBoxWith draws a neumorphic rounded rectangle using explicit params. It is the central rendering function used by Button, Checkbox, CheckboxWithLabel, NeuBox, AppWindow, FreeFloatingWindow, SingleLineText, and NOfMChooser.
The depth parameter selects the shadow treatment ([mancini.Raised], [mancini.Flush], or [mancini.Inset]). If p is nil, a flat surface-colored rectangle is drawn (no shadows).
func NeuCacheStats
func NeuCacheStats() (int64, int64)
NeuCacheStats returns (hits, misses) since last reset.
func NeuCircleWith
func NeuCircleWith(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, cx, cy, rad float64, face color.NRGBA, p *mancini.NeuParams)
NeuCircleWith draws a neumorphic circle using explicit params. It is the rendering counterpart of NeuBoxWith for circular shapes, used by NeuCircle.
If p is nil, a flat surface-colored circle is drawn (no shadows).
func NeuGroove
func NeuGroove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
NeuGroove draws a thin horizontal inset line (groove separator). Used by FreeFloatingWindow for the title/content separator and available for custom interactor implementations.
func NewConsoleWithBox
func NewConsoleWithBox(myName, parent string, pal mancini.Palette, neuParams mancini.NeuParams, fonts *mancini.FontConfig, fontSize int64, cols, rows int) (*NeuBox, *Console)
NewConsoleWithBox creates a NeuBox (Heavy, Inset) containing a Console. Returns the NeuBox (add to parent layout) and the Console (use for content management). The NeuBox name is myName+“_box”.
func NewDefaultTheme
func NewDefaultTheme(family string, defaultSize int64, resolve mancini.FontResolver) mancini.Theme
NewDefaultTheme creates a Theme with the standard neumorphic purple palette.
func NewDefaultThemeColors
func NewDefaultThemeColors(fg, bg color.NRGBA, family string, defaultSize int64, resolve mancini.FontResolver) mancini.Theme
NewDefaultThemeColors creates a Theme with custom foreground and background colors. Shadow colors are derived from the defaults; only the surface and text colors are overridden.
func ResetDrawPerf
func ResetDrawPerf()
ResetDrawPerf zeroes all draw-performance counters in preparation for a new draw pass.
func ResetNeuCacheStats
func ResetNeuCacheStats()
ResetNeuCacheStats zeroes the hit/miss counters.
func ScrollerHeightURI
func ScrollerHeightURI(myName string) string
ScrollerHeightURI returns the URI for the scroller’s Height attribute. Useful for callers that need to build the constraint before creating the Scroller.
type AppWindow
AppWindow is the root application window — a thin, zero-inset decorator whose only job is to anchor the constraint tree at the well-known name “AppWindow”, propagate DrawContext to its child, clip child rendering to window bounds, and track focus state for rachel (the window manager).
AppWindow has no decoration of its own — window chrome (title bar, borders, shadows) is rachel’s responsibility. The single child is “the app”: whatever interactor tree the shepherd assembles.
Width and height are inside-out from the child, clamped to [10%, 90%] of screen dimensions via constraint programs.
There is one AppWindow per shepherd — its constraint name is always “AppWindow” so that rachel can locate it at a well-known attribute path.
See also FreeFloatingWindow for non-root floating panels.
type AppWindow struct {
impl.Decorator
// Pal is the palette used for rendering this window's contents.
Pal mancini.Palette
// Focused indicates whether the window currently has input focus.
Focused bool
Title string // informational — passed to rachel, not rendered here
// Input is the Henry-Hudson dispatch pipeline for this app.
// Nil until the app calls InitInput. Shepherd apps call
// app.Input.DispatchWM(msg) from their message loop.
Input *mancini.AppDispatcher
RachelSID int // set by the shepherd before calling RegisterAnimation
// NeuPrms holds neumorphic shading parameters retained for future use.
NeuPrms mancini.NeuParams
// Radius is the corner radius retained for future use.
Radius float64
// TitleDraw is a custom title-bar draw callback retained for future use.
TitleDraw func(dc mancini.DrawContext, focused bool, x, y, w, h float64)
// contains filtered or unexported fields
}
func NewAppWindow
func NewAppWindow(pal mancini.Palette, title string) *AppWindow
NewAppWindow creates an AppWindow with outside-in sizing. Width and Height are value attributes set by rachel via BackingStoreReady / WindowResized messages.
func (*AppWindow) AnnounceToWM
func (w *AppWindow) AnnounceToWM(x, y, width, height int32)
AnnounceToWM sends an AppStart message to rachel with the desired initial window position and size.
func (*AppWindow) AnnounceToWMWithPlacement
func (w *AppWindow) AnnounceToWMWithPlacement(x, y, width, height, placement int32)
AnnounceToWMWithPlacement sends an AppStart with an explicit placement hint.
func (*AppWindow) Decorate
func (w *AppWindow) Decorate(self mancini.Interactor, x, y, ww, hh int64)
Decorate implements mancini.Decoratable — no-op. Window chrome is rachel’s responsibility.
func (*AppWindow) DispatchAnimation
func (w *AppWindow) DispatchAnimation(wmMsg any) bool
DispatchAnimation routes an animation WM message to the registered Animatable interactor. Returns true if the message was handled.
func (*AppWindow) Draw
func (w *AppWindow) Draw(self mancini.Interactor, x, y, ww, hh int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Propagates DC to the child, clips child rendering to window bounds, and draws the child at the full window area (zero insets).
If the AppWindow’s DamageRect is smaller than its full bounds, drawing is clipped to the damaged region so unchanged pixels are not overwritten.
func (*AppWindow) Focus
func (w *AppWindow) Focus()
Focus sets the window to focused state.
func (*AppWindow) HandleBackingStoreReady
func (w *AppWindow) HandleBackingStoreReady(addr uintptr, length int)
HandleBackingStoreReady processes a new backing store address from rachel. Pops and releases (via Munmap) any stale entries from the backing store stack. If the new address matches the current top, no action is taken. Otherwise all non-matching entries are released and the new entry is pushed.
func (*AppWindow) InitInput
func (w *AppWindow) InitInput() (*mancini.AppDispatcher, *mancini.ClickAgent, *mancini.KeyAgent)
InitInput creates and returns the standard Henry-Hudson dispatch pipeline for this AppWindow. Call once during setup.
func (*AppWindow) PublishThemeAttributes
func (w *AppWindow) PublishThemeAttributes(theme mancini.Theme)
PublishThemeAttributes publishes theme geometry and font configuration as constraint attributes under the “Theme/” namespace. Call once during setup after creating the AppWindow.
func (*AppWindow) RegisterAnimation
func (w *AppWindow) RegisterAnimation(a mancini.Animatable, startNanos, endNanos int64) uint64
RegisterAnimation registers an Animatable for an animation and sends AnimationRegister to rachel. The local ID is sent as the Nonce field so rachel echoes it back. Returns the local animation ID.
func (*AppWindow) SendBlit
func (w *AppWindow) SendBlit()
SendBlit sends a Blit message to rachel reporting the app-area dimensions that were actually drawn. Rachel uses DrawnWidth/DrawnHeight to clip compositing during resize so undrawn pixels are not blitted.
func (*AppWindow) SetSize
func (w *AppWindow) SetSize(appW, appH int64)
SetSize updates the AppWindow’s layout Width and Height to the given app content dimensions. Called when rachel sends BackingStoreReady or WindowResized with new dimensions.
func (*AppWindow) Unfocus
func (w *AppWindow) Unfocus()
Unfocus sets the window to unfocused state.
func (*AppWindow) UnregisterAnimation
func (w *AppWindow) UnregisterAnimation(localID uint64)
UnregisterAnimation cancels an active animation by local ID. Sends AnimationUnregister to rachel, which responds with AnimationUnregistered. On receiving the response, DispatchAnimation calls AnimationFinish on the interactor and cleans up all bookkeeping.
type BackingStoreEntry
BackingStoreEntry tracks a shared backing store mapping so it can be released via Munmap when superseded by a newer backing store.
type BackingStoreEntry struct {
// Addr is the base address of the mapped backing store region.
Addr uintptr
// Len is the length in bytes of the mapped region.
Len int
}
type BoxesAndGlueInteractor
BoxesAndGlueInteractor is a leaf interactor that renders justified paragraphs using Knuth-Plass line breaking. It has outside-in sizing (width and height set by the parent via constraints).
type BoxesAndGlueInteractor struct {
impl.ThemedInteractor
// contains filtered or unexported fields
}
func NewBoxesAndGlueInteractor
func NewBoxesAndGlueInteractor(myName, parent string, theme mancini.Theme, fontSize int32) *BoxesAndGlueInteractor
NewBoxesAndGlueInteractor creates a BoxesAndGlueInteractor with outside-in sizing. The text page address and length constraint are configured via SetTextSource after construction.
func NewBoxesAndGlueInteractorWithLayout
func NewBoxesAndGlueInteractorWithLayout(myName string, lh *mancini.LayoutAttributes, theme mancini.Theme, fontSize int32) *BoxesAndGlueInteractor
NewBoxesAndGlueInteractorWithLayout creates a BoxesAndGlueInteractor with pre-built layout attributes (for constrained height, etc.).
func (*BoxesAndGlueInteractor) Draw
func (b *BoxesAndGlueInteractor) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Clears background, reads text from the shared page, runs layout if needed, and renders each glyph.
func (*BoxesAndGlueInteractor) SetFontFamily
func (b *BoxesAndGlueInteractor) SetFontFamily(family string)
ensureFont opens the font via DrawContext if not already done. SetFontFamily overrides the theme’s font family for this interactor.
func (*BoxesAndGlueInteractor) SetFontSize
func (b *BoxesAndGlueInteractor) SetFontSize(size int32)
SetFontSize changes the font size and forces re-layout on next Draw.
func (*BoxesAndGlueInteractor) SetLeading
func (b *BoxesAndGlueInteractor) SetLeading(px float64)
SetLeading sets the extra inter-line spacing in pixels (default 2).
func (*BoxesAndGlueInteractor) SetTextSource
func (b *BoxesAndGlueInteractor) SetTextSource(pageAddr uintptr, lenAttr *attr.Attribute[int64])
SetTextSource configures the shared page address and the eager length constraint. Call this once during setup.
type Button
Button is a neumorphic push-button interactor. It renders a rounded rectangle with shadows controlled by Depth, and optional face content (text, icon, etc.) drawn by the Face callback.
Button embeds [impl.ThemedInteractor] for layout wiring, theme access, and the backpointer pattern. Rendering is delegated to NeuBoxWith, which handles all three depth states ([mancini.Raised], [mancini.Flush], [mancini.Inset]). When the theme’s [mancini.NeumorphicParams.Light] returns nil, the button falls back to a flat filled rectangle.
Depth Transitions
Callers toggle Depth on mouse-down/up to animate press feedback. Use [mancini.NeuDepth.MouseDown] for the standard transition: Raised→Inset on press, Inset→Flush on release.
Construction
Use NewButton with a pre-built [mancini.LayoutAttributes], or NewButtonNamed for automatic layout creation from name+parent strings. Both pass the Button itself as the backpointer via [impl.ThemedInteractor.Init].
type Button struct {
impl.ThemedInteractor
Depth mancini.NeuDepth // visual state: Raised, Flush, or Inset
Radius float64 // corner radius in pixels (default 8.0)
Face mancini.Face // optional content drawn on top of the button face
Disabled bool // when true, renders dimmed and ignores input
}
func NewButton
func NewButton(layout *mancini.LayoutAttributes, theme mancini.Theme, depth mancini.NeuDepth) *Button
NewButton creates a Button wired to the constraint system and theme. layout must already be created (e.g., via [mancini.NewLayoutAttributes]).
func NewButtonNamed
func NewButtonNamed(myName, parent string, theme mancini.Theme, depth mancini.NeuDepth, width, height int64) *Button
NewButtonNamed creates a Button with layout built from name + parent strings. Width and height are published as intrinsic dimensions so the constraint system can bootstrap. If myName is empty, a unique name is generated via [mancini.DefaultName].
func (*Button) Draw
func (b *Button) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements [mancini.NewDrawer]. It renders a neumorphic rounded rectangle via NeuBoxWith at the given bounds, filled with the [mancini.Palette]’s Surface color and decorated with shadows according to Depth. If Face is non-nil, it is called to draw content (text, icon, etc.) on top of the box.
type Checkbox
Checkbox is a neumorphic toggle interactor. When unchecked it renders as [mancini.Inset] (a recessed square); when checked it renders as [mancini.Raised] with a checkmark drawn on the face.
Checkbox embeds [impl.ThemedInteractor] and delegates rendering to NeuBoxWith. When the theme’s [mancini.NeumorphicParams.Light] returns nil, the checkbox falls back to flat rendering.
Toggling is done externally by setting Checked and redrawing — Checkbox does not handle input events directly.
See also CheckboxWithLabel, which pairs a Checkbox with a text Label.
type Checkbox struct {
impl.ThemedInteractor
Checked bool // true = raised with checkmark, false = inset
Size float64 // side length of the square box in pixels
Disabled bool // when true, renders dimmed and ignores input
}
func NewCheckbox
func NewCheckbox(layout *mancini.LayoutAttributes, theme mancini.Theme, size float64, checked bool) *Checkbox
NewCheckbox creates a Checkbox wired to the constraint system and theme. layout must already be created (e.g. via mancini.NewLayoutAttributes).
func NewCheckboxNamed
func NewCheckboxNamed(myName, parent string, theme mancini.Theme, size float64, checked bool) *Checkbox
NewCheckboxNamed creates a Checkbox with layout built from name + parent strings. Width and height are both set to size (the checkbox is square) so the constraint system can bootstrap.
func (*Checkbox) Draw
func (c *Checkbox) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements [mancini.NewDrawer]. It renders a neumorphic square box centered within the given bounds. Unchecked = [mancini.Inset], Checked = [mancini.Raised] with a proportional checkmark.
type CheckboxWithLabel
CheckboxWithLabel combines a neumorphic Checkbox with a label drawn via a [mancini.Face]. The checkbox is rendered identically to Checkbox ([mancini.Inset] when unchecked, [mancini.Raised] + checkmark when checked), and the label is positioned on the specified Side with a configurable Gap.
CheckboxWithLabel embeds [impl.ThemedInteractor] and renders both the checkbox and label in a single Draw call. It handles nil [mancini.NeuParams] by falling back to flat rendering for the checkbox portion.
type CheckboxWithLabel struct {
impl.ThemedInteractor
// Checked indicates whether the checkbox is currently checked.
Checked bool
// Side specifies which side of the checkbox the label is drawn on.
Side LabelSide
CheckSize float64 // side length of the checkbox square
Gap float64 // space between checkbox and label
Label mancini.Face // draws the label content (may be nil)
LabelW float64 // width of the label area
LabelH float64 // height of the label area
Disabled bool // when true, renders dimmed and ignores input
}
func NewCheckboxWithLabel
func NewCheckboxWithLabel(layout *mancini.LayoutAttributes, theme mancini.Theme, checkSize float64, checked bool, side LabelSide, gap float64, label mancini.Face, labelW, labelH float64) *CheckboxWithLabel
NewCheckboxWithLabel creates a CheckboxWithLabel wired to the constraint system and theme. layout must already be created.
func NewCheckboxWithLabelNamed
func NewCheckboxWithLabelNamed(myName, parent string, theme mancini.Theme, checkSize float64, checked bool, side LabelSide, gap float64, label mancini.Face, labelW, labelH float64) *CheckboxWithLabel
NewCheckboxWithLabelNamed creates a CheckboxWithLabel with layout built from name + parent strings. Total width and height are computed from Side, CheckSize, Gap, and label dimensions, and published so the constraint system can bootstrap.
func (*CheckboxWithLabel) Draw
func (c *CheckboxWithLabel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. It renders a neumorphic checkbox (Inset when unchecked, Raised + checkmark when checked) and a label positioned according to Side.
type Clock
Clock is a leaf interactor that draws an analog clock face. The [mancini.ClockFace] controls visual appearance and timezone. Clock handles layout, time conversion from UTC, and delegates rendering to the active face.
Clock embeds [impl.Interactor] directly (not [impl.ThemedInteractor]) because it receives its [mancini.Palette] and [mancini.FontConfig] explicitly rather than from a [mancini.Theme].
Clock implements [mancini.Clickable] to cycle through normal faces (Classic, Roman, Movado, Digit) and [mancini.DoubleClickable] to cycle through weird faces (Metric, Polar).
Clock is typically wrapped in a NeuCircle decorator for neumorphic circular shadows.
type Clock struct {
impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
// Pal is the palette used by the active face for rendering.
Pal mancini.Palette
// Fonts is the font configuration passed to the active face.
Fonts *mancini.FontConfig
Size int64 // preferred side length (logical pixels)
Face mancini.ClockFace // current active face
UTCFunc func() (sec, nanos int64) // returns current UTC time
FaceNameAttr *attr.Attribute[string] // constraint attribute for current face name
// Two face groups: single click cycles normal, double click cycles weird.
NormalFaces []mancini.ClockFace
WeirdFaces []mancini.ClockFace
// Layout attributes for face name label and spacer visibility toggling.
// Set after construction by the caller (they're sibling interactors).
FaceLabelLayout *mancini.LayoutAttributes
FaceSpacerLayout *mancini.LayoutAttributes
// contains filtered or unexported fields
}
func NewClock
func NewClock(myName, parent string, pal mancini.Palette, fonts *mancini.FontConfig, size int64, utcFunc func() (int64, int64), normalFaces, weirdFaces []mancini.ClockFace) *Clock
NewClock creates a Clock wired to the constraint system. parent is the constraint name of the wrapping NeuCircle (or other parent). normalFaces are cycled by single click; weirdFaces by double click.
func (*Clock) Click
func (c *Clock) Click(ev *mancini.InputEvent) bool
Click implements mancini.Clickable — cycles through normal faces (Classic, Roman, Movado, Digit).
func (*Clock) DetailedHit
func (c *Clock) DetailedHit(localX, localY int64) bool
DetailedHit returns true if (localX, localY) is inside the clock’s circular face.
func (*Clock) DoubleClick
func (c *Clock) DoubleClick(ev *mancini.InputEvent) bool
DoubleClick implements mancini.DoubleClickable — cycles through weird faces (Metric, Polar).
func (*Clock) Draw
func (c *Clock) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer.
type Column
Column arranges children vertically with inside-out sizing. Width and Height are constraint-computed from children’s published dimensions. Children declare this Column as their parent by naming it in their [mancini.LayoutAttributes]’ Parent field.
Column embeds [impl.Interactor] + [impl.Parent]. It does not embed [impl.ThemedInteractor] because containers do not need theme access for their own rendering. Children are discovered via the constraint network at draw time (see [impl.Parent.GetChildren]).
Layout Behavior
Children are arranged top-to-bottom with configurable spacing. Cross-axis (horizontal) alignment is controlled by CrossAlign ([mancini.AxisMinimum], [mancini.AxisMiddle], [mancini.AxisMaximum]). Children that overflow MaxHeight are either clipped (ClipChildOverflow) or skipped entirely.
See also Row for horizontal layout and ColumnOutsideIn for a column with clamped height.
type Column struct {
impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
impl.Parent // GetChildren() via constraint network
// Pal is the palette used for the optional background fill.
Pal mancini.Palette
// CrossAlign controls horizontal alignment of children within the column.
CrossAlign mancini.Alignment
// MaxHeight is the maximum column height in pixels (0 means unbounded).
MaxHeight int64
VPadding int64 // vertical padding applied at top and bottom edges
HPadding int64 // horizontal padding applied at left and right edges
ClipChildOverflow bool // true: clip last partial child; false: skip it
PaintBg bool // true: fill background with Pal.Surface() before children
}
func NewColumn
func NewColumn(myName, parent string, pal mancini.Palette, maxHeight int64, crossAlign mancini.Alignment, vPadding, hPadding int64, clipOverflow bool) *Column
NewColumn creates a Column wired to the constraint system. Children are not passed here — they declare this Column as their parent via their own InitLayout(parentName) call, and are discovered at draw time via the constraint network.
func NewColumnWithLayout
func NewColumnWithLayout(lh *mancini.LayoutAttributes, pal mancini.Palette, crossAlign mancini.Alignment, hPadding, vPadding int64, clipOverflow bool) *Column
NewColumnWithLayout creates a Column using a pre-built LayoutAttributes. Used when the caller provides bridge/custom layout (e.g., as AppWindow’s direct child with inout-bridge constraints on Width/Height). The caller is responsible for setting Width, Height, and Bounds on lh.
func (*Column) Draw
func (c *Column) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Arranges children top-to-bottom with spacing, cross-axis alignment, and overflow clipping. If PaintBg is true and Pal is set, the column fills its background with the theme’s Surface color before drawing children.
func (*Column) SetSpacing
func (c *Column) SetSpacing(v float64)
SetSpacing sets the inter-child spacing value (in pixels).
type ColumnOutsideIn
ColumnOutsideIn arranges children vertically with outside-in layout. Unlike Column (pure inside-out sizing), ColumnOutsideIn clamps its height between minH and maxH. Within that range it grows with the sum of children’s heights + 1px spacing. Children that overflow the available height are hidden by setting their Visible layout attribute to false.
ColumnOutsideIn embeds [impl.Interactor] + [impl.Parent]. Width is constraint-computed as the max of children’s published widths.
See also Column for unclamped inside-out vertical layout.
type ColumnOutsideIn struct {
impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
impl.Parent // GetChildren() via constraint network
// BgColor is the background fill color drawn beneath children.
BgColor color.NRGBA
}
func NewColumnOutsideIn
func NewColumnOutsideIn(myName, parent string, bgColor color.NRGBA, minH, maxH int64) *ColumnOutsideIn
NewColumnOutsideIn creates a ColumnOutsideIn wired to the constraint system. minH and maxH clamp the height constraint; within that range height equals sum(children heights) + (n-1) px spacing.
func (*ColumnOutsideIn) Draw
func (c *ColumnOutsideIn) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Fills background, lays out children top-to-bottom with 1px spacing, and hides any that overflow.
type ColumnPercentage
ColumnPercentage arranges children vertically, giving each child a fraction of the parent’s height according to a percentage sequence. Children are centered horizontally.
Percentage normalization:
- If percentages sum to more than 100, they are proportionally reduced. Any percentage that reaches zero in this process is discarded.
- If percentages sum to less than 100, the remainder is added to the last percentage.
Child count vs percentage count:
- Extra children (more children than percentages) are hidden via their Visible layout attribute.
- Fewer children than percentages: all remaining percentage values are assigned to the last child.
type ColumnPercentage struct {
impl.Interactor
impl.Parent
// Pal is the palette retained for child rendering decisions.
Pal mancini.Palette
HPadding int64 // horizontal padding applied at left and right edges
Percents []float64 // percentage of height for each child position
}
func NewColumnPercentage
func NewColumnPercentage(myName, parent string, pal mancini.Palette, w, h int64, percents []float64) *ColumnPercentage
NewColumnPercentage creates a ColumnPercentage with the given percentage sequence. Percentages are normalized on construction (see type doc). Width and height are set as value attributes from the given dimensions.
func (*ColumnPercentage) Draw
func (cp *ColumnPercentage) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw positions children vertically according to the percentage sequence. Each child is centered horizontally and given a height proportional to its percentage of the parent’s total height.
type Console
Console is a terminal-like display of monospaced text lines. It arranges consoleLine children vertically edge-to-edge, computes line count from font metrics and allocated height, and provides AddLine / HandleByte methods for terminal-style content management.
Console publishes LineHeight, CharsPerLine, and NumLines as constraint attributes for observability and future dynamic resizing.
Usage: create a NeuBox (Heavy, Inset) and make Console its child:
box, console := std.NewConsoleWithBox("AppWindow", pal, neuParams, fonts, 16, 120, 20)
type Console struct {
impl.Interactor
// contains filtered or unexported fields
}
func NewConsole
func NewConsole(myName, parent string, pal mancini.Palette, fonts *mancini.FontConfig, fontSize int64, cols, rows int) *Console
NewConsole creates a Console wired to the constraint system. It probes the font to compute charWidth and lineHeight, creates layout attributes with pixel dimensions (cols * charW, rows * lineH), and publishes LineHeight, CharsPerLine, NumLines as constraint attributes.
Console’s parent in the constraint network should be a NeuBox name. Use NewConsoleWithBox for a convenience constructor that creates both the NeuBox and Console.
func (*Console) AddLine
func (c *Console) AddLine(text string, fg color.NRGBA)
AddLine appends a complete line with the given text and color.
func (*Console) Draw
func (c *Console) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Fills the console background and draws each consoleLine child at the correct Y position. The most recent content lines are shown (auto-scroll to bottom).
func (*Console) HandleByte
func (c *Console) HandleByte(b byte, fd byte)
HandleByte processes a single byte of terminal input, handling newlines, ANSI escape filtering, fd-change line breaks, and line length clamping.
func (*Console) StderrColor
func (c *Console) StderrColor() color.NRGBA
StderrColor returns the ANSI red color from the palette for stderr text.
type ConsoleLabel
ConsoleLabel is a left-aligned monospaced text label with a per-instance background color and dynamic text color. Designed for console output lines where stdout and stderr need different colors.
ConsoleLabel embeds [impl.ThemedInteractor] for font resolution but does NOT use the theme’s background color — BgColor is set per-instance. Draw does not call [impl.ThemedInteractor.Draw] (no super call) because the background fill uses BgColor, not the palette.
ConsoleLabel includes hash-based caching: if the text and BoundsHash are unchanged from the previous frame, the draw is skipped entirely.
Compare with Label for a centered, themed text display.
type ConsoleLabel struct {
impl.ThemedInteractor
// FontSize is the monospaced font size in pixels.
FontSize int64
BgColor color.NRGBA // per-instance background
TextFunc func() string // dynamic text source
ColorFunc func() color.NRGBA // dynamic text color (stdout vs stderr)
MaxCols int // max characters per line
// contains filtered or unexported fields
}
func NewConsoleLabel
func NewConsoleLabel(myName, parent string, theme mancini.Theme, fontSize int64, bgColor color.NRGBA, maxCols int) *ConsoleLabel
NewConsoleLabel creates a ConsoleLabel wired to the constraint system. Width is probed from the theme’s monospaced font: charW * maxCols + 8. Height is fontSize (1px inter-line spacing is in the parent column).
func (*ConsoleLabel) Draw
func (l *ConsoleLabel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Fills BgColor background, then renders left-aligned text via LatinTextFace using ColorFunc for the text color.
type CornerRadialChooser
CornerRadialChooser is a pulsing circle that opens a radial overlay menu on click. It packages the throbber animation, overlay lifecycle, and radial menu into a single self-contained interactor.
The chooser publishes a ValueAttr — an int64 attribute whose value corresponds to the selected segment. Applications provide both labels and values at construction time. When the user selects segment i, ValueAttr is set to values[i]. Other interactors can bind to ValueURI() to react to changes via the constraint network.
type CornerRadialChooser struct {
impl.Interactor
// OnSelect is called when the user selects a segment.
// The argument is the segment index.
OnSelect func(int)
// ValueAttr is the published attribute holding the currently
// selected value. Other interactors can bind to ValueURI().
ValueAttr *attr.Attribute[int64]
// FocusParent is the interactor that owns this chooser. When
// clicked, it calls FocusParent.SetFocusToSelf() to claim focus.
FocusParent mancini.FocusClaimer
// contains filtered or unexported fields
}
func NewCornerRadialChooser
func NewCornerRadialChooser(myName, parent string, theme mancini.Theme, pal mancini.Palette, rachelSID int, labels []string, values []int64, initialSel int) *CornerRadialChooser
NewCornerRadialChooser creates a CornerRadialChooser. labels are the segment texts and values are the corresponding int64 values published to ValueAttr when a segment is selected. initialSel is the initially selected segment index. rachelSID is rachel’s shepherd ID for overlay IPC.
func (*CornerRadialChooser) ClickDragEnd
func (crc *CornerRadialChooser) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
ClickDragEnd implements mancini.ClickDraggable. Selects the segment under the cursor (if any) and dismisses the overlay.
func (*CornerRadialChooser) ClickDragMove
func (crc *CornerRadialChooser) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool) bool
ClickDragMove implements mancini.ClickDraggable. Highlights the segment under the cursor as the user drags over the overlay.
func (*CornerRadialChooser) ClickDragStart
func (crc *CornerRadialChooser) ClickDragStart(ev *mancini.InputEvent) bool
ClickDragStart implements mancini.ClickDraggable. Opens the overlay immediately on press so the user can drag to a segment.
func (*CornerRadialChooser) Draw
func (crc *CornerRadialChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw renders the throbber as a pulsing filled circle. It also captures the drawn position and DC for overlay use.
func (*CornerRadialChooser) HandleOverlayReady
func (crc *CornerRadialChooser) HandleOverlayReady(m wm.OverlayReady)
HandleOverlayReady processes the OverlayReady message from rachel.
func (*CornerRadialChooser) HandleOverlayReleased
func (crc *CornerRadialChooser) HandleOverlayReleased(m wm.OverlayReleased)
HandleOverlayReleased cleans up overlay state.
func (*CornerRadialChooser) HitTest
func (crc *CornerRadialChooser) HitTest(lx, ly int) bool
HitTest returns true if (lx, ly) in app-local coordinates is within the chooser’s bounds (with 10px padding for easy clicking).
func (*CornerRadialChooser) OverlayActive
func (crc *CornerRadialChooser) OverlayActive() bool
OverlayActive returns true if an overlay is currently allocated.
func (*CornerRadialChooser) RequestOverlay
func (crc *CornerRadialChooser) RequestOverlay()
RequestOverlay sends an OverlayAllocate to rachel. If an overlay is already active, dismisses it instead.
func (*CornerRadialChooser) Selected
func (crc *CornerRadialChooser) Selected() int
Selected returns the currently selected segment index, or -1.
func (*CornerRadialChooser) SetAppScreenPos
func (crc *CornerRadialChooser) SetAppScreenPos(x, y int32)
SetAppScreenPos updates the app’s screen origin. Call this after BackingStoreReady and on WindowMoved events.
func (*CornerRadialChooser) SetScreenSize
func (crc *CornerRadialChooser) SetScreenSize(w, h int32)
SetScreenSize sets the screen dimensions so the chooser can detect edge proximity and fan in the appropriate direction.
func (*CornerRadialChooser) Tick
func (crc *CornerRadialChooser) Tick() bool
Tick advances the throbber by one 10Hz step.
func (*CornerRadialChooser) ValueURI
func (crc *CornerRadialChooser) ValueURI() string
ValueURI returns the URI of the published value attribute, for use in constraint bindings.
type Divider
Divider is a column-boundary resize handle drawn in the bezel strips above and below a GridFrame. Each bezel shows a thin vertical track line at the column boundary and a small rounded-rectangle pill (capsule) centred in the bezel. Three horizontal grip lines inside the pill hint at draggability.
The pill colour is Pal.Mid() at rest and Pal.Accent() while dragging.
Dividers implement [mancini.DetailedHit] for pill-shaped pick regions and [mancini.ClickDraggable] for drag-to-resize behaviour. Both top and bottom markers move together since they share the same split position.
type Divider struct {
impl.Interactor
// Pal is the palette used to colour the track, pill, and grip lines.
Pal mancini.Palette
ColIndex int // which column boundary (0 = after col 0, etc.)
// Overhang is the height of the bezel area above and below the
// parent grid where the marker is drawn.
Overhang int64
// TriHeight is the height in pixels of each pill capsule.
TriHeight int64
// TriHalfW is half the hit-test width in pixels for grabbing the pill.
TriHalfW int64
// Dangle is reserved geometry padding currently unused by Draw.
Dangle int64
// MinPct is the minimum percentage this divider's column may take.
// MaxPct is a static upper bound; OtherSplitAttr provides a dynamic
// upper bound that prevents the two dividers from crossing.
MinPct, MaxPct int64
// DragInverted reverses the drag direction. Use true for a divider
// that controls the column to its RIGHT (e.g. the Date column): when
// the user drags right the right column narrows, so its percentage
// must decrease rather than increase.
DragInverted bool
// SplitAttr is the writable column-percentage attribute this divider
// controls. Exported so GridFrame can cross-link paired dividers.
SplitAttr *attr.Attribute[int64]
// OtherSplitAttr, when set, is the paired divider's SplitAttr. Used
// during drag to compute a dynamic upper bound that keeps the flex
// column at least MinFlexPct wide and prevents the dividers from
// crossing visually.
OtherSplitAttr *attr.Attribute[int64]
// MinFlexPct is the minimum percentage left for the flex column when
// both dividers are constrained against each other. Defaults to 5.
MinFlexPct int64
// RawXAttr is a value attribute set by the parent GridFrame each draw
// cycle with the unclamped pixel X of this divider's left edge (splitX - hw).
// Used as the source for the X constraint program so other attrs can
// subscribe without creating a cycle through the constrained lh.X.
RawXAttr *attr.Attribute[int64]
// RightXAttr is a value attribute updated by the parent GridFrame every
// draw cycle with the raw pixel X of this divider's right marker edge
// (splitX + hw). Set from the unclamped position so the paired divider's
// floor constraint reads a stable value independent of clamping.
RightXAttr *attr.Attribute[int64]
// OnDamage is called after every drag event. GridFrame sets this to
// damage all DynamicLabel leaf cells, expanding the blit region to
// the full grid width so the revealed column area is sent to the display.
OnDamage func()
// ParentXAttr and ParentWidthAttr are value attributes set by GridFrame
// each draw cycle. Exposed as attrs so ScaleI64-based constraints can
// read them reactively (e.g. RawXAttr = pct * parentWidth / 100 + parentX - hw).
ParentXAttr *attr.Attribute[int64]
ParentWidthAttr *attr.Attribute[int64]
// contains filtered or unexported fields
}
func NewDivider
func NewDivider(myName, parent string, pal mancini.Palette, colIndex int, splitAttr *attr.Attribute[int64]) *Divider
NewDivider creates a Divider for the column boundary at colIndex. splitAttr is the attribute holding the column’s percentage — the divider reads and writes this attribute during drag operations.
func (*Divider) ClickDragEnd
func (d *Divider) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
ClickDragEnd implements mancini.ClickDraggable.
func (*Divider) ClickDragMove
func (d *Divider) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool) bool
ClickDragMove implements mancini.ClickDraggable.
The handle’s absolute pixel position (dragStartSplitX + mouse delta) is the input; the column percentage is derived from that position and parentWidth. This avoids accumulated integer-rounding drift from the delta-percentage approach.
func (*Divider) ClickDragStart
func (d *Divider) ClickDragStart(ev *mancini.InputEvent) bool
ClickDragStart implements mancini.ClickDraggable.
func (*Divider) DetailedHit
func (d *Divider) DetailedHit(localX, localY int64) bool
DetailedHit implements mancini.DetailedHit. Returns true if the point falls inside either capsule pill. The hit area uses TriHalfW (wider than the 5px visual half-width) for easy grabbing.
func (*Divider) Draw
func (d *Divider) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw renders the two bezel markers. Each marker is a thin vertical track line spanning the full bezel height, with a small rounded-rectangle pill centred in the bezel. Three horizontal grip lines inside the pill hint at draggability. Pill colour is Pal.Mid() at rest and Pal.Accent() when dragging.
func (*Divider) SetupPositionConstraints
func (d *Divider) SetupPositionConstraints()
SetupPositionConstraints wires RawXAttr and RightXAttr as ScaleI64-based constraints so the divider’s pixel position reacts to both SplitAttr (percentage) and ParentXAttr / ParentWidthAttr (grid geometry) without any imperative position computation in GridFrame.Draw.
Non-inverted (left): rawX = pct * parentW / 100 + parentX - hw
Inverted (right): rawX = parentX + parentW - pct * parentW / 100 - hw
Call this once from NewGridFrame after all dividers are created, before SetupXConstraint (which references RawXAttr.URI()).
func (*Divider) SetupXConstraint
func (d *Divider) SetupXConstraint(other *Divider)
SetupXConstraint replaces the divider’s layout X value attribute with a constraint that prevents this divider from visually overlapping other.
For a non-inverted (left) divider: X = min(rawX, other.RawX − (2*hw+1)). This ensures this divider’s right edge stays strictly left of other’s left edge.
For an inverted (right) divider: X = max(rawX, other.RightX). This ensures this divider never moves left of other’s right edge.
Both constraints read only VALUE attributes from other (RawXAttr / RightXAttr), so there is no circular dependency between the two constraints. Call this once from the parent after both dividers exist.
type DrawPerfStats
DrawPerfStats accumulates timing data during a draw pass. All times in nanoseconds. Call ResetDrawPerf before a draw, then PrintDrawPerf after.
type DrawPerfStats struct {
AllocNs atomic.Int64 // image.NewRGBA / NewNRGBA / NewAlpha
// AllocCount counts how many image buffers were allocated.
AllocCount atomic.Int64
// AllocBytes is the total bytes of image buffers allocated.
AllocBytes atomic.Int64
GGDrawNs atomic.Int64 // gg context create + rasterize + fill
// GGCount counts how many gg context draw calls were made.
GGCount atomic.Int64
ConvertNs atomic.Int64 // rgbaToNRGBA
BlurNs atomic.Int64 // gaussianBlurNRGBA
// BlurCount counts the number of Gaussian-blur invocations.
BlurCount atomic.Int64
ComposeNs atomic.Int64 // draw.Draw compositing
FaceNs atomic.Int64 // dc.DrawRoundedRect/Circle + Fill (face)
// Tree-level timing
AppDecorateNs atomic.Int64 // AppWindow.DecorateIfNeeded
AppClipNs atomic.Int64 // WithClip + Flush
AppChildNs atomic.Int64 // child.Draw inside AppWindow
RowChildNs [8]atomic.Int64 // per-child draw time in Row (up to 8)
// RowChildCount is the number of children seen by Row this pass.
RowChildCount atomic.Int64
ColChildNs atomic.Int64 // total Column child draw time
NeuDecorNs atomic.Int64 // NeuCircle.DecorateIfNeeded
NeuChildNs atomic.Int64 // NeuCircle child draw (Clock)
ClockFaceNs atomic.Int64 // Clock.DrawFace
LabelNs atomic.Int64 // Label.Draw total
// LabelCount counts how many Label draws occurred this pass.
LabelCount atomic.Int64
}
func GetDrawPerf
func GetDrawPerf() *DrawPerfStats
GetDrawPerf returns a pointer to the package-level DrawPerfStats accumulator for inspection.
type DynamicLabel
DynamicLabel is a label whose font size is driven by an attribute. When the font size attribute changes (e.g., from a CornerRadialChooser’s ValueAttr), the label rebuilds its text face and updates its height automatically.
Create a DynamicLabel with NewDynamicLabel or NewDynamicLabelBold, passing the URI of the font size source. The label creates an identity constraint binding to that URI so it reacts to changes through the constraint network.
type DynamicLabel struct {
impl.ThemedInteractor
// Text is the displayed text content.
Text string
// Color is the foreground colour used to render the text.
Color color.NRGBA
// Bold selects the bold font variant when true.
Bold bool
// Transparent disables the themed background fill so the parent shows through.
Transparent bool
// contains filtered or unexported fields
}
func NewDynamicLabel
func NewDynamicLabel(myName, parent string, theme mancini.Theme, text string, fontSizeURI string) *DynamicLabel
NewDynamicLabel creates a DynamicLabel whose font size is bound to fontSizeURI via an identity constraint. The label is left-aligned and transparent (parent paints background).
func NewDynamicLabelBold
func NewDynamicLabelBold(myName, parent string, theme mancini.Theme, text string, fontSizeURI string) *DynamicLabel
NewDynamicLabelBold creates a bold DynamicLabel.
func (*DynamicLabel) Draw
func (dl *DynamicLabel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Checks for font size changes, then renders text.
func (*DynamicLabel) SetAlign
func (dl *DynamicLabel) SetAlign(align mancini.TextAlignmentParams)
SetAlign replaces the label’s text alignment.
func (*DynamicLabel) SetPaddingAttrs
func (dl *DynamicLabel) SetPaddingAttrs(padXURI, padYURI string)
SetPaddingAttrs binds the label’s X and Y interior padding to the given attribute URIs via identity constraints, making padding constrainable from any source in the constraint network. Empty URI leaves that axis unchanged.
type FlatStyle
FlatStyle implements [mancini.SurfaceStyle] with no directional lighting at all. All borders are uniform weight on all four sides.
Raised: face brightened by delta, thin uniform border. Flush: fill Surface, thin uniform border. Inset: face darkened by delta, thin uniform border.
type FlatStyle struct {
// contains filtered or unexported fields
}
func NewFlatStyle
func NewFlatStyle(delta int, borderWidth float64) *FlatStyle
NewFlatStyle creates a FlatStyle. delta controls brightness shift for Raised/Inset. borderWidth sets the uniform border stroke width.
func (*FlatStyle) DrawBox
func (s *FlatStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)
func (*FlatStyle) DrawCircle
func (s *FlatStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)
func (*FlatStyle) Groove
func (s *FlatStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
func (*FlatStyle) Pad
func (s *FlatStyle) Pad(weight mancini.Weight) float64
func (*FlatStyle) TintOverlay
func (s *FlatStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)
type FourteenSeg
FourteenSeg is a 14-segment LED display interactor. It renders a string of characters using the classic 14-segment geometry (like vintage LED calculator/scoreboard displays). Each character uses a 14-bit mask to select which segments are lit.
Width and Height are computed from the character count and segment cell size. FourteenSeg does not paint a background — the parent is expected to handle that.
type FourteenSeg struct {
impl.Interactor
// contains filtered or unexported fields
}
func NewFourteenSeg
func NewFourteenSeg(myName, parent string, text string, cellW, cellH float64, onColor color.NRGBA) *FourteenSeg
NewFourteenSeg creates a 14-segment display showing the given text. cellW and cellH control the size of each character cell.
func NewFourteenSegValue
func NewFourteenSegValue(myName, parent string, text string, cellW, cellH float64, onColor color.NRGBA) (*FourteenSeg, *attr.Attribute[string])
NewFourteenSegValue creates a 14-segment display with its text backed by a string constraint attribute. The display updates when the attribute changes.
func (*FourteenSeg) Draw
func (s *FourteenSeg) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw renders the 14-segment display. No background is painted.
func (*FourteenSeg) SetOnColor
func (s *FourteenSeg) SetOnColor(c color.NRGBA)
SetOnColor changes the lit segment color.
func (*FourteenSeg) SetText
func (s *FourteenSeg) SetText(text string)
SetText updates the displayed text.
type FreeFloatingWindow
FreeFloatingWindow is a neumorphic floating panel drawn as a sibling of AppWindow (not a child). It is always [mancini.Flush] depth when visible. Structurally it is an [impl.Decorator]: NeuBoxWith shadow → title + NeuGroove separator → content.
Visibility is toggled externally (e.g., by the focus state of an associated AppWindow or by constraint programs).
See also AppWindow for the root application window.
type FreeFloatingWindow struct {
impl.Decorator
// Pal is the palette used for the panel surface, title, and groove.
Pal mancini.Palette
// NeuPrms holds neumorphic shading parameters for the panel.
NeuPrms mancini.NeuParams
// Style is the surface style used to render the panel and groove.
Style mancini.SurfaceStyle
// Title is the text rendered in the title bar at the top of the panel.
Title string
// Radius is the corner radius of the panel rectangle in pixels.
Radius float64
// Visible controls whether Draw renders the window contents.
Visible bool
// contains filtered or unexported fields
}
func NewFreeFloatingWindow
func NewFreeFloatingWindow(name string, parent mancini.Interactor, pal mancini.Palette, neuParams mancini.NeuParams, fonts *mancini.FontConfig, title string, radius float64) *FreeFloatingWindow
NewFreeFloatingWindow creates a FreeFloatingWindow with inside-out sizing. parent is nil for top-level floaters. The window is initially not visible.
func (*FreeFloatingWindow) Decorate
func (w *FreeFloatingWindow) Decorate(self mancini.Interactor, x, y, ww, hh int64)
Decorate implements mancini.Decoratable — draws the NeuBox shadow, title text, and groove separator.
func (*FreeFloatingWindow) Draw
func (w *FreeFloatingWindow) Draw(self mancini.Interactor, x, y, ww, hh int64, damage image.Rectangle)
Draw implements mancini.NewDrawer.
type GradientTitleBar
GradientTitleBar renders an animated horizontal gradient title bar into an off-screen buffer. A background goroutine recomputes the buffer at ~15 fps and notifies the attribute system so the event loop redraws.
The gradient has a symmetric peak ([mancini.Palette.SurfaceTint]) that oscillates horizontally at 0.05 Hz — one full left→right→left sweep in 20 seconds. On each side of the peak the color fades linearly to [mancini.Palette.Surface] at the edge.
When inactive, plain centered text is drawn (no gradient animation).
See also StripedTitleBar for a static Mac OS-style pinstripe title bar.
type GradientTitleBar struct {
// contains filtered or unexported fields
}
func NewGradientTitleBar
func NewGradientTitleBar(pal mancini.Palette, fonts *mancini.FontConfig, title string, fontSize int64, radius float64) *GradientTitleBar
NewGradientTitleBar creates a GradientTitleBar. The font face is resolved once at creation time. The animation goroutine launches on the first active Draw when the title bar dimensions are known.
func (*GradientTitleBar) DrawTitleBar
func (g *GradientTitleBar) DrawTitleBar(dc mancini.DrawContext, title string, state mancini.WindowState, _ mancini.WindowType, x, y, w, h float64)
DrawTitleBar implements mancini.TitleBar.
func (*GradientTitleBar) Start
func (g *GradientTitleBar) Start(w, h int)
Start launches the animation goroutine for a title bar of size w×h. Safe to call multiple times — only the first call starts the goroutine.
type GridFrame
GridFrame is a simple parent interactor that wraps a GridTable together with its visual chrome: side-padded margin, raised NeuBox, and column- boundary Divider markers. The frame’s height spans the full area including the Divider overhang strips above and below the content, so Dividers live within normal child bounds — no clip escaping needed.
Draw order is strictly: grid subtree first (content area only), then Dividers last so they always appear on top of the grid content.
Column widths are controlled by the same split-attribute mechanism as GridTable. Drag a Divider marker to resize columns.
type GridFrame struct {
impl.Interactor
impl.Parent
// Pal is the palette used for chrome, bezel strips, and dividers.
Pal mancini.Palette
// Overhang is the height in pixels of the bezel strips above and below the grid content.
Overhang int64
// contains filtered or unexported fields
}
func NewGridFrame
func NewGridFrame(myName, parent string, pal mancini.Palette, theme mancini.Theme, overhang int64, fontSizeURI string, headers []string, percents []float64, splitURIs []string, splitSrcAttrs []*attr.Attribute[int64]) *GridFrame
NewGridFrame creates a fully-wired grid frame. myName is the GridFrame itself; internal names are myName+“_margin”, myName+“_box”, myName+“_tbl”, and myName+“_divN”.
overhang is the height in pixels of the bezel area above and below the grid content where Divider triangle markers are drawn.
splitSrcAttrs are the writable value attributes the Dividers write during drag operations. They must correspond 1-to-1 with the non-flex entries in splitURIs (same order, skipping any -1 flex columns).
func (*GridFrame) AddRow
func (gf *GridFrame) AddRow(row GridRow) func()
AddRow appends a data row to the embedded GridTable. Returns a func() that damages this row’s leaf labels — use it as the row’s OnLoaded callback to trigger a redraw when async data arrives.
func (*GridFrame) DamageAll
func (gf *GridFrame) DamageAll()
DamageAll marks every label in the grid as needing repaint. Call this after batch-adding rows to force the first full draw.
func (*GridFrame) Draw
func (gf *GridFrame) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw renders the frame. Grid subtree is drawn first in the content area (y+Overhang to y+h-Overhang). Bezel strips are cleared to Surface color. Dividers are drawn last so they appear on top of everything.
func (*GridFrame) FirstVisibleMsgNumAttr
func (gf *GridFrame) FirstVisibleMsgNumAttr() *attr.Attribute[int64]
FirstVisibleMsgNumAttr returns the attribute holding the first visible msgNum.
func (*GridFrame) LastVisibleMsgNumAttr
func (gf *GridFrame) LastVisibleMsgNumAttr() *attr.Attribute[int64]
LastVisibleMsgNumAttr returns the attribute holding the last visible msgNum.
func (*GridFrame) MoveSelection
func (gf *GridFrame) MoveSelection(delta int64)
MoveSelection moves the primary selection by delta rows, scrolling to keep it visible.
func (*GridFrame) RefreshSelected
func (gf *GridFrame) RefreshSelected()
RefreshSelected re-publishes the selected row’s current MsgNum and the full selected set. Call this after ShiftMsgNum is applied to any selected row.
func (*GridFrame) ScrollBy
func (gf *GridFrame) ScrollBy(delta int64)
ScrollBy moves the virtual scroll offset by delta rows.
func (*GridFrame) SelectedAttr
func (gf *GridFrame) SelectedAttr() *attr.Attribute[int64]
SelectedAttr returns the attribute that holds the msgNum of the primary selected row (-1 = none). Constrain any viewer component to this URI.
func (*GridFrame) SelectedSetAttr
func (gf *GridFrame) SelectedSetAttr() *attr.Attribute[[]int64]
SelectedSetAttr returns the attribute holding the full multi-selection set as []int64 msgNums. Sentinel: math.MaxInt64 when count > 256.
func (*GridFrame) SelectedSetCountAttr
func (gf *GridFrame) SelectedSetCountAttr() *attr.Attribute[int64]
SelectedSetCountAttr returns the attribute holding the true count of selected rows (regardless of whether the sentinel is active).
func (*GridFrame) SelectedSetPagesAttr
func (gf *GridFrame) SelectedSetPagesAttr() *attr.Attribute[int64]
SelectedSetPagesAttr returns the attribute holding ceil(count/512): the number of 4096-byte pages needed to transfer the full selection via IPC.
func (*GridFrame) SetRowFactory
func (gf *GridFrame) SetRowFactory(f func() GridRow)
SetRowFactory enables virtual scroll mode with the given row factory.
func (*GridFrame) SetTotalRows
func (gf *GridFrame) SetTotalRows(n int64)
SetTotalRows sets the total collection size for scroll clamping.
func (*GridFrame) VisibleRowCountAttr
func (gf *GridFrame) VisibleRowCountAttr() *attr.Attribute[int64]
VisibleRowCountAttr returns the attribute holding the visible row count.
type GridRow
GridRow is the interface that each row’s data must satisfy. The grid table calls these methods to populate column labels.
type GridRow interface {
// Sender returns the text for the sender column.
Sender() string
// Subject returns the text for the subject column.
Subject() string
// Date returns the text for the date column.
Date() string
// MsgNum returns the row's stable identifier used for selection tracking.
MsgNum() uint32
}
type GridTable
GridTable is a multi-column table built on ColumnPercentage. It stacks a header RowPercentage and data RowPercentage children vertically, each distributing width according to constraint-driven column percentages.
Column widths are specified by split URIs — each URI points to an int64 attribute holding a column’s percentage of the total width. Exactly one column may be designated as “flex” (absorbs the remainder). The grid reads split values every frame, so column proportions update automatically when the underlying attributes change.
Font size is driven by an attribute URI (typically from a CornerRadialChooser). All labels are DynamicLabel instances that react to font size changes via the constraint network.
Use NewGridFrame for a complete grid with Divider markers and a NeuBox wrapper. Use NewGridTable directly only when embedding the table without the frame chrome.
type GridTable struct {
ColumnPercentage // structural embedding for Interactor + Parent
// Theme is the theme used to style header and data labels.
Theme mancini.Theme
SelectedAttr *attr.Attribute[int64] // msgNum of primary selected row (-1 = none)
SelectedSetAttr *attr.Attribute[[]int64] // collection of all selected msgNums (sentinel: [MaxInt64] if >256)
SelectedSetCountAttr *attr.Attribute[int64] // true count of selected rows (regardless of sentinel)
SelectedSetPagesAttr *attr.Attribute[int64] // ceil(count/512): pages needed for full IPC transfer
// Published attrs — exposed to the constraint network. Scroll
// containers (GridFrame's scrollbar) and viewers can bind to these.
// Total/Visible/RowHeight together let consumers compute their own
// derivatives (e.g. scrollNeeded = TotalRows > VisibleRowCount).
TotalRowsAttr *attr.Attribute[int64] // collection size; written by SetTotalRows
ScrollOffsetAttr *attr.Attribute[int64] // current scroll position in rows; read on draw, mutated by scrollbar
RowHeightAttr *attr.Attribute[int64] // current row height in pixels; refreshed each Draw
FirstVisibleMsgNumAttr *attr.Attribute[int64]
LastVisibleMsgNumAttr *attr.Attribute[int64]
VisibleRowCountAttr *attr.Attribute[int64]
// PadXAttr and PadYAttr drive the interior padding (in pixels) of every
// label cell. Other parts of the constraint network may swap these to
// constraint outputs to animate or theme label padding.
PadXAttr *attr.Attribute[int64]
PadYAttr *attr.Attribute[int64]
// contains filtered or unexported fields
}
func NewGridTable
func NewGridTable(myName, parent string, pal mancini.Palette, theme mancini.Theme, fontSizeURI string, headers []string, percents []float64, splitURIs []string) *GridTable
NewGridTable creates a grid table with the given column headers and constraint-driven column percentages. Each entry in percents is either a positive float64 (fixed percentage) paired with a URI in splitURIs, or -1 (flex column, absorbs remainder — no URI needed).
splitURIs contains one URI string per non-flex column, in order. Each URI must point to an int64 attribute holding the column’s percentage of the total width.
fontSizeURI should point to an int64 attribute. All labels bind their font size to this URI.
For a grid with Divider column-resize markers and a NeuBox wrapper, use NewGridFrame instead.
func (*GridTable) AddRow
func (gt *GridTable) AddRow(row GridRow) func()
AddRow appends a data row to the grid. Returns a func() that calls FullDamage on this row’s DynamicLabel leaves, propagating through the constraint chain to trigger a redraw. Use it as the row’s OnLoaded callback. (RowPercentage.FullDamage is a no-op — it is a parent with a constraint-based DamageRect, not a settable leaf.)
Labels are pre-positioned at the expected row Y so that FullDamage() immediately produces a damage rect in the correct grid area. Without this, labels sit at Y=0 and PushDamageClip clips draws to the wrong region. RowPercentage.Draw refines the exact column X positions on the next pass.
func (*GridTable) DamageAll
func (gt *GridTable) DamageAll()
DamageAll calls FullDamage on every DynamicLabel leaf in the grid (header and all data rows). Use this after dynamically adding rows to trigger a full grid repaint — parent interactors like RowPercentage have constraint- based DamageRect, so their FullDamage is a no-op; labels are the leaves.
func (*GridTable) Draw
func (gt *GridTable) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw stacks the header row and data rows vertically with fixed row heights, drawing alternating backgrounds and a separator line. Column percentages are read from the split constraint attrs each frame.
func (*GridTable) MoveSelection
func (gt *GridTable) MoveSelection(delta int64)
MoveSelection moves the primary selection by delta rows (clamped to [0, TotalRows-1]). If nothing is currently selected, the first visible row is used as the starting point. Scrolls to keep the new selection within the visible window.
func (*GridTable) RefreshSelected
func (gt *GridTable) RefreshSelected()
RefreshSelected re-publishes the selected msgNum to SelectedAttr.
func (*GridTable) ScrollBy
func (gt *GridTable) ScrollBy(delta int64)
ScrollBy moves the scroll offset by delta rows (clamped). Updates all slot msgNums and publishes the visibility attrs.
func (*GridTable) SetRowFactory
func (gt *GridTable) SetRowFactory(f func() GridRow)
SetRowFactory sets the factory used to create virtual slot data objects and switches the grid into virtual scroll mode. A pool rebuild is deferred to the next Draw call when visibleCount is known.
func (*GridTable) SetTotalRows
func (gt *GridTable) SetTotalRows(n int64)
SetTotalRows sets the total collection size used for scroll clamping. Updates both the cached field (for hot-path reads in Draw) and the published TotalRowsAttr that scroll containers bind to via the constraint network.
type HexDisplay
HexDisplay is a parent interactor that arranges a row of FourteenSeg children, one per character. It fills the available width from its parent, dynamically adjusting the number of digit positions when the width changes (e.g. on window resize).
HexDisplay embeds [impl.Interactor] + [impl.Parent] so it participates in the interactor tree and the constraint network discovers its FourteenSeg children automatically.
type HexDisplay struct {
impl.Interactor
impl.Parent
Format OutputFormat // controls Display() number formatting
HPadding float64 // horizontal padding inset for background fill
// contains filtered or unexported fields
}
func NewHexDisplay
func NewHexDisplay(myName, parent, widthSource string, cellW, cellH float64, onColor, bgColor color.NRGBA) *HexDisplay
NewHexDisplay creates a hex display whose width is constrained to equal widthSource’s width. The number of FourteenSeg digit children is computed dynamically from the resolved width so they fill the display without clipping the last character. widthSource is the constraint-system name of a sibling whose width this display should match (e.g. “btn_row”). cellW and cellH control each character cell size. bgColor is painted as the background behind all digits.
func (*HexDisplay) Display
func (hd *HexDisplay) Display(x int)
Display shows the value x on the 14-segment display using the current OutputFormat. Characters are loaded right-to-left; if the formatted string is longer than the available digit positions, leading characters are discarded. Unused leading positions show dim segments.
func (*HexDisplay) Draw
func (hd *HexDisplay) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw paints the background and arranges FourteenSeg children left-to-right. If the width has changed since the last draw, the digit children are rebuilt to match the new available space.
func (*HexDisplay) NumDigits
func (hd *HexDisplay) NumDigits() int
NumDigits returns the number of digit positions in this display.
func (*HexDisplay) SetText
func (hd *HexDisplay) SetText(text string)
SetText updates all digit children to show new text (right-aligned). If the new text is shorter than the display, leading positions show space. If longer, leading characters are truncated.
type Label
Label is a single-line text display interactor (not editable — see SingleLineText for an editable text field). It renders centered text using the [mancini.Theme]’s font family.
Label embeds [impl.ThemedInteractor]. Its Draw method calls the super [impl.ThemedInteractor.Draw] to clear the background, then renders the text.
Text can be static (set via Text field) or dynamic (set via TextFunc, which takes precedence). Multiple constructor variants handle bold, custom color, and named-layout creation.
type Label struct {
impl.ThemedInteractor
Text string // static text (used when TextFunc is nil)
TextFunc func() string // dynamic text source (takes precedence)
// FontSize is the text size in pixels.
FontSize int64
// Color is the foreground colour used to render the text.
Color color.NRGBA
// Bold selects the bold font variant when true.
Bold bool
Transparent bool // skip background fill (parent paints background)
// contains filtered or unexported fields
}
func NewLabel
func NewLabel(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *Label
NewLabel creates a Label wired to the constraint system and theme.
func NewLabelBold
func NewLabelBold(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *Label
NewLabelBold creates a bold Label.
func NewLabelColor
func NewLabelColor(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64, col color.NRGBA) *Label
NewLabelColor creates a Label with a custom text color.
func NewLabelNamed
func NewLabelNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64) *Label
NewLabelNamed creates a Label with layout built from name + parent strings. Publishes intrinsic dimensions (fontSize+4 height, text-measured width) so constraint programs can bootstrap.
func NewLabelNamedBold
func NewLabelNamedBold(myName, parent string, theme mancini.Theme, text string, fontSize int64) *Label
NewLabelNamedBold creates a bold Label with layout from name + parent.
func NewLabelNamedColor
func NewLabelNamedColor(myName, parent string, theme mancini.Theme, text string, fontSize int64, col color.NRGBA) *Label
NewLabelNamedColor creates a colored Label with layout from name + parent.
func (*Label) Draw
func (l *Label) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Clears background via super, then renders centered text via LatinTextFace.
func (*Label) SetAlign
func (l *Label) SetAlign(align mancini.TextAlignmentParams)
SetAlign replaces the label’s text face with one using the given alignment.
type LabelSide
LabelSide specifies which side of the checkbox the label is drawn on.
type LabelSide int
const (
LabelTop LabelSide = iota // label above checkbox
LabelRight // label to the right of checkbox
LabelBottom // label below checkbox
LabelLeft // label to the left of checkbox
)
type LightScrollbar
LightScrollbar is a minimalist scrollbar with a narrow profile. It draws everything itself: a Surface track with a flush groove border, two diagonal X-pattern lines on the face, and a rotating dark-purple thumb line. All rendering uses Fill (no Stroke calls).
The cross-axis dimension is fixed at [lightScrollbarThick] (10 pixels). There are no arrow buttons. Clicking anywhere on the track jumps the thumb to that position; dragging moves it.
type LightScrollbar struct {
impl.ThemedInteractor
IsVertical bool // true = vertical, false = horizontal
ThumbFrac float64 // visible fraction 0..1 (kept for Scrollbar API compat)
ThumbPos float64 // thumb position 0..1 along available travel
ThumbAngle float64 // thumb rotation in radians (0 = vertical for horiz sb)
Disabled bool // when true, renders dimmed and ignores input
// Value/Max: when set, ThumbPos and ThumbFrac are computed from
// these in Draw. Value is the current scroll position (pixels),
// Max is the maximum scroll range. Value is the source of truth —
// the scroller's VirtualY is constrained to it.
ValueAttr *attr.Attribute[int64]
MaxAttr *attr.Attribute[int64]
// contains filtered or unexported fields
}
func NewLightScrollbar
func NewLightScrollbar(layout *mancini.LayoutAttributes, theme mancini.Theme, isVertical bool, thumbFrac, thumbPos float64) *LightScrollbar
NewLightScrollbar creates a LightScrollbar wired to the constraint system.
func NewLightScrollbarNamed
func NewLightScrollbarNamed(myName, parent string, theme mancini.Theme, isVertical bool, length, thumbFrac, thumbPos float64) *LightScrollbar
NewLightScrollbarNamed creates a LightScrollbar with layout built from name + parent strings. length is the main-axis dimension.
func (*LightScrollbar) ClickDragEnd
func (s *LightScrollbar) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
ClickDragEnd implements mancini.ClickDraggable.
func (*LightScrollbar) ClickDragMove
func (s *LightScrollbar) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool
ClickDragMove implements mancini.ClickDraggable.
func (*LightScrollbar) ClickDragStart
func (s *LightScrollbar) ClickDragStart(ev *mancini.InputEvent) bool
ClickDragStart implements mancini.ClickDraggable.
func (*LightScrollbar) Draw
func (s *LightScrollbar) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Renders track, groove border, X-pattern face lines, and rotating thumb — all using Fill.
type MarginParent
MarginParent is a single-child container that enforces independent margins on each side around its child. It can optionally draw a rounded-rectangle border inside the margin area and a centered label in the top margin that interrupts the border.
Width and Height can be value attributes (set by parent) or constrained.
type MarginParent struct {
impl.Interactor
impl.Parent
Top, Right, Bottom, Left int64 // margins in pixels
// BorderWidth draws a rounded-rectangle border inside the margin.
// Must be ≤ all four margins. 0 = no border.
BorderWidth int64
// Label is drawn centered in the top margin using the theme's
// default sans font at 75% of Top margin height. Empty = no label.
Label string
// contains filtered or unexported fields
}
func NewMarginParent
func NewMarginParent(myName, parent string, top, right, bottom, left int64, borderWidth int64, label string, theme mancini.Theme, pal mancini.Palette) *MarginParent
NewMarginParent creates a MarginParent with independent margins. Width and Height are value attributes (set by parent container). label may be empty for no label text.
func NewMarginParentConstrained
func NewMarginParentConstrained(myName, parent string, top, right, bottom, left int64, borderWidth int64, label string, width, height *attr.Attribute[int64], theme mancini.Theme, pal mancini.Palette) *MarginParent
NewMarginParentConstrained creates a MarginParent where Width and Height are provided by the caller as pre-built constraint attributes. label may be empty for no label text.
func (*MarginParent) ControlsInteractor
func (mp *MarginParent) ControlsInteractor() mancini.Interactor
ControlsInteractor returns the interactor to draw in the top-right margin area. The default implementation returns nil (no controls). Subclasses that embed *MarginParent can override this by defining their own ControlsInteractor method on the concrete type; the Draw method resolves the override through the self parameter.
func (*MarginParent) Draw
func (mp *MarginParent) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Draws the optional border and label, then positions and draws the single child inside the margins. If self implements ControlsInteractor() returning non-nil, the controls interactor is positioned in the top margin and the border draws a hump around it.
type MotifStyle
MotifStyle implements [mancini.SurfaceStyle] with hard-edged square bevels inspired by the Motif/CDE look. No blur, no anti-aliasing on bevel edges. The radius parameter is ignored — all geometry is square.
Raised: LightShadow top+left, DarkShadow bottom+right. Flush: uniform DarkShadow border. Inset: DarkShadow top+left, LightShadow bottom+right. Face shifts to Accent.
type MotifStyle struct {
// contains filtered or unexported fields
}
func NewMotifStyle
func NewMotifStyle(bevelWidth float64) *MotifStyle
NewMotifStyle creates a MotifStyle. bevelWidth controls the thickness of the hard-edged bevel lines.
func (*MotifStyle) DrawBox
func (s *MotifStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, _ float64, face color.NRGBA)
DrawBox renders a rectangular surface with hard-edged Motif bevels for the given [mancini.NeuDepth]. The radius parameter is ignored.
func (*MotifStyle) DrawCircle
func (s *MotifStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)
DrawCircle renders a filled circle with a uniform Motif-style border. Motif doesn’t have a natural circular bevel; the depth only affects the fill color.
func (*MotifStyle) Groove
func (s *MotifStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
Groove draws a horizontal Motif-style groove (dark line above light line) from x1 to x2 at height y.
func (*MotifStyle) Pad
func (s *MotifStyle) Pad(weight mancini.Weight) float64
Pad returns the recommended interior padding in pixels for surfaces of the given weight.
func (*MotifStyle) TintOverlay
func (s *MotifStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, _ float64, face color.NRGBA)
TintOverlay draws a translucent face-colored rectangle on top of an existing surface to apply a hover/focus tint.
type MultiLineText
MultiLineText is a multi-line text editor interactor. It uses a gap buffer internally for fast cursor-local edits. Text is accessed directly via MultiLineText.Text rather than through the constraint system.
The interactor publishes several attributes for scrollbar integration:
- LineCount (int64): total display lines after soft-wrap
- CursorLine (int64): display line containing the cursor
- CursorCol (int64): rune column of the cursor within its display line
- TopLine (int64): first visible display line (settable by scrollbar)
- MaxLineCount (int64): maximum logical lines allowed
It implements [mancini.KeyPressable], [mancini.Clickable], [mancini.DoubleClickable], [mancini.TripleClickable], and [mancini.ClickDraggable].
type MultiLineText struct {
impl.ThemedInteractor
// FontSize is the rendered font size in pixels.
FontSize int64
// Radius is the corner radius for the editor's background rectangle.
Radius float64
// Padding is the interior pixel padding between border and text.
Padding float64
// BorderWidth is the pixel width of the editor border.
BorderWidth float64
// Focused controls cursor rendering: only a focused editor draws a caret.
Focused bool
// TextColor overrides the palette's BaseText() when non-zero.
TextColor color.NRGBA
BgColor *color.NRGBA // if non-nil, overrides pal.Base() for background
// Disabled disables keyboard and mouse input handling.
Disabled bool
// AppWindow is required for animation-driven alerts.
AppWindow *AppWindow
AfterEdit func() // optional; called after each text modification
// Mu guards the gap buffer for concurrent access. The main goroutine
// (keyboard handler, draw) and any background reader (e.g., markdown
// render goroutine) must hold Mu while accessing the gap buffer.
Mu sync.Mutex
// contains filtered or unexported fields
}
func NewMultiLineText
func NewMultiLineText(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *MultiLineText
NewMultiLineText creates a MultiLineText wired to the constraint system.
func NewMultiLineTextNamed
func NewMultiLineTextNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64, width, height int64) *MultiLineText
NewMultiLineTextNamed creates a MultiLineText with layout built from name + parent.
func (*MultiLineText) Alert
func (m *MultiLineText) Alert()
Alert flashes a highlight border.
func (*MultiLineText) AnimationFinish
func (m *MultiLineText) AnimationFinish(localID uint64, endNanos int64)
AnimationFinish implements [mancini.Animatable]; clears the alert state.
func (*MultiLineText) AnimationStart
func (m *MultiLineText) AnimationStart(localID uint64, startNanos int64)
AnimationStart implements [mancini.Animatable]; no-op for the alert fade.
func (*MultiLineText) AnimationUpdate
func (m *MultiLineText) AnimationUpdate(localID uint64, startNanos, endNanos int64, coveredStart, coveredEnd float64, nanosSinceStart int64)
AnimationUpdate implements [mancini.Animatable]; fades the alert border alpha.
func (*MultiLineText) ClearAlert
func (m *MultiLineText) ClearAlert()
ClearAlert removes the alert border.
func (*MultiLineText) ClearSelection
func (m *MultiLineText) ClearSelection()
ClearSelection removes the selection without moving the cursor.
func (*MultiLineText) Click
func (m *MultiLineText) Click(ev *mancini.InputEvent) bool
Click implements mancini.Clickable — positions cursor at click location.
func (*MultiLineText) ClickDragEnd
func (m *MultiLineText) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool)
ClickDragEnd implements mancini.ClickDraggable — finalizes drag selection.
func (*MultiLineText) ClickDragMove
func (m *MultiLineText) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool)
ClickDragMove implements mancini.ClickDraggable — extends drag selection.
func (*MultiLineText) ClickDragStart
func (m *MultiLineText) ClickDragStart(ev *mancini.InputEvent) bool
ClickDragStart implements mancini.ClickDraggable — begins drag selection.
func (*MultiLineText) CursorDocEnd
func (m *MultiLineText) CursorDocEnd(extend bool)
CursorDocEnd moves cursor to end of document.
func (*MultiLineText) CursorDocStart
func (m *MultiLineText) CursorDocStart(extend bool)
CursorDocStart moves cursor to beginning of document.
func (*MultiLineText) CursorDown
func (m *MultiLineText) CursorDown(extend bool)
CursorDown moves cursor one display line down, preserving sticky column.
func (*MultiLineText) CursorEnd
func (m *MultiLineText) CursorEnd(extend bool)
CursorEnd moves cursor to end of current display line.
func (*MultiLineText) CursorHome
func (m *MultiLineText) CursorHome(extend bool)
CursorHome moves cursor to beginning of current display line.
func (*MultiLineText) CursorLeft
func (m *MultiLineText) CursorLeft(extend bool)
CursorLeft moves cursor one rune left.
func (*MultiLineText) CursorRight
func (m *MultiLineText) CursorRight(extend bool)
CursorRight moves cursor one rune right.
func (*MultiLineText) CursorUp
func (m *MultiLineText) CursorUp(extend bool)
CursorUp moves cursor one display line up, preserving sticky column.
func (*MultiLineText) CursorWordLeft
func (m *MultiLineText) CursorWordLeft(extend bool)
CursorWordLeft moves cursor to previous word boundary.
func (*MultiLineText) CursorWordRight
func (m *MultiLineText) CursorWordRight(extend bool)
CursorWordRight moves cursor to next word boundary.
func (*MultiLineText) DeleteBackward
func (m *MultiLineText) DeleteBackward()
DeleteBackward deletes one rune before the cursor.
func (*MultiLineText) DeleteBackwardWord
func (m *MultiLineText) DeleteBackwardWord()
DeleteBackwardWord deletes from cursor back to previous word boundary.
func (*MultiLineText) DeleteForward
func (m *MultiLineText) DeleteForward()
DeleteForward deletes one rune after the cursor.
func (*MultiLineText) DoubleClick
func (m *MultiLineText) DoubleClick(ev *mancini.InputEvent) bool
DoubleClick implements mancini.DoubleClickable — selects word at click.
func (*MultiLineText) Draw
func (m *MultiLineText) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Renders the multi-line text field: inset background, visible text lines, selection highlight, and cursor.
func (*MultiLineText) HasAlert
func (m *MultiLineText) HasAlert() bool
HasAlert returns true if the interactor is showing an alert border.
func (*MultiLineText) HasSelection
func (m *MultiLineText) HasSelection() bool
HasSelection returns true if text is selected.
func (*MultiLineText) InsertRune
func (m *MultiLineText) InsertRune(ch rune)
InsertRune inserts a rune at the cursor, respecting max line count.
func (*MultiLineText) InsertString
func (m *MultiLineText) InsertString(s string)
InsertString inserts a string at the cursor.
func (*MultiLineText) KeyPress
func (m *MultiLineText) KeyPress(ch rune, action string, ev *mancini.InputEvent) bool
KeyPress implements mancini.KeyPressable.
func (*MultiLineText) SelectAll
func (m *MultiLineText) SelectAll()
SelectAll selects all text.
func (*MultiLineText) SelectedText
func (m *MultiLineText) SelectedText() string
SelectedText returns the currently selected text.
func (*MultiLineText) SelectionRange
func (m *MultiLineText) SelectionRange() (start, end int)
SelectionRange returns the ordered byte range of the selection.
func (*MultiLineText) SetFocused
func (m *MultiLineText) SetFocused(v bool)
SetFocused sets the Focused flag, which controls cursor rendering.
func (*MultiLineText) SetText
func (m *MultiLineText) SetText(s string)
SetText replaces the entire text content, resets cursor to end, and rebuilds.
func (*MultiLineText) Text
func (m *MultiLineText) Text() string
Text returns the current text content directly from the gap buffer.
func (*MultiLineText) TripleClick
func (m *MultiLineText) TripleClick(ev *mancini.InputEvent) bool
TripleClick implements mancini.TripleClickable — selects logical line.
func (*MultiLineText) WriteTo
func (m *MultiLineText) WriteTo(w io.Writer) (int64, error)
WriteTo writes the editor’s content into w via the gap buffer, with no intermediate string allocation.
type NOfMChooser
NOfMChooser is a strip-based N-of-M multi-select interactor. It displays N vertical strips side by side, each with a flat top edge and rounded bottom corners. Any combination of strips can be selected. Selected strips receive a purple tint overlay and inset shadows matching the neumorphic [mancini.Inset] treatment.
NOfMChooser embeds [impl.ThemedInteractor] and uses Light-weight [mancini.NeuParams]. When nil, only the filled shape and face content are drawn — no flush edge, grooves, or selection effects.
Each strip can have a [mancini.LatinTextFace] for text content. See also RadialNOfMChooser for an arc-shaped variant and RadialMenu for a full-circle single-select menu.
type NOfMChooser struct {
impl.ThemedInteractor
StripW float64 // width of each strip
StripH float64 // height of each strip
Faces []mancini.LatinTextFace // text content for each strip (nil entries OK)
Selected []bool // which strips are selected
CornerR float64 // corner radius for rounded bottom (default 8.0)
Disabled bool // when true, renders dimmed and ignores input
}
func NewNOfMChooser
func NewNOfMChooser(layout *mancini.LayoutAttributes, theme mancini.Theme, stripW, stripH float64, faces []mancini.LatinTextFace, selected []bool) *NOfMChooser
NewNOfMChooser creates an NOfMChooser wired to the constraint system and theme. layout must already be created (e.g. via mancini.NewLayoutAttributes).
func NewNOfMChooserNamed
func NewNOfMChooserNamed(myName, parent string, theme mancini.Theme, stripW, stripH float64, faces []mancini.LatinTextFace, selected []bool) *NOfMChooser
NewNOfMChooserNamed creates an NOfMChooser with layout built from name + parent strings. Width is set to len(faces)*stripW and height to stripH so the constraint system can bootstrap.
func (*NOfMChooser) Draw
func (c *NOfMChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. It renders the strip chooser: an overall shape with flat top and rounded bottom, flush edge outlines, vertical groove separators between strips, selected-strip tint+inset treatment, and per-strip face content.
type NeuBox
NeuBox is a single-child [impl.Decorator] that draws rectangular neumorphic shadows around its child. It overrides [impl.Decorator.Decorate] to render shadows via NeuBoxWith instead of the default thick black box.
NeuBox computes its margin from [mancini.NeuMaxPad] to ensure shadows have room to render without clipping. The child is positioned inside the margin at (x+Left, y+Top).
See also NeuCircle for circular neumorphic decoration, and AppWindow / FreeFloatingWindow for window-level decorators that add title bars.
type NeuBox struct {
impl.Decorator
// Pal is the [mancini.Palette] used for shadow and surface colors.
Pal mancini.Palette
// Depth controls whether the box appears Raised, Flush, or Inset.
Depth mancini.NeuDepth
// Weight selects the shadow strength (Light/Medium/Heavy).
Weight mancini.Weight
// Style supplies the [mancini.SurfaceStyle] that actually renders the box.
Style mancini.SurfaceStyle
// Face overrides the surface fill color when non-zero.
Face color.NRGBA
// Radius is the corner radius in pixels.
Radius float64
// Params is retained for backward compatibility with callers that
// construct a NeuBox with explicit NeuParams (via NewNeuBox).
// NewNeuBoxStyled does not use it.
Params mancini.NeuParams
}
func NewNeuBox
func NewNeuBox(layout *mancini.LayoutAttributes, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams, radius float64) *NeuBox
NewNeuBox creates a NeuBox wired to the constraint system. The layout should be created with mancini.NewDecoratorLayout. Margin is computed from NeuParams (max shadow padding).
Deprecated: prefer NewNeuBoxStyled which takes a Theme.
func NewNeuBoxStyled
func NewNeuBoxStyled(layout *mancini.LayoutAttributes, theme mancini.Theme, depth mancini.NeuDepth, weight mancini.Weight, radius float64) *NeuBox
NewNeuBoxStyled creates a NeuBox that delegates rendering to the Theme’s [mancini.SurfaceStyle]. Margin is derived from style.Pad(weight).
func (*NeuBox) Decorate
func (n *NeuBox) Decorate(self mancini.Interactor, x, y, w, h int64)
Decorate implements mancini.Decoratable — draws the box at the given bounds.
type NeuCircle
NeuCircle is a single-child [impl.Decorator] that draws circular neumorphic shadows around its child. It overrides both [impl.Decorator.Decorate] (to render circular shadows via NeuCircleWith) and [impl.Decorator.Draw] (to inset the child by the bevel amount).
The bevel (neuCircleBevel = 7px) creates a visible ring between the shadow circle’s edge and the face fill, giving the raised/inset 3D effect its depth. The child receives bounds inset by the bevel, not the full margin.
The margin is symmetric on all sides (the circle occupies a square bounding box). It is computed from [mancini.NeuMaxPad].
See also NeuBox for rectangular neumorphic decoration.
type NeuCircle struct {
impl.Decorator
// Pal is the [mancini.Palette] used for shadow and surface colors.
Pal mancini.Palette
// Depth controls whether the circle appears Raised, Flush, or Inset.
Depth mancini.NeuDepth
// Weight selects the shadow strength (Light/Medium/Heavy).
Weight mancini.Weight
// Style supplies the [mancini.SurfaceStyle] used for the bevel ring.
Style mancini.SurfaceStyle
// Face overrides the surface fill color when non-zero.
Face color.NRGBA
// Params is retained for backward compatibility and for the bevel ring
// rendering in Decorate (which accesses Raised sub-params directly).
Params mancini.NeuParams
}
func NewNeuCircle
func NewNeuCircle(layout *mancini.LayoutAttributes, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams) *NeuCircle
NewNeuCircle creates a NeuCircle wired to the constraint system. The layout should be created with mancini.NewDecoratorLayout. Margin is computed from NeuParams (max shadow padding).
func NewNeuCircleNamed
func NewNeuCircleNamed(myName, parent string, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams) *NeuCircle
NewNeuCircleNamed creates a NeuCircle with inside-out sizing constraints. Builds the layout internally from name and parent strings.
func (*NeuCircle) Decorate
func (n *NeuCircle) Decorate(self mancini.Interactor, x, y, w, h int64)
Decorate implements mancini.Decoratable — draws neumorphic circular shadows centered in the given bounds. Shadows are drawn at the full decorator radius; the face fill is drawn at radius - bevel so the shadow ring is visible between face edge and shadow fringe.
func (*NeuCircle) Draw
func (n *NeuCircle) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw overrides Decorator.Draw. The child receives bounds inset by the bevel amount so the neumorphic shadow ring between the face edge and the shadow circle remains visible. The full decorator margins are for shadow overflow; the bevel is the visible 3D ring.
type NeumorphicStyle
NeumorphicStyle implements [mancini.SurfaceStyle] by delegating to the existing neumorphic rendering functions (NeuBoxWith, NeuCircleWith, NeuGroove). It holds two sets of [mancini.NeuParams] — heavy for window decorations, light for controls — and selects between them based on the [mancini.Weight] parameter.
type NeumorphicStyle struct {
// contains filtered or unexported fields
}
func NewNeumorphicStyle
func NewNeumorphicStyle(heavy, light *mancini.NeuParams) *NeumorphicStyle
NewNeumorphicStyle creates a NeumorphicStyle from heavy (window-weight) and light (control-weight) parameter sets. Either may be nil to disable neumorphic rendering for that weight class.
func (*NeumorphicStyle) DrawBox
func (s *NeumorphicStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)
DrawBox draws a rectangular neumorphic box by delegating to NeuBoxWith with the parameters selected by weight.
func (*NeumorphicStyle) DrawCircle
func (s *NeumorphicStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)
DrawCircle draws a circular neumorphic shape by delegating to NeuCircleWith with the parameters selected by weight.
func (*NeumorphicStyle) Groove
func (s *NeumorphicStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
Groove draws a horizontal neumorphic groove by delegating to NeuGroove.
func (*NeumorphicStyle) Pad
func (s *NeumorphicStyle) Pad(weight mancini.Weight) float64
Pad returns the maximum shadow padding required for the given weight.
func (*NeumorphicStyle) TintOverlay
func (s *NeumorphicStyle) TintOverlay(dc mancini.DrawContext, _ mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)
TintOverlay draws a translucent face-colored tint over an existing rectangular surface for hover/focus highlighting.
type OutputFormat
OutputFormat controls how Display() formats a numeric value.
type OutputFormat int
const (
// FormatDecimal renders integer values as base-10 decimal digits.
FormatDecimal OutputFormat = iota
// FormatHex renders integer values as uppercase hexadecimal digits.
FormatHex
// FormatBinary renders integer values as base-2 binary digits.
FormatBinary
)
type Panel
Panel is a minimal container that draws its children at their layout-specified positions. It fills its background with the palette’s Surface color before drawing children.
Unlike Column or Row, Panel does not arrange children automatically — children must have their X, Y, Width, and Height set externally (via constraints or direct Set calls).
type Panel struct {
impl.Interactor
impl.Parent
// Pal supplies the [mancini.Palette] used to fill the panel background.
Pal mancini.Palette
}
func NewPanel
func NewPanel(myName, parent string, pal mancini.Palette, w, h int64) *Panel
NewPanel creates a Panel with value-based width and height.
func (*Panel) Draw
func (p *Panel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw fills the panel background and draws each child at its layout-specified position.
type RadialMenu
RadialMenu is a full-circle annular menu divided into equal segments. One segment can be selected (rendered inset with a tint overlay). The ring is drawn with [mancini.Raised] neumorphic shadows, groove separators between all segments, and per-segment face content.
RadialMenu embeds [impl.ThemedInteractor] and uses Heavy-weight [mancini.NeuParams] (the same weight class as AppWindow) because the ring shape warrants stronger shadows. When [mancini.NeuParams] is nil, only the flat annulus fill and face content are drawn.
Each segment can have a [mancini.LatinTextFace] for text content. Face content is positioned at the segment’s midpoint and rotated to align with the segment’s angular position, reusing the same rendering code as RadialNOfMChooser.
See also NOfMChooser for a linear strip multi-select and RadialNOfMChooser for an arc-shaped multi-select.
type RadialMenu struct {
impl.ThemedInteractor
OuterR float64 // outer radius of the annulus
InnerR float64 // inner radius (center hole)
Faces []mancini.LatinTextFace // text content for each segment (nil entries OK)
Selected int // selected segment index (-1 for none)
Disabled bool // when true, renders dimmed and ignores input
}
func NewRadialMenu
func NewRadialMenu(layout *mancini.LayoutAttributes, theme mancini.Theme, outerR, innerR float64, faces []mancini.LatinTextFace, selected int) *RadialMenu
NewRadialMenu creates a RadialMenu wired to the constraint system and theme.
func NewRadialMenuNamed
func NewRadialMenuNamed(myName, parent string, theme mancini.Theme, outerR, innerR float64, faces []mancini.LatinTextFace, selected int) *RadialMenu
NewRadialMenuNamed creates a RadialMenu with layout built from name + parent strings. Width and height are set to contain the full ring with shadow padding.
func (*RadialMenu) Draw
func (m *RadialMenu) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. It renders the full-circle radial menu: a raised annulus base, selected segment inset+tint, groove separators, and per-segment face content.
type RadialNOfMChooser
RadialNOfMChooser is an arc-shaped M-of-N selector interactor. It draws segments of an annulus (partial ring). Up to M segments can be simultaneously selected; selecting an (M+1)th evicts the oldest.
RadialNOfMChooser embeds [impl.ThemedInteractor] and [impl.Parent], making it a normal container interactor. Segment items are registered as children via [AddChildLast] at construction time.
Selected segments are filled with [mancini.Palette.SurfaceTint]; unselected segments use [mancini.Palette.Surface].
Each segment can have a [mancini.LatinTextFace] whose content is automatically rotated to align with the segment’s angular position. See also NOfMChooser for a linear strip variant and RadialMenu for a full-circle single-select menu.
type RadialNOfMChooser struct {
impl.ThemedInteractor
impl.Parent
CX, CY float64 // center of the arc relative to allocated area
InnerR, OuterR float64 // inner and outer radii
StartDeg, EndDeg float64 // angular range in degrees (0=right, 90=down)
Disabled bool // when true, renders dimmed and ignores input
// contains filtered or unexported fields
}
func NewRadialNOfMChooser
func NewRadialNOfMChooser(layout *mancini.LayoutAttributes, theme mancini.Theme, cx, cy, innerR, outerR, startDeg, endDeg float64, labels []string, fontSize int64, m int) *RadialNOfMChooser
NewRadialNOfMChooser creates a RadialNOfMChooser wired to the constraint system and theme. m is the maximum number of simultaneously selected segments. labels are the text strings for each segment; a Label child interactor is created for each and added via AddChildLast. layout must already be created.
func NewRadialNOfMChooserNamed
func NewRadialNOfMChooserNamed(myName, parent string, theme mancini.Theme, cx, cy, innerR, outerR, startDeg, endDeg float64, labels []string, fontSize int64, m int) *RadialNOfMChooser
NewRadialNOfMChooserNamed creates a RadialNOfMChooser with layout built from name + parent strings. Width and height are computed from the arc’s bounding box so the constraint system can bootstrap. m is the maximum number of simultaneously selected segments. fontSize is used for the segment Label children.
func (*RadialNOfMChooser) Draw
func (c *RadialNOfMChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. It renders the radial arc chooser: an annular arc shape with per-segment fill (SurfaceTint for selected, Surface for unselected), flush edge outlines, radial groove separators between segments, and per-segment face content.
func (*RadialNOfMChooser) ForceSelect
func (c *RadialNOfMChooser) ForceSelect(k int)
ForceSelect clears all selections and selects only segment k.
func (*RadialNOfMChooser) HitTestSegment
func (c *RadialNOfMChooser) HitTestSegment(lx, ly float64) int
HitTestSegment returns the index of the segment at local coordinates (lx, ly) relative to the chooser’s origin, or -1 if the point is outside the annulus or angular range.
func (*RadialNOfMChooser) Hovered
func (c *RadialNOfMChooser) Hovered() int
Hovered returns the currently hovered segment index, or -1 if none.
func (*RadialNOfMChooser) IsSelected
func (c *RadialNOfMChooser) IsSelected(k int) bool
IsSelected returns true if segment k is currently selected.
func (*RadialNOfMChooser) NumSegments
func (c *RadialNOfMChooser) NumSegments() int
NumSegments returns the number of segments.
func (*RadialNOfMChooser) Select
func (c *RadialNOfMChooser) Select(k int) int
Select selects segment k. If k is already selected, this is a no-op and returns -1. If selecting k would exceed the maximum M, the oldest selected segment is evicted and its index is returned. Otherwise returns -1.
func (*RadialNOfMChooser) Selected
func (c *RadialNOfMChooser) Selected() []int
Selected returns a copy of the currently selected indices in order (oldest selection first).
func (*RadialNOfMChooser) SetHovered
func (c *RadialNOfMChooser) SetHovered(seg int) bool
SetHovered sets the hovered segment index. Pass -1 to clear hover. Returns true if the hovered segment changed.
func (*RadialNOfMChooser) TextToIndex
func (c *RadialNOfMChooser) TextToIndex() map[string]int
TextToIndex returns a map from each segment’s text label to its index.
func (*RadialNOfMChooser) Unselect
func (c *RadialNOfMChooser) Unselect(k int) int
Unselect deselects segment k. If k is not currently selected, this is a no-op and returns -1. Otherwise returns k.
type Row
Row arranges children horizontally with inside-out sizing. Width, Height, and LastChildDrawn are constraint-computed from children’s published dimensions. Children declare this Row as their parent by naming it in their [mancini.LayoutAttributes]’ Parent field.
Row embeds [impl.Interactor] + [impl.Parent]. Children are discovered via the constraint network at draw time (see [impl.Parent.GetChildren]).
Layout Behavior
Children are arranged left-to-right with configurable spacing. Cross-axis (vertical) alignment is controlled by CrossAlign ([mancini.AxisMinimum], [mancini.AxisMiddle], [mancini.AxisMaximum]). The last child that partially overflows MaxWidth is clipped using [mancini.WithClip].
See also Column for vertical layout.
type Row struct {
impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
impl.Parent // GetChildren() via constraint network
// Pal is the [mancini.Palette] used for default child backgrounds.
Pal mancini.Palette
// CrossAlign controls vertical alignment of children inside the Row.
CrossAlign mancini.Alignment
// MaxWidth caps the row width; children beyond this point are clipped.
MaxWidth int64
HPadding int64 // horizontal padding applied at left and right edges
}
func NewRow
func NewRow(myName, parent string, pal mancini.Palette, maxWidth int64, crossAlign mancini.Alignment, hPadding int64) *Row
NewRow creates a Row wired to the constraint system. Children are not passed here — they declare this Row as their parent via their own InitLayout(parentName) call, and are discovered at draw time via the constraint network.
func (*Row) Draw
func (r *Row) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Arranges children left-to-right with spacing, cross-axis alignment, and overflow clipping.
func (*Row) SetSpacing
func (r *Row) SetSpacing(v float64)
SetSpacing sets the inter-child spacing value (in pixels).
type RowFillLastChild
RowFillLastChild arranges children horizontally like Row, but the last visible child receives all remaining width after the other children and spacing are subtracted. The row’s own width is set externally (typically via a constraint), not computed from children.
After construction, the caller must:
- Set GetLayout().Width (e.g. via attr.ConstraintI64)
- Call FinishLayout() to create Bounds and LastChildWidth constraints
Children declare this interactor as their parent by naming it in their layout Parent field and are discovered at draw time via the constraint network.
type RowFillLastChild struct {
impl.Interactor
impl.Parent
// Pal is the [mancini.Palette] used for default child backgrounds.
Pal mancini.Palette
// HPadding is the horizontal padding applied at the row's left and right edges.
HPadding int64
// contains filtered or unexported fields
}
func NewRowFillLastChild
func NewRowFillLastChild(myName, parent string, pal mancini.Palette, spacing int64) *RowFillLastChild
NewRowFillLastChild creates a RowFillLastChild. The row’s width must be set by the caller on GetLayout().Width before calling FinishLayout().
func NewRowFillLastChildWithLayout
func NewRowFillLastChildWithLayout(lh *mancini.LayoutAttributes, pal mancini.Palette, spacing int64) *RowFillLastChild
NewRowFillLastChildWithLayout creates a RowFillLastChild using a pre-built LayoutAttributes. Used when the caller provides bridge/custom layout. Width and Height must already be set on lh. Call FinishLayout() after children are created.
func (*RowFillLastChild) Draw
func (r *RowFillLastChild) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Arranges children left-to-right; the last visible child receives remaining width.
func (*RowFillLastChild) FinishLayout
func (r *RowFillLastChild) FinishLayout()
FinishLayout creates the Bounds, LastChildWidth, and parent damage constraints. Must be called after the caller has assigned GetLayout().Width.
func (*RowFillLastChild) SetSpacing
func (r *RowFillLastChild) SetSpacing(v float64)
SetSpacing sets the inter-child spacing value (in pixels).
type RowPercentage
RowPercentage arranges children horizontally, giving each child a fraction of the parent’s width according to a percentage sequence. Children are centered vertically.
Percentage normalization and child-count handling follow the same rules as ColumnPercentage — see its documentation.
type RowPercentage struct {
impl.Interactor
impl.Parent
// Pal is the [mancini.Palette] used for selection backgrounds.
Pal mancini.Palette
ClipChildren bool // clip each child to its cell bounds (prevents text overflow)
Percents []float64 // percentage of width for each child position
SelectionState int // 0=unselected, 1=primary selection, 2=in-set-not-primary
// contains filtered or unexported fields
}
func NewRowPercentage
func NewRowPercentage(myName, parent string, pal mancini.Palette, w, h int64, percents []float64) *RowPercentage
NewRowPercentage creates a RowPercentage with the given percentage sequence. Percentages are normalized on construction. Width and height are set as value attributes from the given dimensions.
func (*RowPercentage) Click
func (rp *RowPercentage) Click(ev *mancini.InputEvent) bool
Click implements [mancini.Clickable]. Routes the click to the owning GridTable.
func (*RowPercentage) Draw
func (rp *RowPercentage) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw positions children horizontally according to the percentage sequence. Each child is centered vertically and given a width proportional to its percentage of the parent’s total width.
type Scrollbar
Scrollbar is a neumorphic scrollbar interactor with an inset track, a raised thumb with a grip dot, and optional arrow buttons at each end.
Scrollbar embeds [impl.ThemedInteractor] and uses Light-weight [mancini.NeuParams] for its neumorphic effects. When the theme’s [mancini.NeumorphicParams.Light] returns nil, the scrollbar falls back to flat rendering: [mancini.Palette.SurfaceTint] for the track, [mancini.Palette.Surface] for the thumb, and [mancini.Palette.Icon] for arrow triangles.
ThumbFrac controls thumb size as a fraction of the track (0..1, representing the proportion of visible content). ThumbPos controls the thumb position along available travel (0 = start, 1 = end). All dimensions scale proportionally to TrackWidth.
type Scrollbar struct {
impl.ThemedInteractor
IsVertical bool // true = vertical, false = horizontal
TrackWidth float64 // cross-axis thickness (values < 5 use default 22.5)
ThumbFrac float64 // visible fraction 0..1 (determines thumb length)
ThumbPos float64 // thumb position 0..1 along available travel
ShowArrows bool // draw arrow triangles at each end
Disabled bool // when true, renders dimmed and ignores input
// Value/Max: when set, ThumbPos and ThumbFrac are computed from
// these in Draw. Value is the current scroll position (pixels),
// Max is the maximum scroll range (constrained to MaxScrollY).
// Value is the source of truth — the scroller's VirtualY is
// constrained to it.
ValueAttr *attr.Attribute[int64]
MaxAttr *attr.Attribute[int64]
// ThumbFracPermilleAttr (optional) sources ThumbFrac entirely from
// the constraint network. Value is in permille (0..1000) so it can
// stay int64 like everything else. When set, Scrollbar.Draw uses
// it directly: ThumbFrac = clamp(permille, 0, 1000) / 1000. The
// pixel-based mainAxis/(mainAxis+max) fallback is bypassed —
// callers whose Value/Max are not in pixels (row-based scrollers
// like GridFrame, ConsoleFrame) provide a constraint program that
// computes visible/total in permille (mancini.ThumbFracPermille).
ThumbFracPermilleAttr *attr.Attribute[int64]
// contains filtered or unexported fields
}
func NewScrollbar
func NewScrollbar(layout *mancini.LayoutAttributes, theme mancini.Theme, isVertical bool, trackWidth, thumbFrac, thumbPos float64, showArrows bool) *Scrollbar
NewScrollbar creates a Scrollbar wired to the constraint system and theme.
func NewScrollbarNamed
func NewScrollbarNamed(myName, parent string, theme mancini.Theme, isVertical bool, length, trackWidth, thumbFrac, thumbPos float64, showArrows bool) *Scrollbar
NewScrollbarNamed creates a Scrollbar with layout built from name + parent strings. The main-axis dimension is set to length; the cross-axis is set to the resolved track width.
func (*Scrollbar) ClickDragEnd
func (s *Scrollbar) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
ClickDragEnd implements mancini.ClickDraggable.
func (*Scrollbar) ClickDragMove
func (s *Scrollbar) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool
ClickDragMove implements mancini.ClickDraggable.
func (*Scrollbar) ClickDragStart
func (s *Scrollbar) ClickDragStart(ev *mancini.InputEvent) bool
ClickDragStart implements mancini.ClickDraggable.
func (*Scrollbar) Draw
func (s *Scrollbar) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. It renders the scrollbar: inset track, raised thumb, grip dot, and optional arrow buttons.
When ValueAttr and MaxAttr are set, ThumbPos and ThumbFrac are computed automatically from Value/Max before rendering.
type ScrollbarStyle
ScrollbarStyle selects which scrollbar implementation to use.
type ScrollbarStyle int
const (
// ScrollbarStandard selects the full neumorphic [Scrollbar].
ScrollbarStandard ScrollbarStyle = iota
// ScrollbarLight selects the slimmer [LightScrollbar].
ScrollbarLight
)
type Scroller
Scroller is a single-child parent that provides a scrollable viewport over a larger virtual surface. Children declare virtual Y positions (set by LayoutChildren or constraints); Scroller renders only the children that intersect the current viewport.
The offscreen buffer is viewport-sized (Width × Height), NOT virtual-sized. On each draw the scroller walks children in Y order, skips those entirely outside the viewport, and clips partially visible children to the viewport intersection. This keeps memory proportional to the visible area regardless of virtual content size.
True size (Width, Height) comes from external constraints — typically bound to the available viewport space. Virtual size (VirtualWidth, VirtualHeight) is the total content extent.
ScrollNeededX / ScrollNeededY are boolean attributes updated each frame, useful for driving scrollbar visibility via constraints.
MaxScrollY is a constrained attribute: VirtualHeight - Height. It represents the maximum scroll range. When a scrollbar is wired, VirtualY can be constrained to the scrollbar’s value attribute.
type Scroller struct {
impl.Interactor
impl.Parent
Pal mancini.Palette // background fill color (Surface)
// VirtualWidth is the total content width in pixels.
VirtualWidth *attr.Attribute[int64]
// VirtualHeight is the total content height in pixels.
VirtualHeight *attr.Attribute[int64]
// VirtualX is the current horizontal scroll offset in pixels.
VirtualX *attr.Attribute[int64]
// VirtualY is the current vertical scroll offset in pixels.
VirtualY *attr.Attribute[int64]
MaxScrollY *attr.Attribute[int64] // constrained: VirtualHeight - Height
// ScrollNeededX is true when VirtualWidth exceeds the viewport width.
ScrollNeededX *attr.Attribute[bool]
// ScrollNeededY is true when VirtualHeight exceeds the viewport height.
ScrollNeededY *attr.Attribute[bool]
// ScrollValueY is the upstream value attribute that drives VirtualY
// when VirtualY is a constraint. ScrollTo writes here instead of
// directly to VirtualY. nil when VirtualY is a plain value.
ScrollValueY *attr.Attribute[int64]
// contains filtered or unexported fields
}
func NewScroller
func NewScroller(myName, parent string, pal mancini.Palette, width, height *attr.Attribute[int64], virtualY *attr.Attribute[int64]) *Scroller
NewScroller creates a Scroller wired to the constraint system. Width and Height must be provided by the caller — typically constraints bound to the parent’s dimensions. virtualY is optional: if non-nil, it is used as the VirtualY attribute (e.g., a constraint wired to a scrollbar’s value); if nil, a value attribute is created. The child is not passed here; it declares the Scroller as its parent via its own layout attributes.
func (*Scroller) DeleteChild
func (s *Scroller) DeleteChild(child mancini.Interactor)
DeleteChild removes a child from this Scroller’s child list.
func (*Scroller) Draw
func (s *Scroller) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer.
The offscreen buffer is viewport-sized (w × h). On each draw:
- Walk children in Y order.
- Skip children whose bottom (childY + childH) <= scrollY (above viewport).
- Skip children whose top (childY) >= scrollY + viewportH (below viewport).
- For visible children, compute the intersection of the child rect with the viewport, set a clip rectangle, translate Y, and draw.
No virtual-sized buffer is ever allocated.
func (*Scroller) MarkContentDirty
func (s *Scroller) MarkContentDirty()
MarkContentDirty signals that the child content has changed and needs to be re-rendered on the next Draw.
func (*Scroller) MaxScrollYURI
func (s *Scroller) MaxScrollYURI() string
MaxScrollYURI returns the URI of the MaxScrollY attribute.
func (*Scroller) Pick
func (s *Scroller) Pick(localX, localY int64) []mancini.Interactor
Pick performs hit testing with virtual coordinate translation. Overrides the default impl.Interactor.Pick to add the scroll offset before recursing into the child.
func (*Scroller) ScrollBy
func (s *Scroller) ScrollBy(dx, dy int64)
ScrollBy adds a delta to the current scroll position.
func (*Scroller) ScrollTo
func (s *Scroller) ScrollTo(vx, vy int64)
ScrollTo sets the scroll position to absolute virtual coordinates. Values are clamped to the valid range on the next Draw. Does NOT mark content dirty — only changes the blit offset. When VirtualY is a constraint (wired to a scrollbar), writes to ScrollValueY instead, which flows through the constraint.
func (*Scroller) SetVirtualSize
func (s *Scroller) SetVirtualSize(vw, vh int64)
SetVirtualSize changes the virtual surface dimensions. Forces buffer reallocation on the next Draw.
type ScrollerVertical
ScrollerVertical bundles a Scroller with a vertical Scrollbar to its right. All constraint wiring is internal:
- Scrollbar.Value is the source of truth for scroll position.
- Scroller.VirtualY is constrained to Scrollbar.Value.
- Scroller.MaxScrollY flows to Scrollbar.Max.
- Scrollbar visibility is tied to Scroller.ScrollNeededY.
The Scroller’s width is constrained to (parent width - trackWidth). The Scroller’s height is constrained to the parent’s height. Children declare the Scroller as their parent via ScrollerName().
type ScrollerVertical struct {
impl.Interactor
impl.Parent
// Scroller is the inner [Scroller] that hosts the scrolling children.
Scroller *Scroller
// contains filtered or unexported fields
}
func NewScrollerVertical
func NewScrollerVertical(myName, parent string, theme mancini.Theme, pal mancini.Palette, parentWidthURI, parentHeightURI string, trackWidth int64, style ScrollbarStyle) *ScrollerVertical
NewScrollerVertical creates a ScrollerVertical. The caller provides width and height constraints for the ScrollerVertical itself (these typically come from the parent’s dimensions). trackWidth is the pixel width reserved for the scrollbar.
func (*ScrollerVertical) Draw
func (sv *ScrollerVertical) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Positions Scroller and Scrollbar, then delegates to DrawChildren.
func (*ScrollerVertical) ScrollerName
func (sv *ScrollerVertical) ScrollerName() string
ScrollerName returns the constraint-system name of the internal Scroller. Children should use this as their parent name.
func (*ScrollerVertical) ScrollerWidthURI
func (sv *ScrollerVertical) ScrollerWidthURI() string
ScrollerWidthURI returns the URI of the Scroller’s Width attribute. Children can constrain their width to this.
type SingleLineText
SingleLineText is a single-line text input interactor. It renders an [mancini.Inset] neumorphic field with left-aligned text, an auto-scrolling viewport, a cursor indicator when focused, and hint text when the content is empty.
SingleLineText publishes its text content as a string attribute and the text length as a constraint attribute (computed via a vgo program). It implements [mancini.KeyPressable] so it can receive matched key-press events when focused via a [mancini.KeyAgent].
The Hint field is displayed in italic at 80% alpha when the text content is empty.
type SingleLineText struct {
impl.ThemedInteractor
Hint string // shown in italic at 80% alpha when text is empty
// FontSize is the rendered font size in pixels.
FontSize int64
Radius float64 // corner radius (default 6)
Padding float64 // horizontal padding inside field (default 8)
BorderWidth float64 // border thickness in pixels (default 2)
Focused bool // shows cursor when true
TextColor color.NRGBA // zero value uses palette Text()
Disabled bool // when true, renders dimmed and ignores input
OnSubmit func(string) // called when Enter is pressed; receives current text (may be empty)
// AppWindow is required for animation-driven alerts.
AppWindow *AppWindow
// contains filtered or unexported fields
}
func NewSingleLineText
func NewSingleLineText(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *SingleLineText
NewSingleLineText creates a SingleLineText wired to the constraint system and theme. The layout must have a name set (used for attribute URIs).
func NewSingleLineTextNamed
func NewSingleLineTextNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64, width int64) *SingleLineText
NewSingleLineTextNamed creates a SingleLineText with layout built from name + parent strings. Width sets the field width; height is derived from the font size plus padding and border.
func NewSingleLineTextWithLimit
func NewSingleLineTextWithLimit(myName, parent string, theme mancini.Theme, text string, fontSize int64, width int64, charLimit int) *SingleLineText
NewSingleLineTextWithLimit creates a SingleLineText with a maximum character count. The limit must be >= 1 or the call panics. When the limit is reached, further inserts replace the character under the cursor.
func (*SingleLineText) Alert
func (t *SingleLineText) Alert()
Alert flashes a highlight border around the input. The border is solid for 500ms, then fades over the next 500ms via the animation protocol. Ignored if an alert is already active.
func (*SingleLineText) AnimationFinish
func (t *SingleLineText) AnimationFinish(localID uint64, endNanos int64)
AnimationFinish implements mancini.Animatable. Clears the alert.
func (*SingleLineText) AnimationStart
func (t *SingleLineText) AnimationStart(localID uint64, startNanos int64)
AnimationStart implements mancini.Animatable. The alert border is already visible at full alpha during the solid phase — no-op.
func (*SingleLineText) AnimationUpdate
func (t *SingleLineText) AnimationUpdate(localID uint64, startNanos, endNanos int64, coveredStart, coveredEnd float64, nanosSinceStart int64)
AnimationUpdate implements mancini.Animatable. Fades the alert border alpha from 255 to 0 as coveredEnd progresses from 0 to 1.
func (*SingleLineText) ClearAlert
func (t *SingleLineText) ClearAlert()
ClearAlert removes the alert border and forces a redraw.
func (*SingleLineText) ClearSelection
func (t *SingleLineText) ClearSelection()
ClearSelection removes the selection without changing the cursor.
func (*SingleLineText) CursorMoveBackwardWord
func (t *SingleLineText) CursorMoveBackwardWord()
CursorMoveBackwardWord moves the cursor to the beginning of the previous word. If there is a selection, collapses to the start of the selection first. Alerts if already at the beginning.
func (*SingleLineText) CursorMoveBeginningOfLine
func (t *SingleLineText) CursorMoveBeginningOfLine()
CursorMoveBeginningOfLine moves the cursor to the beginning of the text. Alerts if already at the beginning.
func (*SingleLineText) CursorMoveEndOfLine
func (t *SingleLineText) CursorMoveEndOfLine()
CursorMoveEndOfLine moves the cursor to the end of the text. Alerts if already at the end.
func (*SingleLineText) CursorMoveForwardWord
func (t *SingleLineText) CursorMoveForwardWord()
CursorMoveForwardWord moves the cursor to the beginning of the next word. If there is a selection, collapses to the end of the selection first. Alerts if already at the end.
func (*SingleLineText) CursorMoveLeftChar
func (t *SingleLineText) CursorMoveLeftChar()
CursorMoveLeftChar moves the cursor one rune to the left. If there is a selection, collapses to the start of the selection. Alerts if already at the beginning.
func (*SingleLineText) CursorMoveRightChar
func (t *SingleLineText) CursorMoveRightChar()
CursorMoveRightChar moves the cursor one rune to the right. If there is a selection, collapses to the end of the selection. Alerts if already at the end.
func (*SingleLineText) DeleteBackward
func (t *SingleLineText) DeleteBackward()
DeleteBackward deletes the character before the cursor. If there is a selection, deletes the selected range instead. Alerts if already at the beginning.
func (*SingleLineText) DeleteBackwardWord
func (t *SingleLineText) DeleteBackwardWord()
DeleteBackwardWord deletes from the cursor back to the beginning of the previous word (Ctrl+W). After deletion the cursor is positioned so that typing extends the word before the deleted region.
func (*SingleLineText) DeleteForward
func (t *SingleLineText) DeleteForward()
DeleteForward deletes the character after the cursor. If there is a selection, deletes the selected range instead. Alerts if already at the end.
func (*SingleLineText) Draw
func (t *SingleLineText) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. It renders the inset field background, text (or hint), and cursor.
func (*SingleLineText) HasAlert
func (t *SingleLineText) HasAlert() bool
HasAlert returns true if the interactor is currently showing an alert border.
func (*SingleLineText) HasSelection
func (t *SingleLineText) HasSelection() bool
HasSelection returns true if there is an active text selection.
func (*SingleLineText) InsertAtCursor
func (t *SingleLineText) InsertAtCursor(ch rune)
InsertAtCursor inserts a rune at the current cursor position. If the input is at its limit, the character under the cursor is replaced instead and the cursor does not advance. Any insertion clears an active alert.
func (*SingleLineText) KeyPress
func (t *SingleLineText) KeyPress(ch rune, action string, ev *mancini.InputEvent) bool
KeyPress implements mancini.KeyPressable. The KeyAgent has already translated the evdev keycode to a character and action via the keymap.
Modifier combinations (Meta = Cmd, Alt = Option on Mac):
- Cmd+Left / Ctrl+A: CursorMoveBeginningOfLine
- Cmd+Right / Ctrl+E: CursorMoveEndOfLine
- Opt+Left: CursorMoveBackwardWord
- Opt+Right: CursorMoveForwardWord
- Ctrl+W: DeleteBackwardWord
func (*SingleLineText) NextWord
func (t *SingleLineText) NextWord() int
NextWord returns the rune position of the beginning of the next word relative to the current cursor position. A word is a group of non-space characters separated by spaces. If there is no next word, returns the end of the text (end of line).
func (*SingleLineText) PreviousWord
func (t *SingleLineText) PreviousWord() int
PreviousWord returns the rune position of the beginning of the previous word relative to the current cursor position. A word is a group of non-space characters separated by spaces. If there is no previous word, returns 0 (beginning of line).
func (*SingleLineText) SelectedText
func (t *SingleLineText) SelectedText() string
SelectedText returns the currently selected text, or “” if none.
func (*SingleLineText) SelectionAll
func (t *SingleLineText) SelectionAll()
SelectionAll selects all text.
func (*SingleLineText) SelectionExtendBackwardWord
func (t *SingleLineText) SelectionExtendBackwardWord()
SelectionExtendBackwardWord extends selection to previous word boundary.
func (*SingleLineText) SelectionExtendForwardWord
func (t *SingleLineText) SelectionExtendForwardWord()
SelectionExtendForwardWord extends selection to next word boundary.
func (*SingleLineText) SelectionExtendLeftChar
func (t *SingleLineText) SelectionExtendLeftChar()
SelectionExtendLeftChar extends selection one rune left. If no selection, sets anchor = cursorPos first.
func (*SingleLineText) SelectionExtendRightChar
func (t *SingleLineText) SelectionExtendRightChar()
SelectionExtendRightChar extends selection one rune right.
func (*SingleLineText) SelectionExtendToBeginning
func (t *SingleLineText) SelectionExtendToBeginning()
SelectionExtendToBeginning extends selection to beginning of line.
func (*SingleLineText) SelectionExtendToEnd
func (t *SingleLineText) SelectionExtendToEnd()
SelectionExtendToEnd extends selection to end of line.
func (*SingleLineText) SelectionRange
func (t *SingleLineText) SelectionRange() (start, end int)
SelectionRange returns the ordered start and end rune positions of the current selection. If there is no selection, returns (0, 0).
func (*SingleLineText) SetText
func (t *SingleLineText) SetText(s string)
SetText replaces the text content, clamps the cursor, and triggers FullDamage.
func (*SingleLineText) Text
func (t *SingleLineText) Text() string
Text returns the current text content.
func (*SingleLineText) TextLen
func (t *SingleLineText) TextLen() int64
TextLen returns the current text length (from the constraint attribute).
type Spacer
Spacer is a leaf interactor that draws nothing but occupies space in a Column or Row layout. Its Width and Height are set as value attributes at construction time.
Spacer embeds [impl.Interactor] directly. It has no theme or visual rendering — its only purpose is to participate in the constraint network as a fixed-size gap.
type Spacer struct {
impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
}
func NewSpacer
func NewSpacer(myName, parent string, w, h int64) *Spacer
NewSpacer creates a Spacer with the given fixed dimensions.
func (*Spacer) Draw
func (s *Spacer) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer. Spacer draws nothing but must complete the damage cycle so persistent damage doesn’t cause infinite redraws.
type StripedTitleBar
StripedTitleBar draws horizontal pinstripes interrupted by centered title text — classic Mac OS style. When inactive, only plain centered text is drawn (no stripes).
See also GradientTitleBar for an animated gradient title bar.
type StripedTitleBar struct {
// contains filtered or unexported fields
}
func NewStripedTitleBar
func NewStripedTitleBar(pal mancini.Palette, fonts *mancini.FontConfig, fontSize int64, bold bool) *StripedTitleBar
NewStripedTitleBar creates a StripedTitleBar. The font face is resolved once at creation time.
func (*StripedTitleBar) DrawTitleBar
func (s *StripedTitleBar) DrawTitleBar(dc mancini.DrawContext, title string, state mancini.WindowState, _ mancini.WindowType, x, y, w, h float64)
DrawTitleBar implements mancini.TitleBar.
type SubtleStyle
SubtleStyle implements [mancini.SurfaceStyle] with classic directional bevels: light from top-left, shadow on bottom-right. This style works well with both light and dark palettes.
Raised: face brightened by delta, 1px Midlight top+left, 1px Mid bottom+right. Flush: thin uniform edge strokes (dark + light). Inset: face darkened by delta, 1px Mid top+left, 1px Midlight bottom+right.
type SubtleStyle struct {
// contains filtered or unexported fields
}
func NewSubtleStyle
func NewSubtleStyle(delta int) *SubtleStyle
NewSubtleStyle creates a SubtleStyle. delta controls how much the face color is brightened (Raised) or darkened (Inset). Use 12 for a subtle effect, higher values for more contrast.
func (*SubtleStyle) DrawBox
func (s *SubtleStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)
DrawBox renders a rounded rectangle with a directional bevel for the given [mancini.NeuDepth]. The face color is adjusted by delta for raised/inset depths.
func (*SubtleStyle) DrawCircle
func (s *SubtleStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)
DrawCircle renders a filled circle with the face color brightness adjusted by depth.
func (*SubtleStyle) Groove
func (s *SubtleStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)
Groove draws a thin two-line horizontal groove (Mid above Midlight) from x1 to x2 at height y.
func (*SubtleStyle) Pad
func (s *SubtleStyle) Pad(weight mancini.Weight) float64
Pad returns the recommended interior padding in pixels for the given surface weight.
func (*SubtleStyle) TintOverlay
func (s *SubtleStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)
TintOverlay draws a translucent face-colored rounded rectangle on top of an existing surface for hover/focus highlighting.
type ThrobberRadialChooser
ThrobberRadialChooser is a pulsing circle that opens a radial overlay menu on click. It manages the full overlay lifecycle with rachel.
type ThrobberRadialChooser struct {
impl.Interactor
// OnSelect is called when the user selects a segment.
// The argument is the segment index.
OnSelect func(int)
// FocusParent is the interactor that owns this throbber. When the
// throbber is clicked, it calls FocusParent.SetFocusToSelf() to
// claim in-app keyboard focus for the containing Unit.
FocusParent mancini.FocusClaimer
// contains filtered or unexported fields
}
func NewThrobberRadialChooser
func NewThrobberRadialChooser(myName, parent string, theme mancini.Theme, pal mancini.Palette, rachelSID int, mainDC mancini.DrawContext, labels []string, initialSel int) *ThrobberRadialChooser
NewThrobberRadialChooser creates a ThrobberRadialChooser. The throbber is sized to size×size pixels. labels are the segment texts for the radial menu. initialSel is the initially selected segment index. rachelSID is the shepherd ID for rachel (overlay IPC). mainDC is the app’s primary DrawContext, used to create overlay child DCs.
func (*ThrobberRadialChooser) Click
func (trc *ThrobberRadialChooser) Click(ev *mancini.InputEvent) bool
Click implements mancini.Clickable. Claims in-app focus for the containing Unit, then opens or dismisses the radial overlay.
func (*ThrobberRadialChooser) Draw
func (trc *ThrobberRadialChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw renders the throbber as a filled circle at the current brightness.
func (*ThrobberRadialChooser) HandleMouseMove
func (trc *ThrobberRadialChooser) HandleMouseMove(m wm.MouseMove, appScreenX, appScreenY int32) bool
HandleMouseMove processes a MouseMove event for the overlay. Converts app-local coords to overlay-local and updates hover state. Returns true if the overlay was redrawn (caller should NOT redraw main window).
func (*ThrobberRadialChooser) HandleMouseRelease
func (trc *ThrobberRadialChooser) HandleMouseRelease(m wm.MouseRelease, appScreenX, appScreenY int32) bool
HandleMouseRelease processes a MouseRelease event for the overlay. Selects the segment under the cursor (if any), calls OnSelect, and dismisses the overlay. Returns true if the overlay was active (caller should NOT redraw main window).
func (*ThrobberRadialChooser) HandleOverlayReady
func (trc *ThrobberRadialChooser) HandleOverlayReady(m wm.OverlayReady)
HandleOverlayReady processes the OverlayReady message from rachel. Returns true if this ThrobberRadialChooser handled the message.
func (*ThrobberRadialChooser) HandleOverlayReleased
func (trc *ThrobberRadialChooser) HandleOverlayReleased(m wm.OverlayReleased)
HandleOverlayReleased cleans up overlay state after rachel confirms teardown.
func (*ThrobberRadialChooser) HitTest
func (trc *ThrobberRadialChooser) HitTest(lx, ly int) bool
HitTest returns true if the point (lx, ly) in app-local coordinates is within the throbber’s bounds (with 10px padding for easy clicking).
func (*ThrobberRadialChooser) OverlayActive
func (trc *ThrobberRadialChooser) OverlayActive() bool
OverlayActive returns true if an overlay is currently allocated.
func (*ThrobberRadialChooser) RequestOverlay
func (trc *ThrobberRadialChooser) RequestOverlay()
RequestOverlay sends an OverlayAllocate to rachel. If an overlay is already active, dismisses it instead. Call this when the throbber is clicked.
func (*ThrobberRadialChooser) Selected
func (trc *ThrobberRadialChooser) Selected() int
Selected returns the currently selected segment index, or -1 if none.
func (*ThrobberRadialChooser) SetMainDC
func (trc *ThrobberRadialChooser) SetMainDC(dc mancini.DrawContext)
SetMainDC updates the parent DrawContext used for overlay child DCs. Call this after the backing store is ready if mainDC was nil at construction.
func (*ThrobberRadialChooser) Tick
func (trc *ThrobberRadialChooser) Tick() bool
Tick advances the throbber by one 10Hz step. Always returns true since the color changes continuously.
type VSplitter
VSplitter arranges three children horizontally: a left primary child, a center VLine separator, and a right primary child. Widths are assigned as percentages of the VSplitter’s own width (default 48/4/48).
The VLine separator is click-draggable: dragging it adjusts the left child’s percentage, clamped to [MinPercent, MaxPercent] (default 30–70).
VSplitter constrains only the VLine’s height to match its own height. The two primary children’s heights are managed externally.
type VSplitter struct {
impl.Interactor
impl.Parent
// Pal is the [mancini.Palette] used for default child backgrounds.
Pal mancini.Palette
Percents [3]float64 // left, center, right percentages
// Drag limits for the left child percentage.
MinPercent float64 // default 30
MaxPercent float64 // default 70
// In-app focus: set by the application after construction.
// KeyFocusAgent is the KeyAgent that routes keyboard events.
// KeyFocusTarget is the interactor that should receive keyboard input
// when this VSplitter is clicked (e.g., the editor inside a unit).
// FocusAttr is this VSplitter's focused attribute (true = has focus).
// FocusPeers are all VSplitters in the same focus group (including self).
KeyFocusAgent *mancini.KeyAgent
KeyFocusTarget mancini.Interactor
FocusAttr *attr.Attribute[bool]
FocusPeers []*VSplitter
// contains filtered or unexported fields
}
func NewVSplitter
func NewVSplitter(myName, parent string, pal mancini.Palette) *VSplitter
NewVSplitter creates a VSplitter. The width comes from the parent; height is a value attribute. The VLine child should be created with its height constrained to HeightURI().
func (*VSplitter) Click
func (vs *VSplitter) Click(ev *mancini.InputEvent) bool
Click implements mancini.Clickable. Catches clicks that fall through from non-interactive children (e.g., BAG) and claims focus.
func (*VSplitter) ClickDragEnd
func (vs *VSplitter) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool
ClickDragEnd implements mancini.ClickDraggable.
func (*VSplitter) ClickDragMove
func (vs *VSplitter) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool
ClickDragMove implements mancini.ClickDraggable.
func (*VSplitter) ClickDragStart
func (vs *VSplitter) ClickDragStart(ev *mancini.InputEvent) bool
ClickDragStart implements mancini.ClickDraggable. Accepts the drag if the press is in the center (VLine) region. Also claims in-app focus at the start of the drag.
func (*VSplitter) Draw
func (vs *VSplitter) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw positions the three children horizontally according to the percentage split. Only three children are expected. Layout is always propagated to all children, but Draw is skipped for undamaged children.
func (*VSplitter) HeightURI
func (vs *VSplitter) HeightURI() string
HeightURI returns the URI of the VSplitter’s Height attribute. Use this to constrain the VLine child’s height.
func (*VSplitter) SetFocusToSelf
func (vs *VSplitter) SetFocusToSelf()
SetFocusToSelf claims in-app keyboard focus for this VSplitter. It walks FocusPeers, setting each peer’s FocusAttr to false except this one (true), and directs the KeyAgent to deliver keyboard events to KeyFocusTarget. Called from this VSplitter’s own Click handler and from child interactors (VE, Throbber) at the start of their interactions.
type VerticalLine
VerticalLine draws a single vertical line from (X, Y) to (X, Y+Height). X, Y, and Height can be constrained or set as value attributes. The line is 1px wide by default, drawn in the palette’s text color.
type VerticalLine struct {
impl.ThemedInteractor
LineColor color.NRGBA // zero uses palette Text()
LineWidth float64 // pixel width (default 1)
}
func NewVerticalLine
func NewVerticalLine(myName, parent string, theme mancini.Theme) *VerticalLine
NewVerticalLine creates a VerticalLine with all-value layout attributes.
func NewVerticalLineConstrained
func NewVerticalLineConstrained(myName, parent string, theme mancini.Theme, heightSourceURI string) *VerticalLine
NewVerticalLineConstrained creates a VerticalLine where Height is constrained to equal a source int64 attribute URI.
func (*VerticalLine) Draw
func (v *VerticalLine) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw implements mancini.NewDrawer.
type WebInteractor
WebInteractor renders HTML content into its allocated body area as a scrollable viewport on a cached, fully-rendered offscreen image.
Lifecycle on each Draw:
- If the cached image is missing OR the panel width changed since last render, call engine.RenderToImage(html, width). The result is kept in cachedImage and its natural height is published via ContentHeight (drives the companion scrollbar’s Max).
- Always blit the cached image at vertical offset -ScrollY into the panel area, clipped so anything past panel bounds is discarded.
ScrollY is an attribute so a partner Scrollbar can drive it via constraint (see WebScrollerVertical for the standard wrapper).
The HTML may not be well-formed — it could be a fragment like a paragraph or code block. The WebRenderEngine handles that gracefully; when it can’t, RenderToImage returns an error and Draw paints a magenta placeholder so the user gets visible feedback.
type WebInteractor struct {
impl.Interactor
// Scroll position (pixels from the top of cachedImage). Drives the
// blit offset. Externally writable so a partner Scrollbar can bind
// its Value attribute via constraint.
ScrollY *attr.Attribute[int64]
// ContentHeight is the natural pixel height of the last rendered
// image. Published as an attribute so a partner Scrollbar can wire
// its Max to (ContentHeight - panelHeight).
ContentHeight *attr.Attribute[int64]
// contains filtered or unexported fields
}
func NewWebInteractor
func NewWebInteractor(myName, parent string, engine WebRenderEngine) *WebInteractor
NewWebInteractor creates a WebInteractor with outside-in sizing. The engine is used to render HTML bytes into pixels.
func NewWebInteractorWithLayout
func NewWebInteractorWithLayout(myName string, lh *mancini.LayoutAttributes, engine WebRenderEngine) *WebInteractor
NewWebInteractorWithLayout creates a WebInteractor with pre-built layout attributes. Use this when the Width or Height needs to be a constraint rather than a plain value attribute (e.g. when wrapped in a scroller that constrains both axes).
func (*WebInteractor) Draw
func (w *WebInteractor) Draw(self mancini.Interactor, x, y, width, height int64, damage image.Rectangle)
Draw blits the cached image (re-rendering first if html or width changed) at -ScrollY offset, clipped to the panel area. The expensive layout/paint pipeline runs only when the cache is dirty; every other frame is a single image blit.
func (*WebInteractor) Scroll
func (w *WebInteractor) Scroll(dy int64)
Scroll adjusts ScrollY by dy pixels (positive = scroll down) and clamps to [0, ContentHeight - panelHeight]. The clamp is approximate — Draw clamps a second time using the actual panel height.
func (*WebInteractor) SetHTML
func (w *WebInteractor) SetHTML(html []byte)
SetHTML replaces the HTML content, invalidates the rendered cache, resets ScrollY to 0 (only if it’s a value attribute — when wrapped by a scroller it’s a constraint and writing would panic; the wrapper is responsible for resetting its source attribute), and marks the interactor for redraw.
ContentHeight is left alone here; renderCache will overwrite it on the next Draw with the fresh image’s natural height.
type WebRenderEngine
WebRenderEngine is the interface between the interactor framework and an HTML rendering engine. The concrete implementation lives outside mancini (e.g., in louis14’s resource package) and is passed to the WebInteractor constructor by the shepherd.
type WebRenderEngine interface {
// RenderDC renders raw HTML bytes (possibly a fragment, not
// necessarily well-formed) using the provided DrawContext.
// The DC's translation and clipping define the render viewport.
// viewportW and viewportH specify the layout dimensions.
//
// Returns a non-nil error if the engine could not produce output for
// this HTML (parser rejected the markup, fetch failed, layout error,
// etc.). The caller is expected to paint its own placeholder so the
// user gets visible feedback instead of stale pixels.
RenderDC(html []byte, dc mancini.DrawContext, viewportW, viewportH float64) error
// RenderToImage lays the HTML out at the given fixed width and
// renders into a freshly-allocated image whose height is the natural
// content height. The caller caches the result and blits a viewport
// from it on subsequent draws — no re-layout per scroll/redraw.
//
// Returns a non-nil error on parser or layout failure; in that case
// the returned image is nil and the caller should paint a placeholder.
RenderToImage(html []byte, width int) (*image.RGBA, error)
}
type WebScrollerVertical
WebScrollerVertical bundles a WebInteractor with a vertical Scrollbar to its right. All constraint wiring is internal:
- Scrollbar.Value is the source of truth for scroll position.
- WebInteractor.ScrollY is constrained to Scrollbar.Value, so a user drag on the thumb scrolls the rendered page.
- Scrollbar.Max is constrained to (WebInteractor.ContentHeight - WebInteractor.Height), so the thumb’s range tracks how much content is offscreen.
- Scrollbar visibility is tied to (ContentHeight > panelHeight) so the bar disappears for short messages that fit fully.
Width and Height of WebScrollerVertical are constrained to the caller-supplied parent dimension URIs (mirrors ScrollerVertical). The internal WebInteractor occupies the whole area minus trackWidth on the right.
This is the standard wrapper for embedding the web component in a mancini layout — the mail app uses it for the message body panel.
type WebScrollerVertical struct {
impl.Interactor
impl.Parent
// Web is the inner [WebInteractor] that renders HTML content.
Web *WebInteractor
// contains filtered or unexported fields
}
func NewWebScrollerVertical
func NewWebScrollerVertical(myName, parent string, theme mancini.Theme, pal mancini.Palette, trackWidth int64, engine WebRenderEngine) *WebScrollerVertical
NewWebScrollerVertical creates a WebScrollerVertical wrapping a fresh WebInteractor and a standard vertical Scrollbar. The wrapper’s outer Width/Height are value-typed, set by the parent layout each frame (e.g. ColumnPercentage propagates its child width). trackWidth is the pixel width reserved for the scrollbar.
Inside, the WebInteractor’s Width is constrained to (outer width - trackWidth) and its Height is constrained to outer height, so layout changes flow through the constraint network without manual wiring.
func (*WebScrollerVertical) Draw
func (wsv *WebScrollerVertical) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)
Draw positions the WebInteractor on the left and the Scrollbar on the right, then delegates to DrawChildren. Mirrors ScrollerVertical.Draw.
func (*WebScrollerVertical) SetHTML
func (wsv *WebScrollerVertical) SetHTML(html []byte)
SetHTML replaces the HTML content of the inner WebInteractor and resets the scrollbar to the top so the user always sees the start of the new message. Use this instead of Web.SetHTML when the scroller is wired up via constraints — directly calling Web.SetHTML works but leaves the scrollbar pinned to the previous message’s offset.
func (*WebScrollerVertical) WebInteractorName
func (wsv *WebScrollerVertical) WebInteractorName() string
WebInteractorName returns the constraint-system name of the inner WebInteractor — useful when callers want to constrain something against its layout attributes.
Generated by gomarkdoc