yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
Canvas System Overview

Canvas Architecture

  • Canvas States: track canvas, content, and draw rectangles independently; expose size/scale through CanvasState inspection panel
  • Layer Stack: background ➝ bitmaps ➝ entity overlays ➝ selection/tooltip layers
  • Interaction Modes: Tile Paint, Tile Select, Rectangle Select, Entity Manipulation, Palette Editing, Diagnostics
  • Context Menu: persistent menu with material icon sections (Mode, View, Info, Bitmap, Palette, BPP, Performance, Layout, Custom)

Core API Patterns

  • Modern usage: Begin/End (auto grid/overlay, persistent context menu)
  • Legacy helpers still available (DrawBackground, DrawGrid, DrawSelectRect, etc.)
  • Unified state snapshot: CanvasState exposes geometry, zoom, scroll
  • Interaction handler manages mode-specific tools (tile brush, select rect, entity gizmo)

Context Menu Sections

  • Mode Selector: switch modes with icons (Brush, Select, Rect, Bitmap, Palette, BPP, Perf)
  • View & Grid: reset/zoom, toggle grid/labels, advanced/scaling dialogs
  • Canvas Info: real-time canvas/content size, scale, scroll, mouse position
  • Bitmap/Palette/BPP: format conversion, palette analysis, BPP workflows with persistent modals
  • Performance: profiler metrics, dashboard, usage report
  • Layout: draggable toggle, auto resize, grid step
  • Custom Actions: consumer-provided menu items

Interaction Modes & Capabilities

  • Tile Painting: tile16 painter, brush size, finish stroke callbacks
    • Operations: finish_paint, reset_view, zoom, grid, scaling
  • Tile Selection: multi-select rectangle, copy/paste selection
    • Operations: select_all, clear_selection, reset_view, zoom, grid, scaling
  • Rectangle Selection: drag-select area, clear selection
    • Operations: clear_selection, reset_view, zoom, grid, scaling
  • Bitmap Editing: format conversion, bitmap manipulation
    • Operations: bitmap_convert, palette_edit, bpp_analysis, reset_view, zoom, grid, scaling
  • Palette Editing: inline palette editor, ROM palette picker, color analysis
    • Operations: palette_edit, palette_analysis, reset_palette, reset_view, zoom, grid, scaling
  • BPP Conversion: format analysis, conversion workflows
    • Operations: bpp_analysis, bpp_conversion, bitmap_convert, reset_view, zoom, grid, scaling
  • Performance Mode: diagnostics, texture queue, performance overlays
    • Operations: performance, usage_report, copy_metrics, reset_view, zoom, grid, scaling

Debug & Diagnostics

  • Persistent modals (View→Advanced, View→Scaling, Palette, BPP) stay open until closed
  • Texture inspector shows current bitmap, VRAM sheet, palette group, usage stats
  • State overlay: canvas size, content size, global scale, scroll, highlight entity
  • Performance HUD: operation counts, timing graphs, usage recommendations

Automation API

  • CanvasAutomationAPI: tile operations (SetTileAt, SelectRect), view control (ScrollToTile, SetZoom), entity manipulation hooks
  • Exposed through CLI (z3ed) and gRPC service, matching UI modes

Integration Steps for Editors

  1. Construct Canvas, set renderer (optional) and ID
  2. Call InitializePaletteEditor and SetUsageMode
  3. Configure available modes: SetAvailableModes({kTilePainting, kTileSelecting})
  4. Register mode callbacks (tile paint finish, selection clear, etc.)
  5. During frame: canvas.Begin(size) → draw bitmaps/entities → canvas.End()
  6. Provide custom menu items via AddMenuItem/AddMenuItem(item, usage)
  7. Use GetConfig()/GetSelection() for state; respond to context menu commands via callback lambda in Render

Migration Checklist

  • Replace direct DrawContextMenu logic with new render callback signature
  • Move palette/BPP helpers into canvas/ module; update includes
  • Ensure persistent modals wired (advanced/scaling/palette/bpp/perf)
  • Update usage tracker integrations to record mode switches
  • Validate overworld/tile16/dungeon editors in tile paint, select, entity modes

Testing Notes

  • Manual regression: overworld paint/select, tile16 painter, dungeon entity drag
  • Verify context menu persists and modals remain until closed
  • Ensure palette/BPP modals populate with correct bitmap/palette data
  • Automation: run CanvasAutomation API tests/end-to-end scripts for overworld edits