mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
Avoid the overhead of instantiating a generator in paintImage (#28736)
This function is called frequently with non-repeating images during many animations
This commit is contained in:
parent
1ffd5f02d6
commit
c3527389b6
|
@ -438,22 +438,25 @@ void paintImage({
|
|||
final Rect sourceRect = alignment.inscribe(
|
||||
sourceSize, Offset.zero & inputSize,
|
||||
);
|
||||
for (Rect tileRect in _generateImageTileRects(rect, destinationRect, repeat))
|
||||
canvas.drawImageRect(image, sourceRect, tileRect, paint);
|
||||
if (repeat == ImageRepeat.noRepeat) {
|
||||
canvas.drawImageRect(image, sourceRect, destinationRect, paint);
|
||||
} else {
|
||||
for (Rect tileRect in _generateImageTileRects(rect, destinationRect, repeat))
|
||||
canvas.drawImageRect(image, sourceRect, tileRect, paint);
|
||||
}
|
||||
} else {
|
||||
for (Rect tileRect in _generateImageTileRects(rect, destinationRect, repeat))
|
||||
canvas.drawImageNine(image, centerSlice, tileRect, paint);
|
||||
if (repeat == ImageRepeat.noRepeat) {
|
||||
canvas.drawImageNine(image, centerSlice, destinationRect, paint);
|
||||
} else {
|
||||
for (Rect tileRect in _generateImageTileRects(rect, destinationRect, repeat))
|
||||
canvas.drawImageNine(image, centerSlice, tileRect, paint);
|
||||
}
|
||||
}
|
||||
if (needSave)
|
||||
canvas.restore();
|
||||
}
|
||||
|
||||
Iterable<Rect> _generateImageTileRects(Rect outputRect, Rect fundamentalRect, ImageRepeat repeat) sync* {
|
||||
if (repeat == ImageRepeat.noRepeat) {
|
||||
yield fundamentalRect;
|
||||
return;
|
||||
}
|
||||
|
||||
int startX = 0;
|
||||
int startY = 0;
|
||||
int stopX = 0;
|
||||
|
|
Loading…
Reference in a new issue