Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Side by Side Diff: sky/sdk/lib/rendering/box.dart

Issue 1236043004: Improve drawer performance (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: cache paint Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | sky/sdk/lib/widgets/basic.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 import 'dart:math' as math; 5 import 'dart:math' as math;
6 import 'dart:sky' as sky; 6 import 'dart:sky' as sky;
7 7
8 import 'package:sky/base/debug.dart'; 8 import 'package:sky/base/debug.dart';
9 import 'package:sky/painting/box_painter.dart'; 9 import 'package:sky/painting/box_painter.dart';
10 import 'package:sky/rendering/object.dart'; 10 import 'package:sky/rendering/object.dart';
(...skipping 1231 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 Rect childBounds = child.parentData.position & child.size; 1242 Rect childBounds = child.parentData.position & child.size;
1243 if (childBounds.contains(position + -scrollOffset)) 1243 if (childBounds.contains(position + -scrollOffset))
1244 child.hitTest(result, position: position + scrollOffset); 1244 child.hitTest(result, position: position + scrollOffset);
1245 } 1245 }
1246 } 1246 }
1247 1247
1248 } 1248 }
1249 1249
1250 class RenderImage extends RenderBox { 1250 class RenderImage extends RenderBox {
1251 1251
1252 RenderImage(sky.Image image, Size requestedSize) 1252 RenderImage(sky.Image image, Size requestedSize, { sky.ColorFilter colorFilter })
1253 : _image = image, _requestedSize = requestedSize; 1253 : _image = image,
1254 _requestedSize = requestedSize,
1255 _colorFilter = colorFilter;
1254 1256
1255 sky.Image _image; 1257 sky.Image _image;
1256 sky.Image get image => _image; 1258 sky.Image get image => _image;
1257 void set image (sky.Image value) { 1259 void set image (sky.Image value) {
1258 if (value == _image) 1260 if (value == _image)
1259 return; 1261 return;
1260 _image = value; 1262 _image = value;
1261 markNeedsPaint(); 1263 markNeedsPaint();
1262 if (_requestedSize.width == null || _requestedSize.height == null) 1264 if (_requestedSize.width == null || _requestedSize.height == null)
1263 markNeedsLayout(); 1265 markNeedsLayout();
1264 } 1266 }
1265 1267
1266 Size _requestedSize; 1268 Size _requestedSize;
1267 Size get requestedSize => _requestedSize; 1269 Size get requestedSize => _requestedSize;
1268 void set requestedSize (Size value) { 1270 void set requestedSize (Size value) {
1269 if (value == null) 1271 if (value == null)
1270 value = const Size(null, null); 1272 value = const Size(null, null);
1271 if (value == _requestedSize) 1273 if (value == _requestedSize)
1272 return; 1274 return;
1273 _requestedSize = value; 1275 _requestedSize = value;
1274 markNeedsLayout(); 1276 markNeedsLayout();
1275 } 1277 }
1276 1278
1279 sky.ColorFilter _colorFilter;
1280 sky.ColorFilter get colorFilter => _colorFilter;
1281 void set colorFilter (sky.ColorFilter value) {
1282 if (value == _colorFilter)
1283 return;
1284 _colorFilter = value;
1285 _cachedPaint = null;
1286 markNeedsPaint();
1287 }
1288
1289 Paint _cachedPaint;
1290 Paint get _paint {
1291 if (_cachedPaint == null) {
1292 _cachedPaint = new Paint();
1293 if (colorFilter != null)
1294 _cachedPaint.setColorFilter(colorFilter);
1295 }
1296 return _cachedPaint;
1297 }
1298
1277 Size _sizeForConstraints(BoxConstraints innerConstraints) { 1299 Size _sizeForConstraints(BoxConstraints innerConstraints) {
1278 // If there's no image, we can't size ourselves automatically 1300 // If there's no image, we can't size ourselves automatically
1279 if (_image == null) { 1301 if (_image == null) {
1280 double width = requestedSize.width == null ? 0.0 : requestedSize.width; 1302 double width = requestedSize.width == null ? 0.0 : requestedSize.width;
1281 double height = requestedSize.height == null ? 0.0 : requestedSize.height; 1303 double height = requestedSize.height == null ? 0.0 : requestedSize.height;
1282 return constraints.constrain(new Size(width, height)); 1304 return constraints.constrain(new Size(width, height));
1283 } 1305 }
1284 1306
1285 if (!innerConstraints.isTight) { 1307 if (!innerConstraints.isTight) {
1286 // If neither height nor width are specified, use inherent image 1308 // If neither height nor width are specified, use inherent image
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1343 return; 1365 return;
1344 bool needsScale = size.width != _image.width || size.height != _image.height ; 1366 bool needsScale = size.width != _image.width || size.height != _image.height ;
1345 if (needsScale) { 1367 if (needsScale) {
1346 double widthScale = size.width / _image.width; 1368 double widthScale = size.width / _image.width;
1347 double heightScale = size.height / _image.height; 1369 double heightScale = size.height / _image.height;
1348 canvas.save(); 1370 canvas.save();
1349 canvas.translate(offset.dx, offset.dy); 1371 canvas.translate(offset.dx, offset.dy);
1350 canvas.scale(widthScale, heightScale); 1372 canvas.scale(widthScale, heightScale);
1351 offset = Offset.zero; 1373 offset = Offset.zero;
1352 } 1374 }
1353 canvas.drawImage(_image, offset.toPoint(), new Paint()); 1375 canvas.drawImage(_image, offset.toPoint(), _paint);
1354 if (needsScale) 1376 if (needsScale)
1355 canvas.restore(); 1377 canvas.restore();
1356 } 1378 }
1357 1379
1358 String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings( prefix)}${prefix}dimensions: ${requestedSize}\n'; 1380 String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings( prefix)}${prefix}dimensions: ${requestedSize}\n';
1359 } 1381 }
1360 1382
1361 class RenderDecoratedBox extends RenderProxyBox { 1383 class RenderDecoratedBox extends RenderProxyBox {
1362 1384
1363 RenderDecoratedBox({ 1385 RenderDecoratedBox({
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
1668 1690
1669 void defaultPaint(PaintingCanvas canvas, Offset offset) { 1691 void defaultPaint(PaintingCanvas canvas, Offset offset) {
1670 RenderBox child = firstChild; 1692 RenderBox child = firstChild;
1671 while (child != null) { 1693 while (child != null) {
1672 assert(child.parentData is ParentDataType); 1694 assert(child.parentData is ParentDataType);
1673 canvas.paintChild(child, child.parentData.position + offset); 1695 canvas.paintChild(child, child.parentData.position + offset);
1674 child = child.parentData.nextSibling; 1696 child = child.parentData.nextSibling;
1675 } 1697 }
1676 } 1698 }
1677 } 1699 }
OLDNEW
« no previous file with comments | « no previous file | sky/sdk/lib/widgets/basic.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698