From 7108fadd63abb1863e0b682805b65c4a35ee9389 Mon Sep 17 00:00:00 2001 From: pablohc Date: Tue, 14 Apr 2026 00:39:28 +0200 Subject: [PATCH] feat(keyboard): unify keyboard metrics across Base, Lyra and Lyra3Covers themes --- src/activities/util/KeyboardEntryActivity.cpp | 10 ++++++---- src/components/themes/BaseTheme.cpp | 9 +++++---- src/components/themes/BaseTheme.h | 10 ++++++---- src/components/themes/lyra/Lyra3CoversTheme.h | 5 +++-- src/components/themes/lyra/LyraTheme.h | 3 ++- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index 62613ff4..f31f8a51 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -261,13 +261,16 @@ void KeyboardEntryActivity::render(RenderLock&&) { GUI.drawTextField(renderer, Rect{contentRect.x, inputStartY, contentRect.width, inputHeight}, textWidth); const int keyHeight = metrics.keyboardKeyHeight; + const int bottomKeyHeight = metrics.keyboardBottomKeyHeight; const int keySpacing = metrics.keyboardKeySpacing; const int keyWidth = (pageWidth * 95 / 100 - (COLS - 1) * keySpacing) / COLS; const int leftMargin = (pageWidth - (COLS * keyWidth + (COLS - 1) * keySpacing)) / 2; + const int bottomRowGap = metrics.keyboardBottomKeySpacing > 0 ? 4 : 0; const int keyboardStartY = metrics.keyboardBottomAligned ? pageHeight - metrics.buttonHintsHeight - metrics.verticalSpacing - - (keyHeight + keySpacing) * getTotalRowCount() + metrics.keyboardVerticalOffset + (keyHeight + keySpacing) * getContentRowCount() - bottomKeyHeight - + bottomRowGap + metrics.keyboardVerticalOffset : inputStartY + inputHeight + lineHeight + metrics.verticalSpacing; const KeyDef(*layout)[COLS] = symMode ? symLayout : abcLayout; const int contentRows = getContentRowCount(); @@ -297,7 +300,6 @@ void KeyboardEntryActivity::render(RenderLock&&) { } } - const int bottomRowGap = metrics.keyboardBottomKeySpacing > 0 ? 4 : 0; const int bottomRowY = keyboardStartY + contentRows * (keyHeight + keySpacing) + bottomRowGap; const int bkSpacing = metrics.keyboardBottomKeySpacing; const int contentTotalWidth = COLS * keyWidth + (COLS - 1) * keySpacing; @@ -325,8 +327,8 @@ void KeyboardEntryActivity::render(RenderLock&&) { const int keyX = leftMargin + i * (bottomKeyWidth + bkSpacing); const bool isSelected = bottomSelected && i == selectedCol; - GUI.drawKeyboardKey(renderer, Rect{keyX, bottomRowY, bottomKeyWidth, keyHeight}, bottomKeys[i].label, isSelected, - nullptr, bottomKeys[i].themeType); + GUI.drawKeyboardKey(renderer, Rect{keyX, bottomRowY, bottomKeyWidth, bottomKeyHeight}, bottomKeys[i].label, + isSelected, nullptr, bottomKeys[i].themeType); } const auto labels = mappedInput.mapLabels(tr(STR_BACK), tr(STR_SELECT), tr(STR_DIR_LEFT), tr(STR_DIR_RIGHT)); diff --git a/src/components/themes/BaseTheme.cpp b/src/components/themes/BaseTheme.cpp index 4edfb5b5..863eac45 100644 --- a/src/components/themes/BaseTheme.cpp +++ b/src/components/themes/BaseTheme.cpp @@ -884,8 +884,8 @@ void BaseTheme::drawTextField(const GfxRenderer& renderer, Rect rect, const int const int bracketHeight = lineHeight; const int fieldLeft = rect.x + 10; const int fieldRight = rect.x + rect.width - 15; - const int topY = rect.y; - const int bottomY = rect.y + rect.height + lineHeight; + const int topY = rect.y - 5; + const int bottomY = rect.y + rect.height + lineHeight + 5; const int tickLen = bracketHeight / 2; renderer.drawLine(fieldLeft, topY, fieldLeft, bottomY); @@ -937,10 +937,11 @@ void BaseTheme::drawKeyboardKey(const GfxRenderer& renderer, Rect rect, const ch const int itemWidth = renderer.getTextWidth(fontId, label); const int textX = rect.x + (rect.width - itemWidth) / 2; const int textY = rect.y + (rect.height - renderer.getLineHeight(fontId)) / 2 + primaryOffset; - renderer.drawText(fontId, textX, textY, label, !isSelected); if (hasSecondary) { const int secWidth = renderer.getTextWidth(SMALL_FONT_ID, secondaryLabel); - renderer.drawText(SMALL_FONT_ID, rect.x + rect.width - secWidth - 1, rect.y - 3, secondaryLabel, !isSelected); + renderer.drawText(SMALL_FONT_ID, rect.x + rect.width - secWidth - 1, rect.y, secondaryLabel, !isSelected); } + + renderer.drawText(fontId, textX, textY, label, !isSelected); } diff --git a/src/components/themes/BaseTheme.h b/src/components/themes/BaseTheme.h index 920912a7..602f2b24 100644 --- a/src/components/themes/BaseTheme.h +++ b/src/components/themes/BaseTheme.h @@ -60,6 +60,7 @@ struct ThemeMetrics { int keyboardKeyWidth; int keyboardKeyHeight; int keyboardKeySpacing; + int keyboardBottomKeyHeight; int keyboardBottomKeySpacing; bool keyboardBottomAligned; bool keyboardCenteredText; @@ -100,12 +101,13 @@ constexpr ThemeMetrics values = {.batteryWidth = 15, .statusBarHorizontalMargin = 5, .statusBarVerticalMargin = 19, .keyboardKeyWidth = 22, - .keyboardKeyHeight = 30, - .keyboardKeySpacing = 10, - .keyboardBottomKeySpacing = 0, + .keyboardKeyHeight = 40, + .keyboardKeySpacing = 0, + .keyboardBottomKeyHeight = 35, + .keyboardBottomKeySpacing = 5, .keyboardBottomAligned = true, .keyboardCenteredText = false, - .keyboardVerticalOffset = -10}; + .keyboardVerticalOffset = -13}; } class BaseTheme { diff --git a/src/components/themes/lyra/Lyra3CoversTheme.h b/src/components/themes/lyra/Lyra3CoversTheme.h index 3c17ec86..958ced5a 100644 --- a/src/components/themes/lyra/Lyra3CoversTheme.h +++ b/src/components/themes/lyra/Lyra3CoversTheme.h @@ -34,12 +34,13 @@ constexpr ThemeMetrics values = {.batteryWidth = 16, .statusBarHorizontalMargin = 5, .statusBarVerticalMargin = 19, .keyboardKeyWidth = 31, - .keyboardKeyHeight = 50, + .keyboardKeyHeight = 40, .keyboardKeySpacing = 0, + .keyboardBottomKeyHeight = 35, .keyboardBottomKeySpacing = 5, .keyboardBottomAligned = true, .keyboardCenteredText = true, - .keyboardVerticalOffset = 0}; + .keyboardVerticalOffset = -7}; } class Lyra3CoversTheme : public LyraTheme { diff --git a/src/components/themes/lyra/LyraTheme.h b/src/components/themes/lyra/LyraTheme.h index 08f0ebaa..6caf05c4 100644 --- a/src/components/themes/lyra/LyraTheme.h +++ b/src/components/themes/lyra/LyraTheme.h @@ -34,10 +34,11 @@ constexpr ThemeMetrics values = {.batteryWidth = 16, .keyboardKeyWidth = 31, .keyboardKeyHeight = 40, .keyboardKeySpacing = 0, + .keyboardBottomKeyHeight = 35, .keyboardBottomKeySpacing = 5, .keyboardBottomAligned = true, .keyboardCenteredText = true, - .keyboardVerticalOffset = -12}; + .keyboardVerticalOffset = -7}; } class LyraTheme : public BaseTheme {