class

Quartz::Simulator::Gui

Inherits Reference < Object

Flipper's canvas is 128x64 monochrome. u8g2 packs pixels column-major within 8-pixel-tall row bands: byte at (page, col) holds 8 vertical pixels, LSB = top. We mirror that layout so screenshot bytes are byte-compatible with future on-device capture.

Constants

FONT_5X7 = begin h = {} of Int32 => StaticArray(UInt8, 5) h[32] = StaticArray[0_u8, 0_u8, 0_u8, 0_u8, 0_u8] h[48] = StaticArray[62_u8, 81_u8, 73_u8, 69_u8, 62_u8] h[49] = StaticArray[0_u8, 66_u8, 127_u8, 64_u8, 0_u8] h[50] = StaticArray[66_u8, 97_u8, 81_u8, 73_u8, 70_u8] h[51] = StaticArray[33_u8, 65_u8, 69_u8, 75_u8, 49_u8] h[52] = StaticArray[24_u8, 20_u8, 18_u8, 127_u8, 16_u8] h[53] = StaticArray[39_u8, 69_u8, 69_u8, 69_u8, 57_u8] h[54] = StaticArray[60_u8, 74_u8, 73_u8, 73_u8, 48_u8] h[55] = StaticArray[1_u8, 113_u8, 9_u8, 5_u8, 3_u8] h[56] = StaticArray[54_u8, 73_u8, 73_u8, 73_u8, 54_u8] h[57] = StaticArray[6_u8, 73_u8, 73_u8, 41_u8, 30_u8] h[65] = StaticArray[126_u8, 17_u8, 17_u8, 17_u8, 126_u8] h[66] = StaticArray[127_u8, 73_u8, 73_u8, 73_u8, 54_u8] h[67] = StaticArray[62_u8, 65_u8, 65_u8, 65_u8, 34_u8] h[68] = StaticArray[127_u8, 65_u8, 65_u8, 34_u8, 28_u8] h[69] = StaticArray[127_u8, 73_u8, 73_u8, 73_u8, 65_u8] h[70] = StaticArray[127_u8, 9_u8, 9_u8, 9_u8, 1_u8] h[71] = StaticArray[62_u8, 65_u8, 73_u8, 73_u8, 122_u8] h[72] = StaticArray[127_u8, 8_u8, 8_u8, 8_u8, 127_u8] h[73] = StaticArray[0_u8, 65_u8, 127_u8, 65_u8, 0_u8] h[75] = StaticArray[127_u8, 8_u8, 20_u8, 34_u8, 65_u8] h[76] = StaticArray[127_u8, 64_u8, 64_u8, 64_u8, 64_u8] h[77] = StaticArray[127_u8, 2_u8, 4_u8, 2_u8, 127_u8] h[78] = StaticArray[127_u8, 4_u8, 8_u8, 16_u8, 127_u8] h[79] = StaticArray[62_u8, 65_u8, 65_u8, 65_u8, 62_u8] h[80] = StaticArray[127_u8, 9_u8, 9_u8, 9_u8, 6_u8] h[82] = StaticArray[127_u8, 9_u8, 25_u8, 41_u8, 70_u8] h[83] = StaticArray[70_u8, 73_u8, 73_u8, 73_u8, 49_u8] h[84] = StaticArray[1_u8, 1_u8, 127_u8, 1_u8, 1_u8] h[85] = StaticArray[63_u8, 64_u8, 64_u8, 64_u8, 63_u8] h[88] = StaticArray[99_u8, 20_u8, 8_u8, 20_u8, 99_u8] h[90] = StaticArray[97_u8, 81_u8, 73_u8, 69_u8, 67_u8] h[58] = StaticArray[0_u8, 0_u8, 54_u8, 0_u8, 0_u8] h[0] = StaticArray[127_u8, 127_u8, 127_u8, 127_u8, 127_u8] h end

Lazy-loaded subset font. Only glyphs we care about — 0x20, digits, uppercase letters, and a few punctuation chars. Everything else renders as a filled block, which is fine for host tests.

HEIGHT = 64
PAGES = HEIGHT // 8
WIDTH = 128

Constructors

Instance methods

buffer

Stored as PAGES * WIDTH bytes. Index: page * WIDTH + col.

Source
clear
Source
draw_box(x : Int32, y : Int32, w : Int32, h : Int32) : Nil
Source
draw_frame(x : Int32, y : Int32, w : Int32, h : Int32) : Nil
Source
draw_line(x0 : Int32, y0 : Int32, x1 : Int32, y1 : Int32) : Nil
Source
draw_str(x : Int32, y : Int32, text : String) : Nil

Minimal 5x7 font for printable ASCII 0x20..0x7e. Each glyph is 5 columns, each column is a byte with bit 0 = top pixel. The font is intentionally small — it's a debug fixture, not a pretty renderer. For unknown chars we draw a 5x7 filled block.

Source
get_pixel(x : Int32, y : Int32) : Bool
Source
screenshot

Returns the raw packed buffer (Flipper layout). Alias kept simple so test code can snapshot exactly what the device would send.

Source
screenshot_pgm

Portable grayscale PGM for eyeballing during debugging.

Source
set_pixel(x : Int32, y : Int32, on : Bool = true) : Nil
Source