Refresh the cached frame when the selected book changes.
This commit is contained in:
@@ -235,8 +235,20 @@ bool LyraCarouselTheme::tryFastHomeRender(GfxRenderer& renderer, const std::vect
|
|||||||
const bool inCarouselRow = (selectorIndex < bookCount);
|
const bool inCarouselRow = (selectorIndex < bookCount);
|
||||||
const int centerIdx =
|
const int centerIdx =
|
||||||
inCarouselRow ? selectorIndex : (lastCarouselSelectorIndex >= 0 ? lastCarouselSelectorIndex : 0);
|
inCarouselRow ? selectorIndex : (lastCarouselSelectorIndex >= 0 ? lastCarouselSelectorIndex : 0);
|
||||||
const int slotIdx = findFrameSlot(centerIdx);
|
int slotIdx = findFrameSlot(centerIdx);
|
||||||
if (slotIdx < 0 || !gCachedFrames[slotIdx]) return false;
|
if (slotIdx < 0) {
|
||||||
|
slotIdx = 0;
|
||||||
|
}
|
||||||
|
if (!gCachedFrames[slotIdx]) {
|
||||||
|
gCachedFrames[slotIdx] = static_cast<uint8_t*>(malloc(bufferSize));
|
||||||
|
if (!gCachedFrames[slotIdx]) {
|
||||||
|
LOG_ERR("CAROUSEL", "tryFastHomeRender: malloc failed for frame %d", slotIdx);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (findFrameSlot(centerIdx) < 0 || gCachedFrameBookIdx[slotIdx] != centerIdx) {
|
||||||
|
renderOneCarouselFrame(renderer, recentBooks, centerIdx, slotIdx, metrics);
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(frameBuffer, gCachedFrames[slotIdx], bufferSize);
|
memcpy(frameBuffer, gCachedFrames[slotIdx], bufferSize);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user