Review comment
This commit is contained in:
@@ -226,6 +226,19 @@ bool Page::hasPlaceholderImages(const bool forceLoadLargeImages) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Page::allImagesArePlaceholders(const bool forceLoadLargeImages) const {
|
||||||
|
bool anyImage = false;
|
||||||
|
for (const auto& el : elements) {
|
||||||
|
if (el->getTag() == TAG_PageImage) {
|
||||||
|
anyImage = true;
|
||||||
|
if (!static_cast<const PageImage&>(*el).getImageBlock().wouldShowPlaceholder(forceLoadLargeImages)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return anyImage;
|
||||||
|
}
|
||||||
|
|
||||||
void Page::renderTextOnly(GfxRenderer& renderer, const int fontId, const int xOffset, const int yOffset) const {
|
void Page::renderTextOnly(GfxRenderer& renderer, const int fontId, const int xOffset, const int yOffset) const {
|
||||||
for (auto& element : elements) {
|
for (auto& element : elements) {
|
||||||
if (element->getTag() == TAG_PageLine) {
|
if (element->getTag() == TAG_PageLine) {
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ class Page {
|
|||||||
void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset, bool forceLoadLargeImages = true) const;
|
void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset, bool forceLoadLargeImages = true) const;
|
||||||
void renderTextOnly(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) const;
|
void renderTextOnly(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) const;
|
||||||
bool hasPlaceholderImages(bool forceLoadLargeImages) const;
|
bool hasPlaceholderImages(bool forceLoadLargeImages) const;
|
||||||
|
bool allImagesArePlaceholders(bool forceLoadLargeImages) const;
|
||||||
bool serialize(FsFile& file) const;
|
bool serialize(FsFile& file) const;
|
||||||
static std::unique_ptr<Page> deserialize(FsFile& file);
|
static std::unique_ptr<Page> deserialize(FsFile& file);
|
||||||
|
|
||||||
|
|||||||
@@ -1964,8 +1964,10 @@ void EpubReaderActivity::renderContents(std::unique_ptr<Page> page, const int or
|
|||||||
const bool effectiveForceLoad = forceLoadLargeImages || !SETTINGS.largeImagePlaceholder;
|
const bool effectiveForceLoad = forceLoadLargeImages || !SETTINGS.largeImagePlaceholder;
|
||||||
pageHasPlaceholders = page->hasPlaceholderImages(effectiveForceLoad);
|
pageHasPlaceholders = page->hasPlaceholderImages(effectiveForceLoad);
|
||||||
|
|
||||||
// Force special handling for pages with real (non-placeholder) images when anti-aliasing is on
|
// Force special handling for pages with at least one real (decoded) image when anti-aliasing is on.
|
||||||
bool imagePageWithAA = page->hasImages() && !pageHasPlaceholders && aaEnabledForThisRender;
|
// Mixed pages (some decoded, some placeholder) still need the AA codepath.
|
||||||
|
bool imagePageWithAA =
|
||||||
|
page->hasImages() && !page->allImagesArePlaceholders(effectiveForceLoad) && aaEnabledForThisRender;
|
||||||
bool forceHalfRefreshThisPage = pendingHalfRefreshAfterImagePage && SETTINGS.halfRefreshAfterImagePage;
|
bool forceHalfRefreshThisPage = pendingHalfRefreshAfterImagePage && SETTINGS.halfRefreshAfterImagePage;
|
||||||
pendingHalfRefreshAfterImagePage = false;
|
pendingHalfRefreshAfterImagePage = false;
|
||||||
lastRenderStats.imagePageWithAA = imagePageWithAA;
|
lastRenderStats.imagePageWithAA = imagePageWithAA;
|
||||||
@@ -2066,9 +2068,9 @@ void EpubReaderActivity::renderContents(std::unique_ptr<Page> page, const int or
|
|||||||
LOG_INF("ERS", "Skipping grayscale/BW-restore for this page (insufficient heap for BW snapshot)");
|
LOG_INF("ERS", "Skipping grayscale/BW-restore for this page (insufficient heap for BW snapshot)");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only schedule the half-refresh if real images were decoded on this page.
|
// Only schedule the half-refresh if at least one real image was decoded on this page.
|
||||||
// Placeholder-only pages don't deposit grayscale data that needs settling.
|
// Placeholder-only pages don't deposit grayscale data that needs settling.
|
||||||
if (page->hasImages() && !pageHasPlaceholders &&
|
if (page->hasImages() && !page->allImagesArePlaceholders(effectiveForceLoad) &&
|
||||||
getEffectiveImageRendering() != CrossPointSettings::IMAGES_SUPPRESS) {
|
getEffectiveImageRendering() != CrossPointSettings::IMAGES_SUPPRESS) {
|
||||||
pendingHalfRefreshAfterImagePage = true;
|
pendingHalfRefreshAfterImagePage = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user