Skip to content

Commit 8cd8851

Browse files
authored
Merge pull request #16 from wkornewald/fix-centering
fixed centering of image in scaleCanvasToViewBox()
2 parents d59ecbb + b045546 commit 8cd8851

File tree

2 files changed

+11
-29
lines changed

2 files changed

+11
-29
lines changed

third_party/lib/src/render_picture.dart

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:math' as math;
2+
13
import 'package:flutter/widgets.dart';
24
import 'package:meta/meta.dart';
35

@@ -165,18 +167,9 @@ class RenderPicture extends RenderBox {
165167
}
166168

167169
void scaleCanvasToViewBox(Canvas canvas, Size desiredSize, Rect viewBox) {
168-
final double xscale = desiredSize.width / viewBox.size.width;
169-
final double yscale = desiredSize.height / viewBox.size.height;
170-
171-
if (xscale == yscale) {
172-
canvas.scale(xscale, yscale);
173-
} else if (xscale < yscale) {
174-
final double xtranslate = (viewBox.size.width - viewBox.size.height) / 2;
175-
canvas.scale(xscale, xscale);
176-
canvas.translate(0.0, xtranslate);
177-
} else {
178-
final double ytranslate = (viewBox.size.height - viewBox.size.width) / 2;
179-
canvas.scale(yscale, yscale);
180-
canvas.translate(ytranslate, 0.0);
181-
}
170+
final double scale = math.min(
171+
desiredSize.width / viewBox.width, desiredSize.height / viewBox.height);
172+
final Offset shift = desiredSize / 2.0 - viewBox.size * scale / 2.0;
173+
canvas.translate(shift.dx, shift.dy);
174+
canvas.scale(scale, scale);
182175
}

third_party/lib/src/vector_drawable.dart

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import 'dart:typed_data';
22
import 'dart:ui';
33

4-
import 'package:path_drawing/path_drawing.dart';
54
import 'package:flutter/widgets.dart' hide TextStyle;
65
import 'package:meta/meta.dart';
6+
import 'package:path_drawing/path_drawing.dart';
7+
8+
import 'render_picture.dart' as render_picture;
79

810
typedef Paint PaintServer(Rect bounds);
911

@@ -220,20 +222,7 @@ class DrawableRoot implements Drawable {
220222
/// the smaller dimension and translate to center the image along the larger
221223
/// dimension.
222224
void scaleCanvasToViewBox(Canvas canvas, Size desiredSize) {
223-
final double xscale = desiredSize.width / viewBox.size.width;
224-
final double yscale = desiredSize.height / viewBox.size.height;
225-
226-
if (xscale == yscale) {
227-
canvas.scale(xscale, yscale);
228-
} else if (xscale < yscale) {
229-
final double xtranslate = (viewBox.size.width - viewBox.size.height) / 2;
230-
canvas.scale(xscale, xscale);
231-
canvas.translate(0.0, xtranslate);
232-
} else {
233-
final double ytranslate = (viewBox.size.height - viewBox.size.width) / 2;
234-
canvas.scale(yscale, yscale);
235-
canvas.translate(ytranslate, 0.0);
236-
}
225+
render_picture.scaleCanvasToViewBox(canvas, desiredSize, viewBox);
237226
}
238227

239228
/// Clips the canvas to a rect corresponding to the `viewBox`.

0 commit comments

Comments
 (0)