Commit Graph
742 Commits
Author SHA1 Message Date
jpirnay b44a47b9de Fix 2026-03-19 11:26:28 +01:00
jpirnay 477f3aa886 Merge branch 'feat-sdcard-info' of https://github.com/jpirnay/crosspoint-reader into mybuild 2026-03-19 11:20:47 +01:00
jpirnay def6c2063a Dont freeze UI on calculation 2026-03-19 11:20:07 +01:00
jpirnay 12bf78592f Reuse SDCArdManager logic 2026-03-19 11:12:48 +01:00
jpirnay 89230a79dd Merge branch 'feat-charger' of https://github.com/jpirnay/crosspoint-reader into mybuild 2026-03-18 21:06:54 +01:00
jpirnay 1e8286a15a Add symbol to lyra icon 2026-03-18 21:06:24 +01:00
jpirnay 5d11469c31 Merge branch 'refactor-i18n_offset-table' of https://github.com/jpirnay/crosspoint-reader into mybuild 2026-03-18 20:48:30 +01:00
jpirnay 2efef0c519 Merge branch 'feat-charger' of https://github.com/jpirnay/crosspoint-reader into mybuild 2026-03-18 13:27:02 +01:00
jpirnay 3cc9538cca Another review comment 2026-03-18 13:13:56 +01:00
jpirnay 72b00e1829 Review comments 2026-03-18 13:09:58 +01:00
jpirnay ec864a25e0 Fix const 2026-03-18 13:04:02 +01:00
jpirnay ce6676d211 Add immediate response for usb cable plug in / removal 2026-03-18 12:56:35 +01:00
jpirnay ba7aa1e694 Merge branch 'feat-overlay' of https://github.com/jpirnay/crosspoint-reader into mybuild 2026-03-18 12:38:54 +01:00
jpirnay 7144450934 Fix information box 2026-03-18 12:38:08 +01:00
jpirnay 0a8a644773 Merge branch 'feat-charger' of https://github.com/jpirnay/crosspoint-reader into mybuild 2026-03-18 12:26:24 +01:00
jpirnay a7494c232c Mirroring PR #537 2026-03-18 12:24:44 +01:00
jpirnay d71b524f18 YACLF 2026-03-18 12:06:43 +01:00
jpirnay 73b9f2028a yaclf 2026-03-17 22:07:14 +01:00
jpirnay 7df68fcf31 Merge branch 'feat-sdcard-info' of https://github.com/jpirnay/crosspoint-reader into mybuild 2026-03-17 21:27:10 +01:00
jpirnay c46490fd43 Reformat file size 2026-03-17 21:24:06 +01:00
jpirnay ce0c429dae Refine 2026-03-17 21:12:42 +01:00
jpirnay 06f8bbfa36 Merge branch 'temp_info' of https://github.com/jpirnay/crosspoint-reader into feat-sdcard-info 2026-03-17 21:06:41 +01:00
jpirnay 6dc719ca69 Add Info Activitiy 2026-03-17 21:05:46 +01:00
jpirnay f23d01093e Amend regex pattern for tr identification 2026-03-17 07:07:47 +01:00
Zach Nelson 415965c21b fix: Prevent line breaks on common English contractions (#1405) 2026-03-16 20:04:06 -04:00
jpirnay 2419cc43bf fix missing header 2026-03-16 23:52:13 +01:00
jpirnay 65e100d196 review 2026-03-16 23:44:25 +01:00
jpirnay fd685a5e14 Expose freebytes too 2026-03-16 21:28:06 +01:00
jpirnay eb4a0e3a7c Review comments 2026-03-16 21:25:27 +01:00
jpirnay 3e7a8bf8ff Relocate logic 2026-03-16 20:33:58 +01:00
jpirnay 87bbfb26af Display available space on SDCard 2026-03-16 20:26:36 +01:00
jpirnay 7c0095e5c5 Remove no longer needed include 2026-03-16 20:03:46 +01:00
jpirnay 2e8ee680a7 perf: strip unused strings during PlatformIO build 2026-03-16 15:47:35 +01:00
jpirnay 72a0d2a611 chore: remove unused STR_CALIBRE from German translations 2026-03-16 15:44:38 +01:00
jpirnay 039337b4eb Show sizes 2026-03-16 15:41:25 +01:00
jpirnay 9b6035820d Show sizes, too 2026-03-16 15:31:59 +01:00
jpirnay 960cb91b23 Optimize output 2026-03-16 15:10:41 +01:00
jpirnay e4b0abec03 Fix english hyphenation 2026-03-16 11:51:28 +01:00
jpirnay 125ef361d2 fix: jpeg resource cleanup (#1320)
## Summary

* **What is the goal of this PR?** Fix leak on decode error path in JPEG
converter
* **What changes are included?**
Unif resource cleanup

## Additional Context

---

### 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**_
Identification of the issue by AI
2026-03-13 17:45:42 -05:00
jpirnay 7a940d0a4b Fix 2026-03-13 21:38:29 +01:00
jpirnay 9b70ddc93b Merge branch 'master' of https://github.com/jpirnay/crosspoint-reader into mybuild 2026-03-13 21:24:04 +01:00
jpirnay beeab0ff55 cast currentpage 2026-03-13 21:15:05 +01:00
fsocietyipaandOkzhetpes dabdfcd683 feat: Add Kazakh (kk) language support (#1377)
## Summary

* **What is the goal of this PR?** Implements Kazakh language
* **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

---------

Co-authored-by: Okzhetpes <okhzetpes.20@gmail.com>
2026-03-11 18:40:14 -05:00
jpirnay fb3997aae5 fix: Init lastSleepImage (edge case) (#1360)
## Summary

* **What is the goal of this PR?** fix edge case for definition

## Additional Context

If loadFromFile() returns false (no state file exists — first boot, or
SD missing), lastSleepImage is never set and contains garbage.
[SleepActivity.cpp:83] then uses it in a while comparison to avoid
repeating the same image. The JSON path (doc["lastSleepImage"] |
(uint8_t)0) handles it, but only if the file exists.

---

### 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 **_
2026-03-11 18:37:13 -05:00
jpirnay 1b97c4602d chore: change label while on settings tab actions (#1325)
## Summary

* **What is the goal of this PR?** The "Toggle" label while on the "tab"
actions of settings screen was misleading. Will show "Select" now ,
while "Toggle" remains in place for all 'real' settings

* **What changes are included?**

## Additional Context
<img width="240" alt="1"
src="https://github.com/user-attachments/assets/dc198716-0aad-4c75-96fe-52595625e69d"
/>
<img width="240" alt="2"
src="https://github.com/user-attachments/assets/85ce5368-801c-489d-aa94-51f126c3ddc8"
/>


---

### 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 **_
2026-03-11 18:36:34 -05:00
117936a78e fix: back button in settings returns to tab bar first (#1354)
## Summary
- Pressing Back while browsing settings within a category now jumps
focus to the category tab bar
- Pressing Back again from the tab bar exits settings to home
- Previously, Back always exited directly to home regardless of scroll
position

Closes #797

## Test plan
- [ ] Scroll deep into a settings category → press Back → tab bar is
focused
- [ ] Press Back again from tab bar → exits to home screen
- [ ] Use category switching (continuous hold) → still works as before
- [ ] Settings are saved on exit (not on tab-bar jump)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: bkb <bkb@arcnode.xyz>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 18:35:48 -05:00
jpirnay 906dd202b9 fix: Add special handling for apostrophe hyphenation (#1318)
## Summary

* **What is the goal of this PR?** Fixing / extending the hyphenation
logic to deal with words containing an apostophe as raised in #1186
* **What changes are included?**

## Additional Context

---

### 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**_ (as the
user provided a thorough analysis that I followed)
2026-03-11 18:35:23 -05:00
Adrian Wilkins-Caruana 1409259721 perf: font-compression improvements (#1056)
## Purpose

This PR includes some preparatory changes that are needed for an
upcoming performant CJK font feature. The changes have no impact on
render time and heap allocation for latin text. **Despite this, I think
these changes stand on their own as a better font
compression/decompression implementation.**

## Summary

- Font decompressor rewrite: Replaced the 4-slot LRU group cache with a
two-tier system — a page buffer (glyphs prewarmed before rendering
begins) and a hot-group fallback (last decompressed group retained for
non-prewarmed
  glyphs). 
- Byte-aligned compressed bitmap format: Glyph bitmaps within compressed
groups are now stored row-padded rather than tightly packed before
DEFLATE compression, improving compression ratios by making identical
pixel rows produce
identical byte patterns. Glyphs are compacted back to packed format on
demand at render time. Reduces flash size by 155 KB.
- Page prewarm system: Added `Page::collectText` and
`Page::getDominantStyle` to extract per-style glyph requirements before
rendering, and `GfxRenderer::prewarmFontCache` to pre-decompress only
the groups needed for the dominant style
   — eliminating mid-render decompression for the common case.
- UTF-8 robustness fixes: `utf8NextCodepoint` now validates continuation
bytes and returns a replacement glyph on malformed input;
`ChapterHtmlSlimParser` correctly preserves incomplete multi-byte
sequences across word-buffer flush
  boundaries rather than splitting them.

---

### 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**_ Architecture and
design was done by me, refined a bit by Claude. Code mostly by Claude,
but not entirely.
2026-03-11 21:05:46 +01:00
Dani Poveda 80871b97d1 fix: Improve and add Spanish translations (#1338)
## Summary

* **What is the goal of this PR?** 
    - Improve and add the latest missing Spanish translations

* **What changes are included?**
    - Replaced `Der.` with `Dcha.`, as it's a more common abbreviation
- Replaced `Selec.` with `Selecc.` (same reason as in the previous case)
- Added missing strings `STR_IMAGES`, `STR_IMAGES_DISPLAY`,
`STR_IMAGES_PLACEHOLDER` and `STR_IMAGES_SUPPRESS`
    - Rewording certain translations to make them clearer

---

### 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**_
2026-03-11 23:02:22 +03:00
Zach Nelson f9d32b11d9 fix: Fix inter-word spacing rounding error in text layout (#1311)
## Summary

**What is the goal of this PR?**

### Problem

Inter-word gap widths were computed as two separately-snapped integers:

```cpp
gap = getSpaceWidth(fontId, style);                        // fp4::toPixel(spaceAdvance)
gap += getSpaceKernAdjust(fontId, leftCp, rightCp, style); // fp4::toPixel(kern1 + kern2)
```

Because `fp4::toPixel(a) + fp4::toPixel(b)` can differ from
`fp4::toPixel(a + b)` by +/-1 pixel when the fractional parts straddle a
rounding boundary, each inter-word space could be one pixel wider or
narrower than the correct value. This affected line-break width
decisions and word-position accumulation across the whole paragraph
layout pipeline.

### Fix

Replaces `getSpaceKernAdjust()` with `getSpaceAdvance(fontId, leftCp,
rightCp, style)`, which combines the space glyph advance and both
flanking kern values (`kern(leftCp, ' ')` + `kern(' ', rightCp)`) into a
single fixed-point sum before the snap:

```cpp
return fp4::toPixel(spaceAdvanceFP + kern(leftCp, ' ') + kern(' ', rightCp));
```

This is the same single-snap pattern already used by `getTextAdvanceX`
for word widths.

### Changes

- **`GfxRenderer`**: Replaces `getSpaceKernAdjust()` with
`getSpaceAdvance()`. `getSpaceWidth()` is retained for the
single-space-word case in `measureWordWidth` where no adjacent-word kern
context is available.
- **`ParsedText`**: All four call sites (`computeLineBreaks`,
`computeHyphenatedLineBreaks`, and both loops in `extractLine`) updated
to use `getSpaceAdvance()`. The now-redundant `spaceWidth`
pre-computation and parameter are removed from all three internal layout
functions.

---

### 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 to analyze for
correctness**_
2026-03-10 22:55:23 -05:00