Use and populate metadata
This commit is contained in:
@@ -482,6 +482,7 @@ void BaseTheme::drawRecentBookCover(GfxRenderer& renderer, Rect rect, const std:
|
||||
if (hasContinueReading) {
|
||||
const std::string& lastBookTitle = recentBooks[0].title;
|
||||
const std::string& lastBookAuthor = recentBooks[0].author;
|
||||
const std::string& lastBookSeries = recentBooks[0].series;
|
||||
|
||||
// Invert text colors based on selection state:
|
||||
// - With cover: selected = white text on black box, unselected = black text on white box
|
||||
@@ -494,6 +495,9 @@ void BaseTheme::drawRecentBookCover(GfxRenderer& renderer, Rect rect, const std:
|
||||
if (!lastBookAuthor.empty()) {
|
||||
totalTextHeight += renderer.getLineHeight(UI_10_FONT_ID) * 3 / 2;
|
||||
}
|
||||
if (!lastBookSeries.empty()) {
|
||||
totalTextHeight += renderer.getLineHeight(UI_12_FONT_ID);
|
||||
}
|
||||
|
||||
// Vertically center the title block within the card
|
||||
int titleYStart = bookY + (bookHeight - totalTextHeight) / 2;
|
||||
@@ -501,8 +505,11 @@ void BaseTheme::drawRecentBookCover(GfxRenderer& renderer, Rect rect, const std:
|
||||
const auto truncatedAuthor = lastBookAuthor.empty()
|
||||
? std::string{}
|
||||
: renderer.truncatedText(UI_10_FONT_ID, lastBookAuthor.c_str(), bookWidth - 40);
|
||||
const auto truncatedSeries = lastBookSeries.empty()
|
||||
? std::string{}
|
||||
: renderer.truncatedText(UI_12_FONT_ID, lastBookSeries.c_str(), bookWidth - 40);
|
||||
|
||||
// If cover image was rendered, draw box behind title and author
|
||||
// If cover image was rendered, draw box behind title, author, and series
|
||||
if (coverRendered) {
|
||||
constexpr int boxPadding = 8;
|
||||
// Calculate the max text width for the box
|
||||
@@ -519,6 +526,12 @@ void BaseTheme::drawRecentBookCover(GfxRenderer& renderer, Rect rect, const std:
|
||||
maxTextWidth = authorWidth;
|
||||
}
|
||||
}
|
||||
if (!truncatedSeries.empty()) {
|
||||
const int seriesWidth = renderer.getTextWidth(UI_12_FONT_ID, truncatedSeries.c_str());
|
||||
if (seriesWidth > maxTextWidth) {
|
||||
maxTextWidth = seriesWidth;
|
||||
}
|
||||
}
|
||||
|
||||
const int boxWidth = maxTextWidth + boxPadding * 2;
|
||||
const int boxHeight = totalTextHeight + boxPadding * 2;
|
||||
@@ -539,6 +552,11 @@ void BaseTheme::drawRecentBookCover(GfxRenderer& renderer, Rect rect, const std:
|
||||
if (!truncatedAuthor.empty()) {
|
||||
titleYStart += renderer.getLineHeight(UI_10_FONT_ID) / 2;
|
||||
renderer.drawCenteredText(UI_10_FONT_ID, titleYStart, truncatedAuthor.c_str(), !bookSelected);
|
||||
titleYStart += renderer.getLineHeight(UI_10_FONT_ID);
|
||||
}
|
||||
|
||||
if (!truncatedSeries.empty()) {
|
||||
renderer.drawCenteredText(UI_12_FONT_ID, titleYStart, truncatedSeries.c_str(), !bookSelected);
|
||||
}
|
||||
|
||||
// "Continue Reading" label at the bottom
|
||||
|
||||
@@ -487,10 +487,12 @@ void LyraTheme::drawRecentBookCover(GfxRenderer& renderer, Rect rect, const std:
|
||||
auto titleLines = renderer.wrappedText(UI_12_FONT_ID, book.title.c_str(), textWidth, 3, EpdFontFamily::BOLD);
|
||||
|
||||
auto author = renderer.truncatedText(UI_10_FONT_ID, book.author.c_str(), textWidth);
|
||||
auto series = renderer.truncatedText(UI_12_FONT_ID, book.series.c_str(), textWidth);
|
||||
const int titleLineHeight = renderer.getLineHeight(UI_12_FONT_ID);
|
||||
const int titleBlockHeight = titleLineHeight * static_cast<int>(titleLines.size());
|
||||
const int authorHeight = book.author.empty() ? 0 : (renderer.getLineHeight(UI_10_FONT_ID) * 3 / 2);
|
||||
const int totalBlockHeight = titleBlockHeight + authorHeight;
|
||||
const int seriesHeight = book.series.empty() ? 0 : renderer.getLineHeight(UI_12_FONT_ID);
|
||||
const int totalBlockHeight = titleBlockHeight + authorHeight + seriesHeight;
|
||||
int titleY = tileY + tileHeight / 2 - totalBlockHeight / 2;
|
||||
const int textX = tileX + hPaddingInSelection + coverWidth + LyraMetrics::values.verticalSpacing;
|
||||
for (const auto& line : titleLines) {
|
||||
@@ -500,6 +502,10 @@ void LyraTheme::drawRecentBookCover(GfxRenderer& renderer, Rect rect, const std:
|
||||
if (!book.author.empty()) {
|
||||
titleY += renderer.getLineHeight(UI_10_FONT_ID) / 2;
|
||||
renderer.drawText(UI_10_FONT_ID, textX, titleY, author.c_str(), true);
|
||||
titleY += renderer.getLineHeight(UI_10_FONT_ID);
|
||||
}
|
||||
if (!book.series.empty()) {
|
||||
renderer.drawText(UI_12_FONT_ID, textX, titleY, series.c_str(), true);
|
||||
}
|
||||
} else {
|
||||
drawEmptyRecents(renderer, rect);
|
||||
|
||||
Reference in New Issue
Block a user