Repository navigation
feat(ink): continuous cross-page content and smoother zoom (0.3.8) - #59
Merged
Merged
Conversation
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.
Drawing and selecting content across a page break previously split the interaction between page engines. Zoom settling also retained expensive surfaces and old notebook callbacks. This adds a continuous document canvas with page-local persistence/export, ordered ink and external-overlay undo/redo, bounded visible-region rendering, and corrected zoomed tap coordinates. Version: 0.3.8.
Native loads now report confirmed completion, preserve dirty pages on failed capture, and reject stale captures. A native parser accepts the exact notebook payload selected by a host's recovery logic, avoiding a second read of an older file. The existing pooled canvas remains available. Native drawing, document composition, and UI rendering are implemented for iOS and Android.
Validation:
-Xcheck:jni, including cross-page/order/round-trip/invalid-input and 30,000-page cases. Zoom and document JNI checks now run in CI.Simplify and security review findings were fixed: repeated initial JSON parsing, native callback retention, unsafe capture/load fallbacks, and stale-file selection. No remaining security finding in the shared-engine changes. Native parse input remains data and errors reject rather than authorizing a blank save.
File-size exceptions: existing native view/bridge classes, engine rendering/selection files,
InfiniteInkCanvas,NativeInkCanvas,PooledCanvasSlot,useZoomableViewportGestures, and its existing pool test harness remain above 500 lines. Their private native state, exported selectors/JNI signatures, or shared hook/ref lifecycle are interdependent; splitting these safely would require a separate state/ABI or test-harness refactor and broaden this already substantial rendering change. New document codec, document canvas, native parser extension, zoom rendering, viewport callback/transition helpers, and regression files are separated. The legacy class boundaries are intentionally retained; no placeholder implementation is shipped.Android limitation: example bundle and host JNI checks pass, but a full Android Gradle/device render run has not been performed in this environment. iOS simulator verification does not substitute for physical-device performance.
Additional native failure regression: a malformed drawing payload previously escaped the iOS typed C++ catch when linked with bundled Skia. All document bridge entry points now reject otherwise-unmatched exceptions. The OpenNotes Release XCTest passes retry, library return, relaunch, and reopening; the original notebook SHA256 is unchanged. The recovery screenshot was visually inspected. Simplify/security review of this boundary fix found no additional issues.