Device log showed the applied scale oscillating ~1.4x every frame while the raw pinch was smooth (cur 1.116->0.797->1.074, raw ~0.46). Root cause: on a pointer-count re-baseline (Windows touch flickers 2<->1<->2 mid-pinch) the code set _scaleStart = matrix.getMaxScaleOnAxis() — a read-back captured at a glitchy instant — so the absolute map K = scaleStart/rawScaleAtBaseline jumped frame to frame. Fix: anchor the re-baseline to the CLEAN tracked _lastAppliedScale instead of the live matrix read-back, so the displayed scale is continuous across the re-baseline regardless of any matrix transient. The math is already covered by the pinch_scale_solver "same-instant re-baseline" test; this just feeds it the right value. flutter analyze: 0. pinch_scale_solver + pen_zoom: pass.
21 KiB
21 KiB