Commit b05d42c3 authored by Collin Jackson's avatar Collin Jackson

Merge pull request #1220 from collinjackson/scaling_focus

Ensure that the item under the focal point stays in the same place despite zooming
parents c06995a3 847cea15
...@@ -35,13 +35,16 @@ class ScaleAppState extends State<ScaleApp> { ...@@ -35,13 +35,16 @@ class ScaleAppState extends State<ScaleApp> {
void _handleScaleUpdate(double scale, Point focalPoint) { void _handleScaleUpdate(double scale, Point focalPoint) {
setState(() { setState(() {
_zoom = _previousZoom * scale; _zoom = (_previousZoom * scale);
_offset = _previousOffset + (focalPoint - _startingFocalPoint) / _zoom;
// Ensure that item under the focal point stays in the same place despite zooming
Offset normalizedOffset = (_startingFocalPoint.toOffset() - _previousOffset) / _previousZoom;
_offset = focalPoint.toOffset() - normalizedOffset * _zoom;
}); });
} }
void paint(PaintingCanvas canvas, Size size) { void paint(PaintingCanvas canvas, Size size) {
Point center = size.center(Point.origin) + _offset * _zoom; Point center = (size.center(Point.origin).toOffset() * _zoom + _offset).toPoint();
double radius = size.width / 2.0 * _zoom; double radius = size.width / 2.0 * _zoom;
Gradient gradient = new RadialGradient( Gradient gradient = new RadialGradient(
center: center, radius: radius, center: center, radius: radius,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment