Merge CrossInk 5.7.26#9
Merged
Merged
Conversation
Co-authored-by: Егор Мартынов <martynovegorOF@yandex.ru>
…r#1817) ## Summary Small simplification to node sorting algorithm in GfxRenderer::fillPolygon. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_
## Summary Small cleanup to avoid a dynamically allocated static structure for auto page-turn rate values. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_
## Summary * Add new block style stack to track accumulated styles * When dropping into nested block, apply new styles on last BlockStyle in the stack and push to the back * When leaving block, pop the stack * Fix issue where the image % width always went off screen width, use current container width based on accumulated styles * Bump section cache version to regenerate pages ## Additional Context Fixes crosspoint-reader#1581 more correctly, and includes fix from crosspoint-reader#1580 Consider: ```html <div class="c1"> <!-- marginLeft: 10px --> <div class="c2"> <!-- marginLeft: 20px --> <p class="c3">text</p> <!-- marginLeft: 5px --> </div> <p class="c4">text2</p> <!-- marginLeft: 5px --> </div> ``` | Element | Expected | Before crosspoint-reader#1581 (leaked) | After crosspoint-reader#1581 (reset) | This PR (style stack) | | --- | --- | --- | --- | --- | | `c3` | 10+20+5 = 35px | 35px | 25px | 35px | | `c4` | 10+5 = 15px | 35px (wrong, leaked c2) | 5px (wrong, lost c1) | 15px | This PR replaces the reset-on-close approach with a proper block style stack. When a block element opens, its resolved style is pushed onto the stack. When it closes, the stack pops back to the parent's style. This correctly accumulates nested margins/padding while preventing style leakage to siblings. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? Yes --------- Co-authored-by: Zach Nelson <zach@zdnelson.com>
## Summary * Add new block style stack to track accumulated styles * When dropping into nested block, apply new styles on last BlockStyle in the stack and push to the back * When leaving block, pop the stack * Fix issue where the image % width always went off screen width, use current container width based on accumulated styles * Bump section cache version to regenerate pages ## Additional Context Fixes crosspoint-reader#1581 more correctly, and includes fix from crosspoint-reader#1580 Consider: ```html <div class="c1"> <!-- marginLeft: 10px --> <div class="c2"> <!-- marginLeft: 20px --> <p class="c3">text</p> <!-- marginLeft: 5px --> </div> <p class="c4">text2</p> <!-- marginLeft: 5px --> </div> ``` | Element | Expected | Before crosspoint-reader#1581 (leaked) | After crosspoint-reader#1581 (reset) | This PR (style stack) | | --- | --- | --- | --- | --- | | `c3` | 10+20+5 = 35px | 35px | 25px | 35px | | `c4` | 10+5 = 15px | 35px (wrong, leaked c2) | 5px (wrong, lost c1) | 15px | This PR replaces the reset-on-close approach with a proper block style stack. When a block element opens, its resolved style is pushed onto the stack. When it closes, the stack pops back to the parent's style. This correctly accumulates nested margins/padding while preventing style leakage to siblings. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? Yes --------- Co-authored-by: Zach Nelson <zach@zdnelson.com>
) ## Summary Simplify code calculating compile-time array sizes with `sizeof(array)/sizeof(element)` to use `std::size`. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**PARTIALLY**_
…rosspoint-reader#1824) No description needed beyond title.
…bServerActivity (crosspoint-reader#1780) ## Summary * **What is the goal of this PR?** I was seeing hangs during File Transfer. Troubleshooting via serial showed it had to do with the SHUTTING_DOWN state. Strengthened the WiFi State Machine a bit and added self-healing. Additionally, I found it obnoxious to need to keep referring to serial for my wifi strength, so a dBm meter is added opposing the SSID when on the File Transfer page. * **What changes are included?** The dBm meter was at risk of causing rapid screen updates (if, say, we hovered right around a threshold), so I've implemented a basic hysteresis around this. RISING/FALLING would be more canonical variable names, but are reserved in the framework. ## Additional Context My X4 has a terrible antenna, apparently, and I was running into this failure condition pretty regularly. Wifi "bars" were chosen as a relatively pan-cultural glyph rather than relying on localization. Tested on hardware at -83 dBm under sustained EPUB upload (60 books, ~30 MB). Transient losses up to ~14s now ride through; pre-fix the same losses required a power-cycle after as little as a 2s blip. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? Nope. Commits are hand written. Claude was used to build a local test harness for validation only during iteration.
…r#1830) ## Summary Added RAM delta output to firmware_size_history.py output, e.g.: ``` % scripts/firmware_size_history.py --commits adcd796 8e18472 [info] Will restore to 'sd-card-fonts' when finished. [info] Stashing uncommitted changes... [info] Building 2 commits... [1/2] adcd796 feat: self-heal from transient WiFi loss, add dBm indicator during WebServerActivity (crosspoint-reader#1780) Building (env: default)... Flash: 5,751,209, RAM: 97,996 bytes [2/2] 8e18472 Merge branch 'master' into sd-card-fonts Building (env: default)... Flash: 5,762,395, RAM: 97,988 bytes [info] Restoring 'sd-card-fonts'... [info] Restoring stashed changes... Commit Flash Delta RAM Delta Title ────────── ─────────── ─────── ─────────── ─────── ──────────────────────────────────────── adcd796 5,751,209 97,996 feat: self-heal from transient WiFi loss, add dBm indicator during WebServerActivity (crosspoint-reader#1780) 8e18472 5,762,395 +11,186 97,988 -8 Merge branch 'master' into sd-card-fonts ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_
…lines (crosspoint-reader#1828) Co-authored-by: KymAndriy <mail@gmail.com>
…ader#1795) ## Summary * **What is the goal of this PR?** Fix the vertical misalignment between the "File Manager" title and the action buttons (Upload / New Folder / Delete Selected). * **What changes are included?** - `h2`: `margin-top: 0` → `margin: 0` — removes the default browser `margin-bottom` that was inflating the height of the header-left flex container, pushing the calculated flex center below the visual midpoint of the title text - `.page-header-left`: `align-items: baseline` → `align-items: center` — ensures the title and breadcrumbs are center-aligned with each other and with the buttons ### Before <img width="1198" height="560" alt="Screenshot From 2026-04-30 22-29-28" src="https://github.com/user-attachments/assets/b9a43069-cd93-4028-ab21-75be253ed1f0" /> ### After <img width="1198" height="560" alt="Screenshot From 2026-04-30 22-48-49" src="https://github.com/user-attachments/assets/b9977c65-e479-4490-8ec3-15ae99cfccd7" /> ## Additional Context Small CSS-only change, no JavaScript or HTML structure touched. --- ### AI Usage Did you use AI tools to help write this code? _**YES**_ Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
crosspoint-reader#1807) ## Summary * **What is the goal of this PR?** Fixes a bug in the jpeg nearest-neighbor downscaler where source image rows containing visible content may be cropped. * **What changes are included?** Split the single `fineScaleFP`/`invScaleFP` scale pair in `JpegToFramebufferConverter.cpp` into separate X (`fineScaleFPX`/`invScaleFPX`) and Y (`fineScaleFPY`/`invScaleFPY`) pairs ## Additional Context The one case that I encountered in my epub: <img width="480" height="37" alt="img_6_0" src="https://github.com/user-attachments/assets/0de3778c-cf3d-42dc-a1ba-4ba729f6b1c4" /> The image generated from pxc cache with the latest commit: <img width="464" height="36" alt="img_6_0_master pxc" src="https://github.com/user-attachments/assets/92ba06e5-be15-4db6-840e-882bdddb1baf" /> With this fix, the bottom outline of each character is still there: <img width="464" height="36" alt="img_6_0_fixed pxc" src="https://github.com/user-attachments/assets/4246ce55-5a20-480f-862f-7988f804c1fb" /> --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**PARTIALLY**_
## Summary Update the Open X4 SDK to point to the CrossPoint organization fork. This allows us to take SDK changes without being blocked on the upstream repository. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_
…reader#1837) ## Summary Simplify duplicated code in `XtcReaderActivity` to use `ReaderUtils::detectPageTurn`. This implementation is now shared with `EpubReaderActivity` and `TxtReaderActivity`. Also deduplicated the chapter skip time constant. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**PARTIALLY**_
## Summary Before, any sub-activity of a reader activity needed to override `isReaderActivity` to maintain correct bookkeeping through `ActivityManager::isReaderActivity`. We could easily miss this in any new sub-activities. Instead, simplify so each reader activity correctly reports and then `ActivityManager` checks for any reader activity in its stack. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_
crosspoint-reader#1853) When Power+Down is released with a slight stagger (Down before Power), the Power release event leaked through to the activity loop, triggering short-press Power actions like clip selection. Add a screenshotComboActive flag that suppresses all input processing until Power is fully released after a screenshot combo. ## Summary * **What is the goal of this PR?** (e.g., Implements the new feature for file uploading.) * **What changes are included?** ## Additional Context * Add any other information that might be helpful for the reviewer (e.g., performance implications, potential risks, specific areas to focus on). --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_
…t-reader#1845) ## Summary With the Roundraff theme selected and no recent books, the home screen menu shows a "Continue Reading" option and menu handling is offset by one ("Continue Reading" actually does "Browse Files", "File Transfer" actually does "Settings", etc.) Simple fix here is to omit the "Continue Reading" menu item when there are no recent books. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_
In src/network/WebDAVHandler.cpp
- added "#include <algorithm>" to top of file
- select lines 233-238:
for (const auto* item : HIDDEN_ITEMS) {
if (strcmp(name, item) == 0) {
shouldHide = true;
break;
}
}
- replace with:
shouldHide = std::any_of(std::begin(HIDDEN_ITEMS), std::end(HIDDEN_ITEMS),
[name](const char* item) { return strcmp(name, item) == 0; });
In src/network/WebDAVHandler.cpp
- added "#include <algorithm>" to top of file
- Replace lines 231-239 with:
// Skip hidden/protected items
bool shouldHide = (name[0] == '.');
if (!shouldHide) {
shouldHide = std::any_of(
std::begin(HIDDEN_ITEMS),
std::end(HIDDEN_ITEMS),
[name](const char* item) { return strcmp(name, item) == 0; }
);
}
ran PATH="/usr/lib/llvm-21/bin:$PATH" ./bin/clang-format-fix
- Add #include <algorithm> to line 10
- Line 232-237:
// Skip hidden/protected items
bool shouldHide = (name[0] == '.');
if (!shouldHide) {
shouldHide = std::any_of(std::begin(HIDDEN_ITEMS), std::end(HIDDEN_ITEMS),
[name](const char* item) { return strcmp(name, item) == 0; });
}
CrossInk 5.7.26
wildfire070
pushed a commit
that referenced
this pull request
May 22, 2026
…spoint-reader#2022) Pulls in community-sdk PR #9, which clears inGrayscaleMode inside cleanupGrayscaleBuffers() after the restored BW frame is written back into RED RAM. Without this, the next BW page turn would still see the flag set and trigger a redundant grayscaleRevert() refresh, producing visible ghosting on the X4 with text anti-aliasing enabled. Regression introduced by SDK commit 0a8ada2 (factory LUT grayscale support), which removed a redundant inGrayscaleMode guard in grayscaleRevert() and so caused the cleanup to actually run for the first time. Bypassing rules to avoid this going stale and all nightly builds being broken for x4 users
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CrossInk 5.7.26