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

Side by Side Diff: sky/sdk/lib/framework/rendering/render_box.dart

Issue 1146893004: Attempt to write a RenderShadowedBox (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Undo move Created 5 years, 6 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 | « sky/examples/raw/shadowed_box.dart ('k') | no next file » | 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 'render_node.dart'; 5 import 'render_node.dart';
6 import 'dart:sky' as sky; 6 import 'dart:sky' as sky;
7 7
8 // GENERIC BOX RENDERING 8 // GENERIC BOX RENDERING
9 // Anything that has a concept of x, y, width, height is going to derive from th is 9 // Anything that has a concept of x, y, width, height is going to derive from th is
10 10
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 void paint(RenderNodeDisplayList canvas) { 138 void paint(RenderNodeDisplayList canvas) {
139 if (child != null) 139 if (child != null)
140 child.paint(canvas); 140 child.paint(canvas);
141 } 141 }
142 } 142 }
143 143
144 class RenderSizedBox extends RenderProxyBox { 144 class RenderSizedBox extends RenderProxyBox {
145 final sky.Size desiredSize; 145 final sky.Size desiredSize;
146 146
147 RenderSizedBox({ 147 RenderSizedBox({
148 RenderBox child, 148 RenderBox child,
149 this.desiredSize: const sky.Size.infinite() 149 this.desiredSize: const sky.Size.infinite()
150 }) : super(child); 150 }) : super(child);
151 151
152 sky.Size getIntrinsicDimensions(BoxConstraints constraints) { 152 sky.Size getIntrinsicDimensions(BoxConstraints constraints) {
153 return constraints.constrain(desiredSize); 153 return constraints.constrain(desiredSize);
154 } 154 }
155 155
156 void performLayout() { 156 void performLayout() {
157 size = constraints.constrain(desiredSize); 157 size = constraints.constrain(desiredSize);
158 child.layout(new BoxConstraints.tight(size)); 158 child.layout(new BoxConstraints.tight(size));
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 254
255 if (_decoration.backgroundColor != null) { 255 if (_decoration.backgroundColor != null) {
256 sky.Paint paint = new sky.Paint()..color = _decoration.backgroundColor; 256 sky.Paint paint = new sky.Paint()..color = _decoration.backgroundColor;
257 canvas.drawRect(new sky.Rect.fromLTRB(0.0, 0.0, size.width, size.height), paint); 257 canvas.drawRect(new sky.Rect.fromLTRB(0.0, 0.0, size.width, size.height), paint);
258 } 258 }
259 super.paint(canvas); 259 super.paint(canvas);
260 } 260 }
261 261
262 } 262 }
263 263
264 // This must be immutable, because we won't notice when it changes
265 class BoxShadow {
266 const BoxShadow({
267 this.color,
268 this.offset
269 });
270
271 final sky.Size offset;
272 final sky.Color color;
273 }
274
275 class RenderShadowedBox extends RenderProxyBox {
276
277 RenderShadowedBox({
278 BoxShadow shadow,
279 RenderBox child
280 }) : _shadow = shadow, super(child);
281
282 BoxShadow _shadow;
283 BoxShadow get shadow => _decoration;
Matt Perry 2015/06/02 20:57:37 Did you mean to return _shadow here?
284 void set shadow (BoxShadow value) {
285 if (value == _shadow)
286 return;
287 _shadow = value;
288 markNeedsPaint();
289 }
290
291 sky.Paint _createShadowPaint(BoxShadow shadow) {
292 sky.Paint paint = new sky.Paint()..color = shadow.color;
Matt Perry 2015/06/02 20:57:36 This should be the color of the Main layer, not th
293 sky.Size offset = shadow.offset;
294 var builder = new sky.LayerDrawLooperBuilder()
295 // Shadow layer.
296 ..addLayerOnTop(
297 new sky.DrawLooperLayerInfo()
298 ..setOffset(offset.toPoint())
299 ..setColorMode(sky.TransferMode.srcInMode),
Matt Perry 2015/06/02 21:19:01 BTW, the existing code[1] uses srcMode. We might w
300 (sky.Paint layerPaint) {
301 layerPaint.setARGB(128, 55, 55, 55);
Matt Perry 2015/06/02 20:57:36 This is the shadow color. Since we're using Transf
302 // TODO(mpcomplete): add blur filter
303 })
304 // Main layer.
305 ..addLayerOnTop(new sky.DrawLooperLayerInfo(), (_) {});
306 paint.setDrawLooper(builder.build());
307 return paint;
308 }
309
310 void paint(RenderNodeDisplayList canvas) {
311 sky.Paint paint = _createShadowPaint(_shadow);
312 canvas.drawRect(new sky.Rect.fromLTRB(0.0, 0.0, size.width, size.height), pa int);
313 super.paint(canvas);
314 }
315 }
264 316
265 // RENDER VIEW LAYOUT MANAGER 317 // RENDER VIEW LAYOUT MANAGER
266 318
267 class ViewConstraints { 319 class ViewConstraints {
268 320
269 const ViewConstraints({ 321 const ViewConstraints({
270 this.width: 0.0, this.height: 0.0, this.orientation: null 322 this.width: 0.0, this.height: 0.0, this.orientation: null
271 }); 323 });
272 324
273 final double width; 325 final double width;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 414
363 void defaultPaint(RenderNodeDisplayList canvas) { 415 void defaultPaint(RenderNodeDisplayList canvas) {
364 RenderBox child = firstChild; 416 RenderBox child = firstChild;
365 while (child != null) { 417 while (child != null) {
366 assert(child.parentData is ParentDataType); 418 assert(child.parentData is ParentDataType);
367 canvas.paintChild(child, child.parentData.position); 419 canvas.paintChild(child, child.parentData.position);
368 child = child.parentData.nextSibling; 420 child = child.parentData.nextSibling;
369 } 421 }
370 } 422 }
371 } 423 }
OLDNEW
« no previous file with comments | « sky/examples/raw/shadowed_box.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698