Minor docs fixes. Terminal display bug fixed.

This commit is contained in:
Scott Duensing 2026-03-25 23:51:07 -05:00
parent 56816eedd8
commit f6354bef6f
4 changed files with 21 additions and 4 deletions

View file

@ -125,7 +125,7 @@ dvxWidget.h.
## DXE Module System ## DXE Module System
All modules are DXE3 dynamic libraries loaded by dvx.exe at startup. All modules are DXE3 dynamic libraries loaded by dvx.exe at startup.
The loader scans `libs/` for `.lib` files and `widgets/` for `.wgt` The loader recursively scans `libs/` for `.lib` files and `widgets/` for `.wgt`
files, reads `.dep` files for dependencies, and loads in topological files, reads `.dep` files for dependencies, and loads in topological
order. Widget modules that export `wgtRegister()` have it called after order. Widget modules that export `wgtRegister()` have it called after
loading. loading.

View file

@ -3636,6 +3636,23 @@ static void pollWidgets(AppContextT *ctx) {
static void pollWidgetsWalk(AppContextT *ctx, WidgetT *w, WindowT *win) { static void pollWidgetsWalk(AppContextT *ctx, WidgetT *w, WindowT *win) {
if (w->wclass && (w->wclass->flags & WCLASS_NEEDS_POLL) && w->wclass->poll) { if (w->wclass && (w->wclass->flags & WCLASS_NEEDS_POLL) && w->wclass->poll) {
w->wclass->poll(w, win); w->wclass->poll(w, win);
// If the poll dirtied internal state and the widget supports
// quickRepaint, render the dirty rows directly into the window's
// content buffer and add the affected area to the global dirty list.
if (w->wclass->quickRepaint) {
int32_t dirtyY = 0;
int32_t dirtyH = 0;
if (w->wclass->quickRepaint(w, &dirtyY, &dirtyH) > 0) {
int32_t scrollY = win->vScroll ? win->vScroll->value : 0;
int32_t rectX = win->x + win->contentX;
int32_t rectY = win->y + win->contentY + dirtyY - scrollY;
int32_t rectW = win->contentW;
win->contentDirty = true;
dirtyListAdd(&ctx->dirty, rectX, rectY, rectW, dirtyH);
}
}
} }
for (WidgetT *child = w->firstChild; child; child = child->nextSibling) { for (WidgetT *child = w->firstChild; child; child = child->nextSibling) {

View file

@ -22,7 +22,7 @@ dynamically loaded DXE3 module.
### Phase 1: Libraries (libs/*.lib) ### Phase 1: Libraries (libs/*.lib)
Scans the `LIBS/` directory for `.lib` files. Each module may have a Recursively scans the `LIBS/` directory for `.lib` files. Each module may have a
`.dep` file (same base name, `.dep` extension) listing base names of `.dep` file (same base name, `.dep` extension) listing base names of
modules that must load first. The loader resolves the dependency graph modules that must load first. The loader resolves the dependency graph
and loads in topological order. and loads in topological order.
@ -38,7 +38,7 @@ dvxshell.lib (deps: libtasks, libdvx, texthelp, listhelp)
### Phase 2: Widgets (widgets/*.wgt) ### Phase 2: Widgets (widgets/*.wgt)
Scans the `WIDGETS/` directory for `.wgt` files. Widget modules may Recursively scans the `WIDGETS/` directory for `.wgt` files. Widget modules may
also have `.dep` files (e.g., `textinpt.dep` lists `texthelp`). also have `.dep` files (e.g., `textinpt.dep` lists `texthelp`).
Loaded in topological order, same as libs. Loaded in topological order, same as libs.

View file

@ -1,7 +1,7 @@
# DVX Widget Modules # DVX Widget Modules
Individual widget type implementations, each built as a separate `.wgt` Individual widget type implementations, each built as a separate `.wgt`
DXE module. The loader scans the `WIDGETS/` directory at startup and DXE module. The loader recursively scans the `WIDGETS/` directory at startup and
loads every `.wgt` file it finds. Each module exports `wgtRegister()`, loads every `.wgt` file it finds. Each module exports `wgtRegister()`,
which registers its widget class(es) and API struct with the core. which registers its widget class(es) and API struct with the core.