All checks were successful
CI / Windows build (push) Successful in 11m34s
W1 — Custom pen width + pressure sensitivity (Saber-style):
- Root cause of "压感没用": perfect_freehand 1.0.4 IGNORES real stylus pressure
(hardcodes radius=size/2 when simulatePressure=false) — width never tracked pen
force. Upgraded perfect_freehand ^1.0.0 -> ^2.0.0 (honors real pressure); migrated
all 5 getStroke call sites to the 2.x API (PointVector / StrokeOptions / Offset).
- De-hardcoded `thinning` into `kDefaultPenThinning` (0.85), single source shared by
the on-screen painter and the PDF export path; exposed as PenConfig.pressureSensitivity
with a Pressure Sensitivity slider; live-applies via a config listener.
W3 — Native Windows pen plugin (tilt + barrel/eraser buttons):
- windows/runner/pen_channel.{h,cpp}: observe WM_POINTER at the TOP of MessageHandler
(before HandleTopLevelWindowProc, which Flutter uses to consume pen events), read
GetPointerPenInfo penFlags + tilt, stream over EventChannel('badnote/pen'); non-consuming.
- PenInputService: single latched hardware state (no Win32-pointerId<->event.pointer
correlation); graceful no-op off-Windows.
- pen_canvas maps barrel/inverted/eraser through PenConfig.sideButton/eraserEnd
(eraser/undo/toggleTool/pan) and captures tilt into PenPoint.tilt -> EditorPoint.tilt.
W2 — Zoom flicker: page raster isolated in its own RepaintBoundary (safe interim);
definitive crisp-on-zoom fix gated on the on-device root-cause probe (plan M3).
Plans: ralplan-consensus plan at docs/plans/2026-06-22-badnote-pen-polish.md
(Architect APPROVE-WITH-MUST-FIX M1-M4 + Critic ITERATE->APPROVE).
Tests: 58/58 pass incl. shared-thinning invariant + thinning-affects-outline +
tilt-adapter round-trip. flutter analyze clean; linux debug build OK.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
44 lines
1.9 KiB
CMake
44 lines
1.9 KiB
CMake
cmake_minimum_required(VERSION 3.14)
|
|
project(runner LANGUAGES CXX)
|
|
|
|
# Define the application target. To change its name, change BINARY_NAME in the
|
|
# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
|
|
# work.
|
|
#
|
|
# Any new source files that you add to the application should be added here.
|
|
add_executable(${BINARY_NAME} WIN32
|
|
"flutter_window.cpp"
|
|
"main.cpp"
|
|
"ocr_channel.cpp"
|
|
"pen_channel.cpp"
|
|
"utils.cpp"
|
|
"win32_window.cpp"
|
|
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
|
|
"Runner.rc"
|
|
"runner.exe.manifest"
|
|
)
|
|
|
|
# Apply the standard set of build settings. This can be removed for applications
|
|
# that need different build settings.
|
|
apply_standard_settings(${BINARY_NAME})
|
|
|
|
# Add preprocessor definitions for the build version.
|
|
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"")
|
|
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}")
|
|
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}")
|
|
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}")
|
|
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}")
|
|
|
|
# Disable Windows macros that collide with C++ standard library functions.
|
|
target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
|
|
|
|
# Add dependency libraries and include directories. Add any application-specific
|
|
# dependencies here.
|
|
target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
|
|
target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib" "windowsapp.lib")
|
|
target_compile_options(${BINARY_NAME} PRIVATE /await)
|
|
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
|
|
|
|
# Run the Flutter tool portions of the build. This must not be removed.
|
|
add_dependencies(${BINARY_NAME} flutter_assemble)
|