FABRIC.md item 4.4z: draw the scroll box's visible border
draw_box_border() (vt100.c) strokes four 1px edges around the 640x480 CANVAS box, reusing the same border-gray constant the REPL strip's border lines use (renamed VT100_STRIP_BORDER_GRAY -> VT100_BORDER_GRAY since it's now shared -- one pinned color decision, 4.4w, not two). Called from erase_display()'s box-scoped branch so the border survives every box clear (the initial one and any later ESC[2J), not just the first. Verified: three-arch clean QEMU boot + logs, amd64 screendump showing a full rectangle outline around the box, visually distinct from the strip below it. Punch list §25 item 4.4z complete. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
91742e02f4
commit
b21aa50a14
@@ -6028,7 +6028,7 @@ document and committing that amendment as its own item.*
|
||||
> **DECIDED 2026-08-12 — Ctrl+TAB.** Chosen by Captain Bob directly. 4.4v's interception
|
||||
> code intercepts this specific combination, not bare TAB.
|
||||
|
||||
- [ ] **4.4z — Draw the scroll box's visible border.** 4.4t confined REPL text to the 640×480
|
||||
- [x] **4.4z — Draw the scroll box's visible border.** 4.4t confined REPL text to the 640×480
|
||||
box's coordinate space but never stroked a visible rectangle outline on it — the box's edges
|
||||
are implicit (where text stops), not drawn. 4.4u step 6 calls for "an actual stroked
|
||||
rectangle outline." Small, separable from 4.4v/4.4r — a single `fb_fill_rect()`-based
|
||||
@@ -6039,6 +6039,18 @@ document and committing that amendment as its own item.*
|
||||
locks in (see 4.4w); three-arch QEMU boot + logs per CLAUDE.md.
|
||||
*Refs:* §27.8, 4.4t, 4.4u, 4.4w.
|
||||
|
||||
> **DONE 2026-08-12.** `draw_box_border()` (`vt100.c`) strokes four 1px edges around the box
|
||||
> using the same `VT100_BORDER_GRAY` constant the strip's border lines use (renamed from
|
||||
> `VT100_STRIP_BORDER_GRAY` since it's now shared by both — one pinned color decision,
|
||||
> 4.4w, not two). Called from `erase_display()`'s box-scoped branch (`mode==2`, TTF mode),
|
||||
> right after the box-clear fill — this covers both the initial clear at
|
||||
> `vt100_enable_ttf()` time and any later `ESC[2J`, so the border survives every box clear,
|
||||
> not just the first, per this item's own done-when. Three-arch QEMU boot + logs clean
|
||||
> (`logs/20260812-150341/amd64`, `logs/20260812-150426/aarch64`,
|
||||
> `logs/20260812-150540/riscv64`); amd64 screendump
|
||||
> (`logs/screendump-4.4z/amd64-border.png`) shows a full rectangle outline around the box,
|
||||
> visually distinct from the strip below it.
|
||||
|
||||
- [ ] **4.5 — URGENT, flagged by Captain Bob 2026-08-11: the kernel build has never used any
|
||||
compiler optimization.** **Blocking priority, set by Captain Bob 2026-08-11: no other
|
||||
punch-list item is worked until 4.5a–4.5f are done**, ahead of whatever would otherwise
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 7.9 KiB |
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
||||
qemu: terminating on signal 15 from pid 102222 (/bin/bash)
|
||||
@@ -113,7 +113,10 @@ static ttf_raster_cache_t g_ttf_cache;
|
||||
* --------------------------------------------------------------------- */
|
||||
#define VT100_STRIP_GAP_PX 15u /* baseline-to-border-line gap, both sides, mirrored */
|
||||
#define VT100_STRIP_BOX_GAP_PX 8u /* gap between the strip's top border and the box's bottom edge */
|
||||
#define VT100_STRIP_BORDER_GRAY FB_RGB(0xAA, 0xAA, 0xAA) /* FB_ANSI_PALETTE[7] */
|
||||
#define VT100_BORDER_GRAY FB_RGB(0xAA, 0xAA, 0xAA) /* FB_ANSI_PALETTE[7]; shared by the
|
||||
strip's border lines (4.4x) and
|
||||
the box's own border (4.4z) --
|
||||
same pinned decision (4.4w) */
|
||||
#define VT100_STRIP_TEXT_WHITE FB_RGB(0xFF, 0xFF, 0xFF)
|
||||
#define VT100_STRIP_LEFT_MARGIN_PX(fbw) (((fbw) - VT100_BOX_W) / 2u) /* aligned under the box */
|
||||
|
||||
@@ -344,8 +347,8 @@ void vt100_strip_draw(const char *text)
|
||||
VT100_STRIP_TEXT_WHITE, VT100_DEFAULT_BG);
|
||||
}
|
||||
|
||||
fb_fill_rect(0, top_line_y, fbw, 1u, VT100_STRIP_BORDER_GRAY);
|
||||
fb_fill_rect(0, bottom_line_y, fbw, 1u, VT100_STRIP_BORDER_GRAY);
|
||||
fb_fill_rect(0, top_line_y, fbw, 1u, VT100_BORDER_GRAY);
|
||||
fb_fill_rect(0, bottom_line_y, fbw, 1u, VT100_BORDER_GRAY);
|
||||
}
|
||||
|
||||
static void draw_cursor_glyph(uint8_t ch)
|
||||
@@ -679,6 +682,26 @@ static void erase_line_range(uint32_t row, uint32_t c0, uint32_t c1)
|
||||
fb_fill_rect(px_of(c0), py_of(row), (c1 - c0) * cell_w(), cell_h(), g_vt.bg);
|
||||
}
|
||||
|
||||
/* FABRIC.md item 4.4z: stroke the scroll box's own visible border. 4.4t
|
||||
* confined text to the box's coordinate space but never drew a rectangle
|
||||
* outline on it -- the edges were implicit (where text stops), not
|
||||
* drawn. Four thin edges, 1px each, same gray as the strip's border
|
||||
* lines (4.4x/4.4w -- one shared color, one design decision). Called
|
||||
* from erase_display()'s box-scoped branch below, so the border survives
|
||||
* every box clear (the initial one at vt100_enable_ttf() time and any
|
||||
* later ESC[2J), not just the first. */
|
||||
static void draw_box_border(void)
|
||||
{
|
||||
fb_fill_rect(g_origin_x, g_origin_y,
|
||||
VT100_BOX_W, 1u, VT100_BORDER_GRAY);
|
||||
fb_fill_rect(g_origin_x, g_origin_y + VT100_BOX_H - 1u,
|
||||
VT100_BOX_W, 1u, VT100_BORDER_GRAY);
|
||||
fb_fill_rect(g_origin_x, g_origin_y,
|
||||
1u, VT100_BOX_H, VT100_BORDER_GRAY);
|
||||
fb_fill_rect(g_origin_x + VT100_BOX_W - 1u, g_origin_y,
|
||||
1u, VT100_BOX_H, VT100_BORDER_GRAY);
|
||||
}
|
||||
|
||||
static void erase_display(int mode)
|
||||
{
|
||||
if (mode == 0) {
|
||||
@@ -701,6 +724,7 @@ static void erase_display(int mode)
|
||||
* full-screen in bitmap mode as before (boot/POST unaffected). */
|
||||
if (g_glyph_mode == VT_GLYPH_TTF) {
|
||||
fb_fill_rect(g_origin_x, g_origin_y, VT100_BOX_W, VT100_BOX_H, g_vt.def_bg);
|
||||
draw_box_border();
|
||||
} else {
|
||||
fb_fill_rect(0, 0, fb_width(), fb_height(), g_vt.def_bg);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user