seedhammer-v1-companion/gui/assets/embed.go
mineracks 9675c05ff1 emulator: real gui — lift upstream v1.3.0 gui/ + wire Platform
The Phase 2 scaffolding boot screen is replaced with the actual
upstream v1.3.0 gui package running in browser. cmd/emulator now
calls gui.NewApp(plat, version) + drives a.Frame() in a goroutine.

Lifts:
  gui/                         (top-level UI + state machine)
  gui/assets                   (icons, fonts, 9-patch images)
  gui/layout                   (constraint-based UI layout)
  gui/op                       (drawing op primitives)
  gui/saver                    (screensaver + idle timeout)
  gui/text                     (text shaping)
  gui/widget                   (button/menu/keyboard widgets)
All 11 .go files lifted verbatim from seedhammer/seedhammer @ v1.3.0
(commit 2f071c1d...), import paths rewritten seedhammer.com → mineracks.

browserPlatform now implements gui.Platform (12 methods):
  Events(deadline)   — drains v1.Event chan, maps to gui.ButtonEvent
                       (gui.Button enum order matches platform/v1.Button,
                        so the conversion is a direct uint cast)
  Wakeup()           — no-op (no sleep state in browser)
  PlateSizes()       — backup.SquarePlate, backup.LargePlate
  Engraver()         — nullEngraver stub (browser can't punch metal)
  EngraverParams()   — copy of mjolnir.Params {StrokeWidth: 38,
                       Millimeter: 126}. Inlined because tarm/serial
                       (mjolnir's USB dep) doesn't compile to js/wasm.
  CameraFrame(size)  — emits FrameEvent{Error: stubbed} so QR-scan
                       screens fall through cleanly; real handoff
                       lands when SeedSigner sim wires up (Phase 2.5)
  Now()              — time.Now()
  DisplaySize()      — 240×240
  Dirty(r)           — records rect, resets chunk cursor
  NextChunk()        — one-shot: returns full sub-image once per
                       Dirty cycle, then flushes the whole frame
                       buffer to JS via emulatorPaint()
  ScanQR()           — returns nil decodes (stub)
  Debug()            — false

The Engraver interface is satisfied by nullEngraver — Engrave() returns
"engraver not connected" so the GUI's engrave flow fails cleanly
instead of looking like it's working.

WASM grows 2.7MB → 8.0MB (gui package + btcd + crypto deps + fonts
all linked in). Acceptable for the v1 emulator one-time cache.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 20:53:06 +10:00

277 lines
12 KiB
Go

// Code generated by gui/assets/gen.go; DO NOT EDIT.
package assets
import (
_ "embed"
"unsafe"
"github.com/mineracks/seedhammer-v1-companion/image/ninepatch"
"github.com/mineracks/seedhammer-v1-companion/image/paletted"
)
var (
ArrowDown = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(ArrowDownData[:135]), len(ArrowDownData[:135])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 15, MaxY: 9},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(ArrowDownData[135:]), len(ArrowDownData[135:]))),
}
//go:embed arrow-down.bin
ArrowDownData string
ArrowLeft = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(ArrowLeftData[:135]), len(ArrowLeftData[:135])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 9, MaxY: 15},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(ArrowLeftData[135:]), len(ArrowLeftData[135:]))),
}
//go:embed arrow-left.bin
ArrowLeftData string
ArrowRight = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(ArrowRightData[:135]), len(ArrowRightData[:135])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 9, MaxY: 15},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(ArrowRightData[135:]), len(ArrowRightData[135:]))),
}
//go:embed arrow-right.bin
ArrowRightData string
ArrowUp = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(ArrowUpData[:135]), len(ArrowUpData[:135])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 15, MaxY: 9},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(ArrowUpData[135:]), len(ArrowUpData[135:]))),
}
//go:embed arrow-up.bin
ArrowUpData string
ButtonFocused = ninepatch.New(&paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(ButtonFocusedData[:850]), len(ButtonFocusedData[:850])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 34, MaxY: 25},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(ButtonFocusedData[850:]), len(ButtonFocusedData[850:]))),
})
//go:embed button-focused.bin
ButtonFocusedData string
CameraCorners = ninepatch.New(&paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(CameraCornersData[:3249]), len(CameraCornersData[:3249])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 57, MaxY: 57},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(CameraCornersData[3249:]), len(CameraCornersData[3249:]))),
})
//go:embed camera-corners.bin
CameraCornersData string
CircleFilled = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(CircleFilledData[:169]), len(CircleFilledData[:169])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 13, MaxY: 13},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(CircleFilledData[169:]), len(CircleFilledData[169:]))),
}
//go:embed circle-filled.bin
CircleFilledData string
Circle = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(CircleData[:169]), len(CircleData[:169])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 13, MaxY: 13},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(CircleData[169:]), len(CircleData[169:]))),
}
//go:embed circle.bin
CircleData string
Hammer = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(HammerData[:14760]), len(HammerData[:14760])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 120, MaxY: 123},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(HammerData[14760:]), len(HammerData[14760:]))),
}
//go:embed hammer.bin
HammerData string
IconBack = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconBackData[:270]), len(IconBackData[:270])),
Rect: paletted.Rectangle{MinX: 8, MinY: 10, MaxX: 26, MaxY: 25},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconBackData[270:]), len(IconBackData[270:]))),
}
//go:embed icon-back.bin
IconBackData string
IconBackspace = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconBackspaceData[:260]), len(IconBackspaceData[:260])),
Rect: paletted.Rectangle{MinX: 7, MinY: 11, MaxX: 27, MaxY: 24},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconBackspaceData[260:]), len(IconBackspaceData[260:]))),
}
//go:embed icon-backspace.bin
IconBackspaceData string
IconCheckmark = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconCheckmarkData[:414]), len(IconCheckmarkData[:414])),
Rect: paletted.Rectangle{MinX: 6, MinY: 8, MaxX: 29, MaxY: 26},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconCheckmarkData[414:]), len(IconCheckmarkData[414:]))),
}
//go:embed icon-checkmark.bin
IconCheckmarkData string
IconDiscard = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconDiscardData[:460]), len(IconDiscardData[:460])),
Rect: paletted.Rectangle{MinX: 7, MinY: 6, MaxX: 27, MaxY: 29},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconDiscardData[460:]), len(IconDiscardData[460:]))),
}
//go:embed icon-discard.bin
IconDiscardData string
IconDot = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconDotData[:121]), len(IconDotData[:121])),
Rect: paletted.Rectangle{MinX: 12, MinY: 12, MaxX: 23, MaxY: 23},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconDotData[121:]), len(IconDotData[121:]))),
}
//go:embed icon-dot.bin
IconDotData string
IconEdit = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconEditData[:441]), len(IconEditData[:441])),
Rect: paletted.Rectangle{MinX: 7, MinY: 7, MaxX: 28, MaxY: 28},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconEditData[441:]), len(IconEditData[441:]))),
}
//go:embed icon-edit.bin
IconEditData string
IconFlip = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconFlipData[:360]), len(IconFlipData[:360])),
Rect: paletted.Rectangle{MinX: 8, MinY: 9, MaxX: 28, MaxY: 27},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconFlipData[360:]), len(IconFlipData[360:]))),
}
//go:embed icon-flip.bin
IconFlipData string
IconHammer = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconHammerData[:506]), len(IconHammerData[:506])),
Rect: paletted.Rectangle{MinX: 6, MinY: 7, MaxX: 29, MaxY: 29},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconHammerData[506:]), len(IconHammerData[506:]))),
}
//go:embed icon-hammer.bin
IconHammerData string
IconInfo = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconInfoData[:152]), len(IconInfoData[:152])),
Rect: paletted.Rectangle{MinX: 14, MinY: 8, MaxX: 22, MaxY: 27},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconInfoData[152:]), len(IconInfoData[152:]))),
}
//go:embed icon-info.bin
IconInfoData string
IconLeft = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconLeftData[:270]), len(IconLeftData[:270])),
Rect: paletted.Rectangle{MinX: 8, MinY: 10, MaxX: 26, MaxY: 25},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconLeftData[270:]), len(IconLeftData[270:]))),
}
//go:embed icon-left.bin
IconLeftData string
IconProgress = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconProgressData[:529]), len(IconProgressData[:529])),
Rect: paletted.Rectangle{MinX: 6, MinY: 6, MaxX: 29, MaxY: 29},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconProgressData[529:]), len(IconProgressData[529:]))),
}
//go:embed icon-progress.bin
IconProgressData string
IconRight = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconRightData[:270]), len(IconRightData[:270])),
Rect: paletted.Rectangle{MinX: 9, MinY: 10, MaxX: 27, MaxY: 25},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconRightData[270:]), len(IconRightData[270:]))),
}
//go:embed icon-right.bin
IconRightData string
IconSkip = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(IconSkipData[:270]), len(IconSkipData[:270])),
Rect: paletted.Rectangle{MinX: 8, MinY: 10, MaxX: 26, MaxY: 25},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(IconSkipData[270:]), len(IconSkipData[270:]))),
}
//go:embed icon-skip.bin
IconSkipData string
KeyActive = ninepatch.New(&paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(KeyActiveData[:112]), len(KeyActiveData[:112])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 8, MaxY: 14},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(KeyActiveData[112:]), len(KeyActiveData[112:]))),
})
//go:embed key-active.bin
KeyActiveData string
KeyBackspace = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(KeyBackspaceData[:187]), len(KeyBackspaceData[:187])),
Rect: paletted.Rectangle{MinX: 2, MinY: 0, MaxX: 19, MaxY: 11},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(KeyBackspaceData[187:]), len(KeyBackspaceData[187:]))),
}
//go:embed key-backspace.bin
KeyBackspaceData string
Key = ninepatch.New(&paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(KeyData[:112]), len(KeyData[:112])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 8, MaxY: 14},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(KeyData[112:]), len(KeyData[112:]))),
})
//go:embed key.bin
KeyData string
LogoSmall = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(LogoSmallData[:441]), len(LogoSmallData[:441])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 21, MaxY: 21},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(LogoSmallData[441:]), len(LogoSmallData[441:]))),
}
//go:embed logo-small.bin
LogoSmallData string
NavBtnPrimary = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(NavBtnPrimaryData[:1225]), len(NavBtnPrimaryData[:1225])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 35, MaxY: 35},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(NavBtnPrimaryData[1225:]), len(NavBtnPrimaryData[1225:]))),
}
//go:embed nav-btn-primary.bin
NavBtnPrimaryData string
NavBtnSecondary = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(NavBtnSecondaryData[:1225]), len(NavBtnSecondaryData[:1225])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 35, MaxY: 35},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(NavBtnSecondaryData[1225:]), len(NavBtnSecondaryData[1225:]))),
}
//go:embed nav-btn-secondary.bin
NavBtnSecondaryData string
ProgressCircle = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(ProgressCircleData[:16384]), len(ProgressCircleData[:16384])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 128, MaxY: 128},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(ProgressCircleData[16384:]), len(ProgressCircleData[16384:]))),
}
//go:embed progress-circle.bin
ProgressCircleData string
Sh02 = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(Sh02Data[:5720]), len(Sh02Data[:5720])),
Rect: paletted.Rectangle{MinX: 1, MinY: 0, MaxX: 89, MaxY: 65},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(Sh02Data[5720:]), len(Sh02Data[5720:]))),
}
//go:embed sh02.bin
Sh02Data string
Sh03 = &paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(Sh03Data[:5720]), len(Sh03Data[:5720])),
Rect: paletted.Rectangle{MinX: 1, MinY: 0, MaxX: 89, MaxY: 65},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(Sh03Data[5720:]), len(Sh03Data[5720:]))),
}
//go:embed sh03.bin
Sh03Data string
WarningBoxBg = ninepatch.New(&paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(WarningBoxBgData[:405]), len(WarningBoxBgData[:405])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 27, MaxY: 15},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(WarningBoxBgData[405:]), len(WarningBoxBgData[405:]))),
})
//go:embed warning-box-bg.bin
WarningBoxBgData string
WarningBoxBorder = ninepatch.New(&paletted.Image{
Pix: unsafe.Slice(unsafe.StringData(WarningBoxBorderData[:405]), len(WarningBoxBorderData[:405])),
Rect: paletted.Rectangle{MinX: 0, MinY: 0, MaxX: 27, MaxY: 15},
Palette: paletted.Palette(unsafe.Slice(unsafe.StringData(WarningBoxBorderData[405:]), len(WarningBoxBorderData[405:]))),
})
//go:embed warning-box-border.bin
WarningBoxBorderData string
)