fix: epub images not rendering correctly on x3 (#1572)

Replace hardcoded DISPLAY_WIDTH, DISPLAY_HEIGHT, and DISPLAY_WIDTH_BYTES
constants with runtime values from display object to support multiple
device models (X3 and X4) with different screen dimensions.
This commit is contained in:
Justin Mitchell
2026-04-07 19:16:59 -05:00
committed by GitHub
parent cff3e12a0a
commit 6cd19f5619
2 changed files with 15 additions and 10 deletions
+10 -5
View File
@@ -15,6 +15,7 @@
struct DirectPixelWriter {
uint8_t* fb;
GfxRenderer::RenderMode mode;
uint16_t displayWidthBytes; // Runtime framebuffer stride (X4: 100, X3: 99)
// Orientation is collapsed into a linear transform:
// phyX = phyXBase + x * phyXStepX + y * phyXStepY
@@ -29,12 +30,16 @@ struct DirectPixelWriter {
void init(GfxRenderer& renderer) {
fb = renderer.getFrameBuffer();
mode = renderer.getRenderMode();
displayWidthBytes = display.getDisplayWidthBytes();
const int phyW = display.getDisplayWidth();
const int phyH = display.getDisplayHeight();
switch (renderer.getOrientation()) {
case GfxRenderer::Portrait:
// phyX = y, phyY = (DISPLAY_HEIGHT-1) - x
phyXBase = 0;
phyYBase = HalDisplay::DISPLAY_HEIGHT - 1;
phyYBase = phyH - 1;
phyXStepX = 0;
phyYStepX = -1;
phyXStepY = 1;
@@ -42,8 +47,8 @@ struct DirectPixelWriter {
break;
case GfxRenderer::LandscapeClockwise:
// phyX = (DISPLAY_WIDTH-1) - x, phyY = (DISPLAY_HEIGHT-1) - y
phyXBase = HalDisplay::DISPLAY_WIDTH - 1;
phyYBase = HalDisplay::DISPLAY_HEIGHT - 1;
phyXBase = phyW - 1;
phyYBase = phyH - 1;
phyXStepX = -1;
phyYStepX = 0;
phyXStepY = 0;
@@ -51,7 +56,7 @@ struct DirectPixelWriter {
break;
case GfxRenderer::PortraitInverted:
// phyX = (DISPLAY_WIDTH-1) - y, phyY = x
phyXBase = HalDisplay::DISPLAY_WIDTH - 1;
phyXBase = phyW - 1;
phyYBase = 0;
phyXStepX = 0;
phyYStepX = 1;
@@ -115,7 +120,7 @@ struct DirectPixelWriter {
const int phyX = rowPhyXBase + logicalX * phyXStepX;
const int phyY = rowPhyYBase + logicalX * phyYStepX;
const uint16_t byteIndex = phyY * HalDisplay::DISPLAY_WIDTH_BYTES + (phyX >> 3);
const uint16_t byteIndex = phyY * displayWidthBytes + (phyX >> 3);
const uint8_t bitMask = 1 << (7 - (phyX & 7));
if (state) {