| .. | ||
| Makefile | ||
| README.md | ||
| textHelp.c | ||
| textHelp.h | ||
texthelp -- Shared Text Editing Helper Library
Shared infrastructure for text editing widgets, built as
texthelp.lib (DXE3 module). Provides clipboard operations, cursor
blink management, word boundary detection, cross-widget selection
clearing, and a complete single-line text editing engine.
Used by: TextInput, TextArea, Spinner, ComboBox, AnsiTerm.
API Reference
Cursor Blink
void wgtUpdateCursorBlink(void);
Toggles the global cursor blink state (sCursorBlinkOn) based on
clock() timing. Called from the event dispatch layer during paint.
Widgets that show a text cursor check sCursorBlinkOn to decide
whether to draw or hide the cursor.
Selection Management
void clearOtherSelections(WidgetT *except);
Clears text/item selections in all widgets except the specified one. Called when a widget gains focus or starts a new selection, ensuring only one widget has an active selection at a time.
Word / Character Helpers
bool isWordChar(char c);
Returns true if c is a word character (alphanumeric or underscore).
Used for double-click word selection and Ctrl+arrow word navigation.
int32_t wordStart(const char *buf, int32_t pos);
Scans backward from pos to find the start of the current word.
int32_t wordEnd(const char *buf, int32_t len, int32_t pos);
Scans forward from pos to find the end of the current word.
Single-Line Text Editing Engine
Four functions implement the complete editing behavior shared across TextInput, Spinner, ComboBox, and other single-line text widgets:
void widgetTextEditOnKey(WidgetT *w, int32_t key, int32_t mod,
char *buf, int32_t bufSize, int32_t *pLen,
int32_t *pCursor, int32_t *pScrollOff,
int32_t *pSelStart, int32_t *pSelEnd,
char *undoBuf, int32_t *pUndoLen, int32_t *pUndoCursor);
Handles all keyboard input: character insertion, deletion (Backspace, Delete), cursor movement (arrows, Home, End), word navigation (Ctrl+arrows), selection (Shift+arrows, Ctrl+Shift+arrows, Ctrl+A), clipboard (Ctrl+C/X/V), and undo (Ctrl+Z).
void widgetTextEditMouseClick(WidgetT *w, int32_t vx, int32_t vy,
int32_t textLeftX, const BitmapFontT *font,
const char *buf, int32_t len, int32_t scrollOff,
int32_t *pCursorPos, int32_t *pSelStart, int32_t *pSelEnd,
bool wordSelect, bool dragSelect);
Handles mouse click positioning: converts pixel coordinates to cursor position, handles word selection (double-click), and drag-select.
void widgetTextEditDragUpdateLine(int32_t vx, int32_t leftEdge,
int32_t maxChars, const BitmapFontT *font, int32_t len,
int32_t *pCursorPos, int32_t *pScrollOff, int32_t *pSelEnd);
Updates cursor and selection during mouse drag operations.
void widgetTextEditPaintLine(DisplayT *d, const BlitOpsT *ops,
const BitmapFontT *font, const ColorSchemeT *colors,
int32_t textX, int32_t textY, const char *buf,
int32_t visLen, int32_t scrollOff, int32_t cursorPos,
int32_t selStart, int32_t selEnd, uint32_t fg, uint32_t bg,
bool showCursor, int32_t cursorMinX, int32_t cursorMaxX);
Renders a single line of text with selection highlighting and cursor.
Constants
| Name | Value | Description |
|---|---|---|
TEXT_INPUT_PAD |
3 | Padding inside text input border |
Exported Symbols
Matches prefixes: _clipboard*, _clearOther*, _isWordChar*,
_multiClick*, _widgetText*, _wordStart*, _wordEnd*.
Files
| File | Description |
|---|---|
textHelp.h |
Public API header |
textHelp.c |
Complete implementation |
Makefile |
Builds bin/libs/texthelp.lib + dep file |
Build
make # builds bin/libs/texthelp.lib + texthelp.dep
make clean # removes objects, library, and dep file
Depends on: libtasks.lib, libdvx.lib (via texthelp.dep).