mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-06 15:47:39 +03:00
Center title on screen, then fallback to centering in available space
This commit is contained in:
parent
6905dbd23a
commit
86cd04f855
@ -447,10 +447,16 @@ void EpubReaderActivity::renderStatusBar(const int orientedMarginRight, const in
|
|||||||
if (showChapterTitle) {
|
if (showChapterTitle) {
|
||||||
// Centered chatper title text
|
// Centered chatper title text
|
||||||
// Page width minus existing content with 30px padding on each side
|
// Page width minus existing content with 30px padding on each side
|
||||||
|
const int rendererableScreenWidth = renderer.getScreenWidth() - orientedMarginLeft - orientedMarginRight;
|
||||||
|
|
||||||
const int batterySize = showBattery ? (showBatteryPercentage ? 50 : 20) : 0;
|
const int batterySize = showBattery ? (showBatteryPercentage ? 50 : 20) : 0;
|
||||||
const int titleMarginLeft = batterySize + 30 + orientedMarginLeft;
|
const int titleMarginLeft = batterySize + 30;
|
||||||
const int titleMarginRight = progressTextWidth + 30 + orientedMarginRight;
|
const int titleMarginRight = progressTextWidth + 30;
|
||||||
const int availableTextWidth = renderer.getScreenWidth() - titleMarginLeft - titleMarginRight;
|
|
||||||
|
// Attempt to center title on the screen, but if title is too wide then later we will center it within the
|
||||||
|
// available space.
|
||||||
|
int titleMarginLeftAdjusted = std::max(titleMarginLeft, titleMarginRight);
|
||||||
|
int availableTitleSpace = rendererableScreenWidth - 2 * titleMarginLeftAdjusted;
|
||||||
const int tocIndex = epub->getTocIndexForSpineIndex(currentSpineIndex);
|
const int tocIndex = epub->getTocIndexForSpineIndex(currentSpineIndex);
|
||||||
|
|
||||||
std::string title;
|
std::string title;
|
||||||
@ -462,12 +468,18 @@ void EpubReaderActivity::renderStatusBar(const int orientedMarginRight, const in
|
|||||||
const auto tocItem = epub->getTocItem(tocIndex);
|
const auto tocItem = epub->getTocItem(tocIndex);
|
||||||
title = tocItem.title;
|
title = tocItem.title;
|
||||||
titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str());
|
titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str());
|
||||||
while (titleWidth > availableTextWidth && title.length() > 11) {
|
if (titleWidth > availableTitleSpace) {
|
||||||
|
// Not enough space to center on the screen, center it within the remaining space instead
|
||||||
|
availableTitleSpace = rendererableScreenWidth - titleMarginLeft - titleMarginRight;
|
||||||
|
titleMarginLeftAdjusted = titleMarginLeft;
|
||||||
|
}
|
||||||
|
while (titleWidth > availableTitleSpace && title.length() > 11) {
|
||||||
title.replace(title.length() - 8, 8, "...");
|
title.replace(title.length() - 8, 8, "...");
|
||||||
titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str());
|
titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer.drawText(SMALL_FONT_ID, titleMarginLeft + (availableTextWidth - titleWidth) / 2, textY, title.c_str());
|
renderer.drawText(SMALL_FONT_ID, titleMarginLeftAdjusted + orientedMarginLeft + (availableTitleSpace - titleWidth) / 2, textY,
|
||||||
|
title.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user