提交 7cbe385e 编写于 作者: M Matt Perry

Add a shadow to the FloatingActionButton.

Also added a helper class to Sky framework for building shadow DrawLoopers.

R=abarth@chromium.org, eseidel@chromium.org, ianh@google.com

Review URL: https://codereview.chromium.org/1175683002.
上级 4c86f98a
......@@ -99,6 +99,7 @@ dart_pkg("sdk") {
"lib/framework/net/fetch.dart",
"lib/framework/net/image_cache.dart",
"lib/framework/node.dart",
"lib/framework/painting/shadows.dart",
"lib/framework/reflect.dart",
"lib/framework/rendering/block.dart",
"lib/framework/rendering/box.dart",
......
......@@ -4,6 +4,7 @@
import '../fn2.dart';
import '../rendering/box.dart';
import '../painting/shadows.dart';
import '../theme2/colors.dart';
import 'dart:sky' as sky;
import 'ink_well.dart';
......@@ -28,7 +29,13 @@ class FloatingActionButton extends Component {
content: new CustomPaint(
callback: (sky.Canvas canvas) {
const double radius = _kSize / 2.0;
canvas.drawCircle(radius, radius, radius, new sky.Paint()..color = Red[500]);
sky.Paint paint = new sky.Paint()..color = Red[500];
var builder = new ShadowDrawLooperBuilder()
..addShadow(const sky.Size(0.0, 5.0),
const sky.Color(0x77000000),
5.0);
paint.setDrawLooper(builder.build());
canvas.drawCircle(radius, radius, radius, paint);
},
child: new Container(
width: _kSize,
......
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
/// Helper class to build a Paint DrawLooper that adds shadows to the Paint's
/// operation.
class ShadowDrawLooperBuilder {
var builder_ = new sky.LayerDrawLooperBuilder();
void addShadow(sky.Size offset, sky.Color color, double blur) {
builder_.addLayerOnTop(
new sky.DrawLooperLayerInfo()
..setPaintBits(-1)
..setOffset(offset.toPoint())
..setColorMode(sky.TransferMode.srcMode),
(sky.Paint layerPaint) {
layerPaint.color = color;
layerPaint.setMaskFilter(
new sky.MaskFilter.Blur(sky.BlurStyle.normal,
blur,
highQuality: true));
});
}
sky.DrawLooper build() {
builder_.addLayerOnTop(new sky.DrawLooperLayerInfo(), (_) {});
return builder_.build();
}
}
......@@ -6,6 +6,7 @@ import 'dart:math' as math;
import 'dart:sky' as sky;
import 'dart:typed_data';
import 'object.dart';
import '../painting/shadows.dart';
import 'package:vector_math/vector_math.dart';
import 'package:sky/framework/net/image_cache.dart' as image_cache;
......@@ -703,22 +704,9 @@ class RenderDecoratedBox extends RenderProxyBox {
paint.color = _decoration.backgroundColor;
if (_decoration.boxShadow != null) {
var builder = new sky.LayerDrawLooperBuilder();
for (BoxShadow boxShadow in _decoration.boxShadow) {
builder.addLayerOnTop(
new sky.DrawLooperLayerInfo()
..setPaintBits(-1)
..setOffset(boxShadow.offset.toPoint())
..setColorMode(sky.TransferMode.srcMode),
(Paint layerPaint) {
layerPaint.color = boxShadow.color;
layerPaint.setMaskFilter(
new sky.MaskFilter.Blur(sky.BlurStyle.normal,
boxShadow.blur,
highQuality: true));
});
}
builder.addLayerOnTop(new sky.DrawLooperLayerInfo(), (_) {});
var builder = new ShadowDrawLooperBuilder();
for (BoxShadow boxShadow in _decoration.boxShadow)
builder.addShadow(boxShadow.offset, boxShadow.color, boxShadow.blur);
paint.setDrawLooper(builder.build());
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册