Flutter Impeller
aiks_dl_opacity_unittests.cc
Go to the documentation of this file.
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 "display_list/dl_blend_mode.h"
7 
8 #include "flutter/display_list/dl_builder.h"
9 #include "flutter/display_list/dl_color.h"
10 #include "flutter/display_list/dl_paint.h"
11 #include "flutter/testing/testing.h"
12 
13 namespace impeller {
14 namespace testing {
15 
16 using namespace flutter;
17 
18 TEST_P(AiksTest, DrawOpacityPeephole) {
19  DisplayListBuilder builder;
20 
21  DlPaint green;
22  green.setColor(DlColor::kGreen().modulateOpacity(0.5));
23 
24  DlPaint alpha;
25  alpha.setColor(DlColor::kRed().modulateOpacity(0.5));
26 
27  builder.SaveLayer(std::nullopt, &alpha);
28  builder.DrawRect(DlRect::MakeXYWH(0, 0, 100, 100), green);
29  builder.Restore();
30 
31  ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
32 }
33 
34 TEST_P(AiksTest, CanRenderGroupOpacity) {
35  DisplayListBuilder builder;
36 
37  DlPaint red;
38  red.setColor(DlColor::kRed());
39  DlPaint green;
40  green.setColor(DlColor::kGreen().modulateOpacity(0.5));
41  DlPaint blue;
42  blue.setColor(DlColor::kBlue());
43 
44  DlPaint alpha;
45  alpha.setColor(DlColor::kRed().modulateOpacity(0.5));
46 
47  builder.SaveLayer(std::nullopt, &alpha);
48  builder.DrawRect(DlRect::MakeXYWH(0, 0, 100, 100), red);
49  builder.DrawRect(DlRect::MakeXYWH(200, 200, 100, 100), green);
50  builder.DrawRect(DlRect::MakeXYWH(400, 400, 100, 100), blue);
51  builder.Restore();
52 
53  ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
54 }
55 
56 TEST_P(AiksTest, CanRenderGroupOpacityToSavelayer) {
57  DisplayListBuilder builder;
58 
59  DlPaint red;
60  red.setColor(DlColor::kRed());
61 
62  DlPaint alpha;
63  alpha.setColor(DlColor::kRed().modulateOpacity(0.7));
64 
65  // Create a saveLayer that will forward its opacity to another
66  // saveLayer, to verify that we correctly distribute opacity.
67  DlRect bounds = DlRect::MakeLTRB(0, 0, 500, 500);
68  builder.SaveLayer(bounds, &alpha);
69  builder.SaveLayer(bounds, &alpha);
70  builder.DrawRect(DlRect::MakeXYWH(0, 0, 400, 400), red);
71  builder.DrawRect(DlRect::MakeXYWH(0, 0, 450, 450), red);
72  builder.Restore();
73  builder.Restore();
74 
75  ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
76 }
77 
78 } // namespace testing
79 } // namespace impeller
TEST_P(AiksTest, DrawAtlasNoColor)
flutter::DlRect DlRect
Definition: dl_dispatcher.h:25