1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "flutter/flow/layers/shader_mask_layer.h"
6
7 namespace flutter {
8
ShaderMaskLayer(sk_sp<SkShader> shader,const SkRect & mask_rect,SkBlendMode blend_mode)9 ShaderMaskLayer::ShaderMaskLayer(sk_sp<SkShader> shader,
10 const SkRect& mask_rect,
11 SkBlendMode blend_mode)
12 : shader_(shader), mask_rect_(mask_rect), blend_mode_(blend_mode) {}
13
14 ShaderMaskLayer::~ShaderMaskLayer() = default;
15
Paint(PaintContext & context) const16 void ShaderMaskLayer::Paint(PaintContext& context) const {
17 TRACE_EVENT0("flutter", "ShaderMaskLayer::Paint");
18 FML_DCHECK(needs_painting());
19
20 Layer::AutoSaveLayer save =
21 Layer::AutoSaveLayer::Create(context, paint_bounds(), nullptr);
22 PaintChildren(context);
23
24 SkPaint paint;
25 paint.setBlendMode(blend_mode_);
26 paint.setShader(shader_);
27 context.leaf_nodes_canvas->translate(mask_rect_.left(), mask_rect_.top());
28 context.leaf_nodes_canvas->drawRect(
29 SkRect::MakeWH(mask_rect_.width(), mask_rect_.height()), paint);
30 }
31
32 } // namespace flutter
33