🔧 Font completo + key repeat para navegación
- Font bitmap 8x8 completo (ASCII 32-126) - navKeyPressed() ahora detecta key repeat de SDL2 - Exportar default_font desde render module 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
296939bb65
commit
14d717d7f4
3 changed files with 202 additions and 57 deletions
|
|
@ -354,19 +354,17 @@ pub const InputState = struct {
|
|||
return self.key_events[0..self.key_event_count];
|
||||
}
|
||||
|
||||
/// Check if any navigation key was pressed
|
||||
/// Check if any navigation key was pressed (includes key repeat)
|
||||
pub fn navKeyPressed(self: Self) ?Key {
|
||||
if (self.keyPressed(.up)) return .up;
|
||||
if (self.keyPressed(.down)) return .down;
|
||||
if (self.keyPressed(.left)) return .left;
|
||||
if (self.keyPressed(.right)) return .right;
|
||||
if (self.keyPressed(.home)) return .home;
|
||||
if (self.keyPressed(.end)) return .end;
|
||||
if (self.keyPressed(.page_up)) return .page_up;
|
||||
if (self.keyPressed(.page_down)) return .page_down;
|
||||
if (self.keyPressed(.tab)) return .tab;
|
||||
if (self.keyPressed(.enter)) return .enter;
|
||||
if (self.keyPressed(.escape)) return .escape;
|
||||
// Check key events (includes repeats from SDL2)
|
||||
for (self.key_events[0..self.key_event_count]) |event| {
|
||||
if (event.pressed) {
|
||||
switch (event.key) {
|
||||
.up, .down, .left, .right, .home, .end, .page_up, .page_down, .tab, .enter, .escape => return event.key,
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -131,55 +131,200 @@ pub const default_font = Font{
|
|||
.num_chars = 95,
|
||||
};
|
||||
|
||||
// 8x8 font data for ASCII 32-126
|
||||
// 8x8 font data for ASCII 32-126 (complete font)
|
||||
// Each character is 8 bytes (8 rows, 1 byte per row)
|
||||
const default_font_data = blk: {
|
||||
// This is a minimal font - in production, use a proper font
|
||||
var data: [95 * 8]u8 = undefined;
|
||||
|
||||
// Initialize all to zero
|
||||
for (&data) |*b| {
|
||||
b.* = 0;
|
||||
}
|
||||
|
||||
// Based on classic PC BIOS font
|
||||
const default_font_data = [95 * 8]u8{
|
||||
// Space (32)
|
||||
// Already zero
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// ! (33)
|
||||
const exclaim = [8]u8{ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00 };
|
||||
@memcpy(data[1 * 8 ..][0..8], &exclaim);
|
||||
|
||||
// A (65)
|
||||
const a_upper = [8]u8{ 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 };
|
||||
@memcpy(data[33 * 8 ..][0..8], &a_upper);
|
||||
|
||||
// B (66)
|
||||
const b_upper = [8]u8{ 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00 };
|
||||
@memcpy(data[34 * 8 ..][0..8], &b_upper);
|
||||
|
||||
// C (67)
|
||||
const c_upper = [8]u8{ 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00 };
|
||||
@memcpy(data[35 * 8 ..][0..8], &c_upper);
|
||||
|
||||
// ... Add more characters as needed
|
||||
|
||||
// a (97)
|
||||
const a_lower = [8]u8{ 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00 };
|
||||
@memcpy(data[65 * 8 ..][0..8], &a_lower);
|
||||
|
||||
// b (98)
|
||||
const b_lower = [8]u8{ 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00 };
|
||||
@memcpy(data[66 * 8 ..][0..8], &b_lower);
|
||||
|
||||
0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00,
|
||||
// " (34)
|
||||
0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// # (35)
|
||||
0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
|
||||
// $ (36)
|
||||
0x18, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x18, 0x00,
|
||||
// % (37)
|
||||
0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
|
||||
// & (38)
|
||||
0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00,
|
||||
// ' (39)
|
||||
0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// ( (40)
|
||||
0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00,
|
||||
// ) (41)
|
||||
0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00,
|
||||
// * (42)
|
||||
0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00,
|
||||
// + (43)
|
||||
0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
|
||||
// , (44)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30,
|
||||
// - (45)
|
||||
0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
|
||||
// . (46)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
|
||||
// / (47)
|
||||
0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00,
|
||||
// 0 (48)
|
||||
const zero = [8]u8{ 0x3C, 0x66, 0x6E, 0x76, 0x66, 0x66, 0x3C, 0x00 };
|
||||
@memcpy(data[16 * 8 ..][0..8], &zero);
|
||||
|
||||
0x7C, 0xCE, 0xDE, 0xF6, 0xE6, 0xC6, 0x7C, 0x00,
|
||||
// 1 (49)
|
||||
const one = [8]u8{ 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 };
|
||||
@memcpy(data[17 * 8 ..][0..8], &one);
|
||||
|
||||
break :blk data;
|
||||
0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00,
|
||||
// 2 (50)
|
||||
0x7C, 0xC6, 0x06, 0x7C, 0xC0, 0xC0, 0xFE, 0x00,
|
||||
// 3 (51)
|
||||
0x7C, 0xC6, 0x06, 0x3C, 0x06, 0xC6, 0x7C, 0x00,
|
||||
// 4 (52)
|
||||
0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x00,
|
||||
// 5 (53)
|
||||
0xFE, 0xC0, 0xFC, 0x06, 0x06, 0xC6, 0x7C, 0x00,
|
||||
// 6 (54)
|
||||
0x7C, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0x7C, 0x00,
|
||||
// 7 (55)
|
||||
0xFE, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
|
||||
// 8 (56)
|
||||
0x7C, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0x7C, 0x00,
|
||||
// 9 (57)
|
||||
0x7C, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x7C, 0x00,
|
||||
// : (58)
|
||||
0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00,
|
||||
// ; (59)
|
||||
0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
|
||||
// < (60)
|
||||
0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00,
|
||||
// = (61)
|
||||
0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00,
|
||||
// > (62)
|
||||
0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00,
|
||||
// ? (63)
|
||||
0x7C, 0xC6, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00,
|
||||
// @ (64)
|
||||
0x7C, 0xC6, 0xDE, 0xDE, 0xDE, 0xC0, 0x7C, 0x00,
|
||||
// A (65)
|
||||
0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
|
||||
// B (66)
|
||||
0xFC, 0xC6, 0xC6, 0xFC, 0xC6, 0xC6, 0xFC, 0x00,
|
||||
// C (67)
|
||||
0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00,
|
||||
// D (68)
|
||||
0xF8, 0xCC, 0xC6, 0xC6, 0xC6, 0xCC, 0xF8, 0x00,
|
||||
// E (69)
|
||||
0xFE, 0xC0, 0xC0, 0xF8, 0xC0, 0xC0, 0xFE, 0x00,
|
||||
// F (70)
|
||||
0xFE, 0xC0, 0xC0, 0xF8, 0xC0, 0xC0, 0xC0, 0x00,
|
||||
// G (71)
|
||||
0x7C, 0xC6, 0xC0, 0xCE, 0xC6, 0xC6, 0x7E, 0x00,
|
||||
// H (72)
|
||||
0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00,
|
||||
// I (73)
|
||||
0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00,
|
||||
// J (74)
|
||||
0x06, 0x06, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00,
|
||||
// K (75)
|
||||
0xC6, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0xC6, 0x00,
|
||||
// L (76)
|
||||
0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFE, 0x00,
|
||||
// M (77)
|
||||
0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0x00,
|
||||
// N (78)
|
||||
0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00,
|
||||
// O (79)
|
||||
0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||
// P (80)
|
||||
0xFC, 0xC6, 0xC6, 0xFC, 0xC0, 0xC0, 0xC0, 0x00,
|
||||
// Q (81)
|
||||
0x7C, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x06,
|
||||
// R (82)
|
||||
0xFC, 0xC6, 0xC6, 0xFC, 0xD8, 0xCC, 0xC6, 0x00,
|
||||
// S (83)
|
||||
0x7C, 0xC6, 0xC0, 0x7C, 0x06, 0xC6, 0x7C, 0x00,
|
||||
// T (84)
|
||||
0xFE, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
|
||||
// U (85)
|
||||
0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||
// V (86)
|
||||
0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00,
|
||||
// W (87)
|
||||
0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
|
||||
// X (88)
|
||||
0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 0x00,
|
||||
// Y (89)
|
||||
0xC6, 0xC6, 0x6C, 0x38, 0x18, 0x18, 0x18, 0x00,
|
||||
// Z (90)
|
||||
0xFE, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xFE, 0x00,
|
||||
// [ (91)
|
||||
0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00,
|
||||
// \ (92)
|
||||
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00,
|
||||
// ] (93)
|
||||
0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00,
|
||||
// ^ (94)
|
||||
0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// _ (95)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
|
||||
// ` (96)
|
||||
0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// a (97)
|
||||
0x00, 0x00, 0x7C, 0x06, 0x7E, 0xC6, 0x7E, 0x00,
|
||||
// b (98)
|
||||
0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xFC, 0x00,
|
||||
// c (99)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC6, 0x7C, 0x00,
|
||||
// d (100)
|
||||
0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xC6, 0x7E, 0x00,
|
||||
// e (101)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00,
|
||||
// f (102)
|
||||
0x1C, 0x36, 0x30, 0x78, 0x30, 0x30, 0x30, 0x00,
|
||||
// g (103)
|
||||
0x00, 0x00, 0x7E, 0xC6, 0xC6, 0x7E, 0x06, 0x7C,
|
||||
// h (104)
|
||||
0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x00,
|
||||
// i (105)
|
||||
0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
||||
// j (106)
|
||||
0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78,
|
||||
// k (107)
|
||||
0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
|
||||
// l (108)
|
||||
0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
||||
// m (109)
|
||||
0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
|
||||
// n (110)
|
||||
0x00, 0x00, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x00,
|
||||
// o (111)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||
// p (112)
|
||||
0x00, 0x00, 0xFC, 0xC6, 0xC6, 0xFC, 0xC0, 0xC0,
|
||||
// q (113)
|
||||
0x00, 0x00, 0x7E, 0xC6, 0xC6, 0x7E, 0x06, 0x06,
|
||||
// r (114)
|
||||
0x00, 0x00, 0xDC, 0xE6, 0xC0, 0xC0, 0xC0, 0x00,
|
||||
// s (115)
|
||||
0x00, 0x00, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x00,
|
||||
// t (116)
|
||||
0x30, 0x30, 0x7C, 0x30, 0x30, 0x36, 0x1C, 0x00,
|
||||
// u (117)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x00,
|
||||
// v (118)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00,
|
||||
// w (119)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00,
|
||||
// x (120)
|
||||
0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00,
|
||||
// y (121)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x7C,
|
||||
// z (122)
|
||||
0x00, 0x00, 0xFE, 0x0C, 0x38, 0x60, 0xFE, 0x00,
|
||||
// { (123)
|
||||
0x0E, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0E, 0x00,
|
||||
// | (124)
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
|
||||
// } (125)
|
||||
0x70, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x70, 0x00,
|
||||
// ~ (126)
|
||||
0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
// =============================================================================
|
||||
|
|
|
|||
|
|
@ -77,7 +77,9 @@ pub const KeyEvent = macro.KeyEvent;
|
|||
pub const render = struct {
|
||||
pub const Framebuffer = @import("render/framebuffer.zig").Framebuffer;
|
||||
pub const SoftwareRenderer = @import("render/software.zig").SoftwareRenderer;
|
||||
pub const Font = @import("render/font.zig").Font;
|
||||
const font_module = @import("render/font.zig");
|
||||
pub const Font = font_module.Font;
|
||||
pub const default_font = font_module.default_font;
|
||||
pub const ttf = @import("render/ttf.zig");
|
||||
pub const TtfFont = ttf.TtfFont;
|
||||
pub const FontRef = ttf.FontRef;
|
||||
|
|
|
|||
Loading…
Reference in a new issue