diff --git a/apps/ely-table/src/figures.rs b/apps/ely-table/src/figures.rs index 9aab803..a1d5c35 100644 --- a/apps/ely-table/src/figures.rs +++ b/apps/ely-table/src/figures.rs @@ -89,6 +89,11 @@ mod tests { super::Book::text(app, "table.figure.sum", &[("value", "42")]) ); assert_eq!(label.as_ref(), expect, "known names relabel, others stay"); + // The kernel's formatted values pass through untouched. + ely_ui::i18n::install_as("en-US", app); + for value in ["8128.00", "8128.33333333333", "0.0000000001", "1234567890.25", "$1,234.50"] { + assert_eq!(super::label(&format!("Sum: {value}"), app).as_ref(), format!("Sum {value}")); + } for (english, key) in super::ERRORS { assert_eq!(super::label(english, app), super::Book::text(app, key, &[])); } diff --git a/crates/ely-lok/src/view/tests/fit.rs b/crates/ely-lok/src/view/tests/fit.rs index 1ce7afc..e2522b9 100644 --- a/crates/ely-lok/src/view/tests/fit.rs +++ b/crates/ely-lok/src/view/tests/fit.rs @@ -149,6 +149,16 @@ fn zooming_keeps_the_left_page_edge_or_the_pointed_spot() { view.prepare(room); let after = view.doc_point(at); assert!((after.0 - before.0).abs() < 30 && (after.1 - before.1).abs() < 30, "{before:?} moved to {after:?}"); + // Wheel steps that land within one frame. + view.set_zoom(1.0, cx); + view.prepare(room); + let before = view.doc_point(at); + for zoom in [1.25, 1.5, 2.0] { + view.zoom_at(zoom, Some(at), cx); + } + view.prepare(room); + let after = view.doc_point(at); + assert!((after.0 - before.0).abs() < 30 && (after.1 - before.1).abs() < 30, "bunched: {before:?} moved to {after:?}"); }) }); } diff --git a/crates/ely-lok/src/view/zoom.rs b/crates/ely-lok/src/view/zoom.rs index 8c07213..bf96a65 100644 --- a/crates/ely-lok/src/view/zoom.rs +++ b/crates/ely-lok/src/view/zoom.rs @@ -47,8 +47,10 @@ impl LokView { Some(at) => (f32::from(at.x - self.origin.x), f32::from(at.y - self.origin.y)), None => (self.viewport.0 / 2.0, self.viewport.1 / 2.0), }; + // The offset now, not the last frame's: zooms may bunch. + let spare = self.slack(); + let (sx, sy) = (ax - spare.0, ay - spare.1); // Anchored in print twips: tile twips change with the zoom. - let (sx, sy) = (ax - self.spare.0, ay - self.spare.1); let under = self.print_of((self.scroll.0 + self.geom.twips_of(sx), self.scroll.1 + self.geom.twips_of(sy))); self.fit = false; if (zoom - self.geom.zoom).abs() > 0.0001 { diff --git a/tasks/reviews/R2.11-r2.md b/tasks/reviews/R2.11-r2.md new file mode 100644 index 0000000..7ef22e9 --- /dev/null +++ b/tasks/reviews/R2.11-r2.md @@ -0,0 +1 @@ +PASS