mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-06 15:47:39 +03:00
fix: Render keyboard entry over multiple lines
Fixes https://github.com/crosspoint-reader/crosspoint-reader/issues/554
This commit is contained in:
parent
140fcb9db5
commit
acadc50181
@ -256,8 +256,9 @@ void KeyboardEntryActivity::render() const {
|
|||||||
renderer.drawCenteredText(UI_10_FONT_ID, startY, title.c_str());
|
renderer.drawCenteredText(UI_10_FONT_ID, startY, title.c_str());
|
||||||
|
|
||||||
// Draw input field
|
// Draw input field
|
||||||
const int inputY = startY + 22;
|
const int inputStartY = startY + 22;
|
||||||
renderer.drawText(UI_10_FONT_ID, 10, inputY, "[");
|
int inputEndY = startY + 22;
|
||||||
|
renderer.drawText(UI_10_FONT_ID, 10, inputStartY, "[");
|
||||||
|
|
||||||
std::string displayText;
|
std::string displayText;
|
||||||
if (isPassword) {
|
if (isPassword) {
|
||||||
@ -269,19 +270,29 @@ void KeyboardEntryActivity::render() const {
|
|||||||
// Show cursor at end
|
// Show cursor at end
|
||||||
displayText += "_";
|
displayText += "_";
|
||||||
|
|
||||||
// Truncate if too long for display - use actual character width from font
|
// Render input text across multiple lines
|
||||||
int approxCharWidth = renderer.getSpaceWidth(UI_10_FONT_ID);
|
int lineStartIdx = 0;
|
||||||
if (approxCharWidth < 1) approxCharWidth = 8; // Fallback to approximate width
|
int lineEndIdx = displayText.length();
|
||||||
const int maxDisplayLen = (pageWidth - 40) / approxCharWidth;
|
while (true) {
|
||||||
if (displayText.length() > static_cast<size_t>(maxDisplayLen)) {
|
std::string lineText = displayText.substr(lineStartIdx, lineEndIdx - lineStartIdx);
|
||||||
displayText = "..." + displayText.substr(displayText.length() - maxDisplayLen + 3);
|
const int textWidth = renderer.getTextWidth(UI_10_FONT_ID, lineText.c_str());
|
||||||
}
|
if (textWidth <= pageWidth - 40) {
|
||||||
|
renderer.drawText(UI_10_FONT_ID, 20, inputEndY, lineText.c_str());
|
||||||
|
if (lineEndIdx == displayText.length()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
renderer.drawText(UI_10_FONT_ID, 20, inputY, displayText.c_str());
|
inputEndY += renderer.getLineHeight(UI_10_FONT_ID);
|
||||||
renderer.drawText(UI_10_FONT_ID, pageWidth - 15, inputY, "]");
|
lineStartIdx = lineEndIdx;
|
||||||
|
lineEndIdx = displayText.length();
|
||||||
|
} else {
|
||||||
|
lineEndIdx -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
renderer.drawText(UI_10_FONT_ID, pageWidth - 15, inputEndY, "]");
|
||||||
|
|
||||||
// Draw keyboard - use compact spacing to fit 5 rows on screen
|
// Draw keyboard - use compact spacing to fit 5 rows on screen
|
||||||
const int keyboardStartY = inputY + 25;
|
const int keyboardStartY = inputEndY + 25;
|
||||||
constexpr int keyWidth = 18;
|
constexpr int keyWidth = 18;
|
||||||
constexpr int keyHeight = 18;
|
constexpr int keyHeight = 18;
|
||||||
constexpr int keySpacing = 3;
|
constexpr int keySpacing = 3;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user