From 6648a980cb80d720f2d8db08819c14977dfd7e1f Mon Sep 17 00:00:00 2001 From: Justin Mitchell <1875695+itsthisjustin@users.noreply.github.com> Date: Wed, 17 Jun 2026 01:41:10 -0400 Subject: [PATCH] Center row icons between title and subtitle When a row has a subtitle, position the icon at the midpoint between the title and subtitle text centers instead of aligning only with the title. This prevents icons from appearing too high when subtitles are present. --- src/components/icons/generated_icons.h | 16 ++++++++-------- src/components/themes/lyra/LyraTheme.cpp | 11 +++++++++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/components/icons/generated_icons.h b/src/components/icons/generated_icons.h index 8eec8070..c9e35b6b 100644 --- a/src/components/icons/generated_icons.h +++ b/src/components/icons/generated_icons.h @@ -75,15 +75,15 @@ static const freeink::Icon icon_transfer_40 = {40, 40, 19, icon_transfer_40_bits static const uint8_t icon_transfer_48_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x40, 0x1F, 0xFF, 0xFF, 0xFF, 0xF8, 0x70, 0x07, 0xFF, 0xFF, 0xFF, 0xFC, 0x3C, 0x01, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0x80, 0x3F, 0xFF, 0xFF, 0xFC, 0x3F, 0xE0, 0x0F, 0xFF, 0xFF, 0xFE, 0x1F, 0xF8, 0x03, 0xFF, 0xFF, 0xFE, 0x1F, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0x0F, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0x87, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x87, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0x87, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0x87, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0x0F, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0xFE, 0x0F, 0xFF, 0x80, 0x3F, 0xFF, 0xFE, 0x1F, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x1F, 0xF8, 0x03, 0xFF, 0xFF, 0xFC, 0x3F, 0xE0, 0x0F, 0xFF, 0xFF, 0xFC, 0x3F, 0x80, 0x3F, 0xFF, 0xFF, 0xFC, 0x3C, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x70, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, 0x40, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; static const freeink::Icon icon_transfer_48 = {48, 48, 24, icon_transfer_48_bits}; -// library (lucide: library-big) -static const uint8_t icon_library_24_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x19, 0xFF, 0xC0, 0x00, 0xFF, 0xCC, 0xC4, 0xFF, 0xCC, 0xCE, 0x7F, 0xCC, 0xC6, 0x7F, 0xCC, 0xC6, 0x7F, 0xCC, 0xC7, 0x3F, 0xCC, 0xC3, 0x3F, 0xCC, 0xC3, 0x3F, 0xCC, 0xC3, 0x9F, 0xCC, 0xC9, 0x9F, 0xCC, 0xC9, 0x9F, 0xCC, 0xCD, 0xCF, 0xCC, 0xCC, 0xCF, 0xCC, 0xCC, 0xE7, 0xCC, 0xCE, 0x67, 0xCC, 0xCE, 0x67, 0xCC, 0xCE, 0x67, 0xC0, 0x0F, 0x07, 0xE0, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +// library (lucide: library) +static const uint8_t icon_library_24_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xE6, 0x7F, 0xE7, 0xE6, 0x7F, 0xE6, 0x66, 0x7F, 0xE6, 0x67, 0x3F, 0xE6, 0x67, 0x3F, 0xE6, 0x67, 0x3F, 0xE6, 0x67, 0x9F, 0xE6, 0x67, 0x9F, 0xE6, 0x67, 0x9F, 0xE6, 0x67, 0x9F, 0xE6, 0x67, 0xCF, 0xE6, 0x67, 0xCF, 0xE6, 0x67, 0xCF, 0xE6, 0x67, 0xE7, 0xE6, 0x67, 0xE7, 0xE6, 0x67, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; static const freeink::Icon icon_library_24 = {24, 24, 12, icon_library_24_bits}; -static const uint8_t icon_library_32_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0x0F, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xE7, 0x18, 0x07, 0xFF, 0xE7, 0x18, 0xE3, 0xFF, 0xE7, 0x18, 0xE3, 0xFF, 0xE7, 0x18, 0x71, 0xFF, 0xE7, 0x18, 0x71, 0xFF, 0xE7, 0x18, 0x79, 0xFF, 0xE7, 0x18, 0x38, 0xFF, 0xE7, 0x18, 0x38, 0xFF, 0xE7, 0x18, 0x1C, 0xFF, 0xE7, 0x18, 0x1C, 0x7F, 0xE7, 0x18, 0x9C, 0x7F, 0xE7, 0x18, 0x8E, 0x7F, 0xE7, 0x18, 0x8E, 0x3F, 0xE7, 0x18, 0xCE, 0x3F, 0xE7, 0x18, 0xC7, 0x3F, 0xE7, 0x18, 0xC7, 0x1F, 0xE7, 0x18, 0xE7, 0x9F, 0xE7, 0x18, 0xE3, 0x8F, 0xE7, 0x18, 0xE3, 0x8F, 0xE7, 0x18, 0xF1, 0xCF, 0xE7, 0x18, 0xF1, 0xCF, 0xE7, 0x18, 0xF8, 0x0F, 0xE0, 0x00, 0xF8, 0x0F, 0xF0, 0x01, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; -static const freeink::Icon icon_library_32 = {32, 32, 16, icon_library_32_bits}; -static const uint8_t icon_library_40_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x10, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xE1, 0xC7, 0x87, 0x1F, 0xFF, 0xE1, 0xC7, 0x8F, 0x1F, 0xFF, 0xE1, 0xC7, 0x87, 0x0F, 0xFF, 0xE1, 0xC7, 0x87, 0x8F, 0xFF, 0xE1, 0xC7, 0x87, 0x8F, 0xFF, 0xE1, 0xC7, 0x83, 0x87, 0xFF, 0xE1, 0xC7, 0x83, 0xC7, 0xFF, 0xE1, 0xC7, 0x83, 0xC3, 0xFF, 0xE1, 0xC7, 0x81, 0xE3, 0xFF, 0xE1, 0xC7, 0x81, 0xE3, 0xFF, 0xE1, 0xC7, 0x81, 0xE1, 0xFF, 0xE1, 0xC7, 0x80, 0xF1, 0xFF, 0xE1, 0xC7, 0x88, 0xF1, 0xFF, 0xE1, 0xC7, 0x88, 0x70, 0xFF, 0xE1, 0xC7, 0x8C, 0x78, 0xFF, 0xE1, 0xC7, 0x8C, 0x78, 0xFF, 0xE1, 0xC7, 0x8C, 0x38, 0x7F, 0xE1, 0xC7, 0x8E, 0x3C, 0x7F, 0xE1, 0xC7, 0x8E, 0x3C, 0x3F, 0xE1, 0xC7, 0x8E, 0x1C, 0x3F, 0xE1, 0xC7, 0x8F, 0x1E, 0x3F, 0xE1, 0xC7, 0x8F, 0x1E, 0x1F, 0xE1, 0xC7, 0x8F, 0x0F, 0x1F, 0xE1, 0xC7, 0x8F, 0x8F, 0x1F, 0xE1, 0xC7, 0x8F, 0x87, 0x0F, 0xE1, 0xC7, 0x8F, 0x87, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0xF0, 0x00, 0x0F, 0xC0, 0x1F, 0xF0, 0x00, 0x1F, 0xE0, 0x7F, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; -static const freeink::Icon icon_library_40 = {40, 40, 20, icon_library_40_bits}; -static const uint8_t icon_library_48_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xC7, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0x10, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF8, 0x7F, 0xFF, 0xF0, 0xF0, 0xF0, 0xF8, 0x7F, 0xFF, 0xF0, 0xF0, 0xF0, 0x78, 0x7F, 0xFF, 0xF0, 0xF0, 0xF0, 0x7C, 0x3F, 0xFF, 0xF0, 0xF0, 0xF0, 0x7C, 0x3F, 0xFF, 0xF0, 0xF0, 0xF0, 0x3C, 0x3F, 0xFF, 0xF0, 0xF0, 0xF0, 0x3E, 0x1F, 0xFF, 0xF0, 0xF0, 0xF0, 0x1E, 0x1F, 0xFF, 0xF0, 0xF0, 0xF0, 0x1E, 0x0F, 0xFF, 0xF0, 0xF0, 0xF0, 0x1F, 0x0F, 0xFF, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xFF, 0xF0, 0xF0, 0xF0, 0x0F, 0x07, 0xFF, 0xF0, 0xF0, 0xF0, 0x0F, 0x87, 0xFF, 0xF0, 0xF0, 0xF0, 0x87, 0x87, 0xFF, 0xF0, 0xF0, 0xF0, 0x87, 0xC3, 0xFF, 0xF0, 0xF0, 0xF0, 0x87, 0xC3, 0xFF, 0xF0, 0xF0, 0xF0, 0xC3, 0xC3, 0xFF, 0xF0, 0xF0, 0xF0, 0xC3, 0xE1, 0xFF, 0xF0, 0xF0, 0xF0, 0xC1, 0xE1, 0xFF, 0xF0, 0xF0, 0xF0, 0xE1, 0xE1, 0xFF, 0xF0, 0xF0, 0xF0, 0xE1, 0xF0, 0xFF, 0xF0, 0xF0, 0xF0, 0xE0, 0xF0, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x7F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0x7F, 0xF0, 0xF0, 0xF0, 0xF8, 0x78, 0x7F, 0xF0, 0xF0, 0xF0, 0xF8, 0x7C, 0x3F, 0xF0, 0xF0, 0xF0, 0xF8, 0x7C, 0x3F, 0xF0, 0xF0, 0xF0, 0xFC, 0x3C, 0x3F, 0xF0, 0xF0, 0xF0, 0xFC, 0x3E, 0x1F, 0xF0, 0xF0, 0xF0, 0xFC, 0x3E, 0x1F, 0xF0, 0xF0, 0xF0, 0xFE, 0x10, 0x1F, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x7F, 0xF8, 0x00, 0x01, 0xFF, 0x01, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; -static const freeink::Icon icon_library_48 = {48, 48, 24, icon_library_48_bits}; +static const uint8_t icon_library_32_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xF1, 0xFE, 0x73, 0xFF, 0xF1, 0xFE, 0x71, 0xFF, 0xF1, 0xDE, 0x71, 0xFF, 0xF1, 0x8E, 0x79, 0xFF, 0xF1, 0x8E, 0x78, 0xFF, 0xF1, 0x8E, 0x78, 0xFF, 0xF1, 0x8E, 0x7C, 0xFF, 0xF1, 0x8E, 0x7C, 0x7F, 0xF1, 0x8E, 0x7C, 0x7F, 0xF1, 0x8E, 0x7C, 0x7F, 0xF1, 0x8E, 0x7E, 0x7F, 0xF1, 0x8E, 0x7E, 0x3F, 0xF1, 0x8E, 0x7E, 0x3F, 0xF1, 0x8E, 0x7F, 0x3F, 0xF1, 0x8E, 0x7F, 0x1F, 0xF1, 0x8E, 0x7F, 0x1F, 0xF1, 0x8E, 0x7F, 0x1F, 0xF1, 0x8E, 0x7F, 0x9F, 0xF1, 0x8E, 0x7F, 0x8F, 0xF1, 0x8E, 0x7F, 0x8F, 0xF3, 0xCE, 0x7F, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +static const freeink::Icon icon_library_32 = {32, 32, 17, icon_library_32_bits}; +static const uint8_t icon_library_40_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xDF, 0xFF, 0xF8, 0xFF, 0xE7, 0x8F, 0xFF, 0xF8, 0xFF, 0xC3, 0x8F, 0xFF, 0xF8, 0xFF, 0xC3, 0x87, 0xFF, 0xF8, 0xF1, 0xC3, 0xC7, 0xFF, 0xF8, 0xF1, 0xC3, 0xC7, 0xFF, 0xF8, 0xF1, 0xC3, 0xC3, 0xFF, 0xF8, 0xF1, 0xC3, 0xE3, 0xFF, 0xF8, 0xF1, 0xC3, 0xE3, 0xFF, 0xF8, 0xF1, 0xC3, 0xE3, 0xFF, 0xF8, 0xF1, 0xC3, 0xE1, 0xFF, 0xF8, 0xF1, 0xC3, 0xF1, 0xFF, 0xF8, 0xF1, 0xC3, 0xF1, 0xFF, 0xF8, 0xF1, 0xC3, 0xF0, 0xFF, 0xF8, 0xF1, 0xC3, 0xF8, 0xFF, 0xF8, 0xF1, 0xC3, 0xF8, 0xFF, 0xF8, 0xF1, 0xC3, 0xF8, 0xFF, 0xF8, 0xF1, 0xC3, 0xF8, 0x7F, 0xF8, 0xF1, 0xC3, 0xFC, 0x7F, 0xF8, 0xF1, 0xC3, 0xFC, 0x7F, 0xF8, 0xF1, 0xC3, 0xFC, 0x3F, 0xF8, 0xF1, 0xC3, 0xFE, 0x3F, 0xF8, 0xF1, 0xC3, 0xFE, 0x3F, 0xF8, 0xF1, 0xC3, 0xFE, 0x3F, 0xF8, 0xF1, 0xC3, 0xFE, 0x1F, 0xF8, 0xF1, 0xC3, 0xFF, 0x1F, 0xFC, 0xF3, 0xE7, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +static const freeink::Icon icon_library_40 = {40, 40, 21, icon_library_40_bits}; +static const uint8_t icon_library_48_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFE, 0x7E, 0x7F, 0xFF, 0xFC, 0x3F, 0xFC, 0x3C, 0x3F, 0xFF, 0xFC, 0x3F, 0xFC, 0x3C, 0x3F, 0xFF, 0xFC, 0x3F, 0xFC, 0x3C, 0x3F, 0xFF, 0xFC, 0x3E, 0x7C, 0x3E, 0x1F, 0xFF, 0xFC, 0x3C, 0x3C, 0x3E, 0x1F, 0xFF, 0xFC, 0x3C, 0x3C, 0x3E, 0x1F, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0x0F, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0x0F, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0x0F, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0x0F, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0x87, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0x87, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0x87, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xC3, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xC3, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xC3, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xC3, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xE1, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xE1, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xE1, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xF0, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xF0, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xF0, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xF0, 0xFF, 0xFC, 0x3C, 0x3C, 0x3F, 0xF8, 0x7F, 0xFC, 0x3C, 0x3C, 0x3F, 0xF8, 0x7F, 0xFC, 0x3C, 0x3C, 0x3F, 0xF8, 0x7F, 0xFC, 0x3C, 0x3C, 0x3F, 0xFC, 0x3F, 0xFC, 0x3C, 0x3C, 0x3F, 0xFC, 0x3F, 0xFC, 0x3C, 0x3C, 0x3F, 0xFC, 0x3F, 0xFE, 0x7E, 0x7E, 0x7F, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +static const freeink::Icon icon_library_48 = {48, 48, 25, icon_library_48_bits}; // wifi (lucide: wifi) static const uint8_t icon_wifi_24_bits[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0x00, 0x1F, 0xF0, 0xFF, 0x0F, 0xC3, 0xFF, 0xC3, 0x8F, 0xFF, 0xF1, 0x9F, 0x81, 0xF9, 0xFE, 0x00, 0x7F, 0xF8, 0x7E, 0x1F, 0xF1, 0xFF, 0x8F, 0xF3, 0xFF, 0xCF, 0xFF, 0xC3, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; diff --git a/src/components/themes/lyra/LyraTheme.cpp b/src/components/themes/lyra/LyraTheme.cpp index 1a13590c..9ee7f47c 100644 --- a/src/components/themes/lyra/LyraTheme.cpp +++ b/src/components/themes/lyra/LyraTheme.cpp @@ -315,8 +315,15 @@ void LyraTheme::drawList(const GfxRenderer& renderer, Rect rect, int itemCount, if (rowIcon != nullptr) { const freeink::Icon* ic = pickIcon(rowIcon(i), drawnIconPx); if (ic != nullptr) { - // Place the icon's baked-in optical center on the title's optical center. - const int textCenter = titleTop + renderer.getTextVisualCenterOffset(UI_10_FONT_ID); + // Place the icon's baked-in optical center on the row's text center. For rows + // with a subtitle, center across both lines (title near the top, subtitle at + // itemY + 30) so the icon sits in the middle of the stacked block rather than + // riding up with the title alone. + int textCenter = titleTop + renderer.getTextVisualCenterOffset(UI_10_FONT_ID); + if (rowSubtitle != nullptr) { + const int subtitleCenter = itemY + 30 + renderer.getTextVisualCenterOffset(SMALL_FONT_ID); + textCenter = (textCenter + subtitleCenter) / 2; + } renderer.drawIcon(*ic, rect.x + M().contentSidePadding + hPaddingInSelection, textCenter - ic->opticalCenterY); }