|
4 | 4 |
|
5 | 5 | #include "flutter/flow/layers/clip_rect_layer.h"
|
6 | 6 | #include "flutter/flow/layers/platform_view_layer.h"
|
| 7 | +#include "flutter/flow/layers/transform_layer.h" |
7 | 8 |
|
8 | 9 | #include "flutter/flow/testing/layer_test.h"
|
9 | 10 | #include "flutter/flow/testing/mock_embedder.h"
|
@@ -95,5 +96,46 @@ TEST_F(PlatformViewLayerTest, OpacityInheritance) {
|
95 | 96 | EXPECT_EQ(context->renderable_state_flags, 0);
|
96 | 97 | }
|
97 | 98 |
|
| 99 | +TEST_F(PlatformViewLayerTest, StateTransfer) { |
| 100 | + const SkMatrix transform1 = SkMatrix::Translate(5, 5); |
| 101 | + const SkMatrix transform2 = SkMatrix::Translate(15, 15); |
| 102 | + const SkMatrix combined_transform = SkMatrix::Translate(20, 20); |
| 103 | + const SkPoint layer_offset = SkPoint::Make(0.0f, 0.0f); |
| 104 | + const SkSize layer_size = SkSize::Make(8.0f, 8.0f); |
| 105 | + const int64_t view_id = 0; |
| 106 | + const SkPath path1 = SkPath().addOval({10, 10, 20, 20}); |
| 107 | + const SkPath path2 = SkPath().addOval({15, 15, 30, 30}); |
| 108 | + |
| 109 | + // transform_layer1 |
| 110 | + // |- child1 |
| 111 | + // |- platform_layer |
| 112 | + // |- transform_layer2 |
| 113 | + // |- child2 |
| 114 | + auto transform_layer1 = std::make_shared<TransformLayer>(transform1); |
| 115 | + auto transform_layer2 = std::make_shared<TransformLayer>(transform2); |
| 116 | + auto platform_layer = |
| 117 | + std::make_shared<PlatformViewLayer>(layer_offset, layer_size, view_id); |
| 118 | + auto child1 = std::make_shared<MockLayer>(path1); |
| 119 | + child1->set_expected_paint_matrix(transform1); |
| 120 | + auto child2 = std::make_shared<MockLayer>(path2); |
| 121 | + child2->set_expected_paint_matrix(combined_transform); |
| 122 | + transform_layer1->Add(child1); |
| 123 | + transform_layer1->Add(platform_layer); |
| 124 | + transform_layer1->Add(transform_layer2); |
| 125 | + transform_layer2->Add(child2); |
| 126 | + |
| 127 | + auto embedder = MockViewEmbedder(); |
| 128 | + DisplayListCanvasRecorder recorder({0, 0, 500, 500}); |
| 129 | + embedder.AddRecorder(&recorder); |
| 130 | + |
| 131 | + PrerollContext* preroll_ctx = preroll_context(); |
| 132 | + preroll_ctx->view_embedder = &embedder; |
| 133 | + transform_layer1->Preroll(preroll_ctx, SkMatrix()); |
| 134 | + |
| 135 | + PaintContext& paint_ctx = paint_context(); |
| 136 | + paint_ctx.view_embedder = &embedder; |
| 137 | + transform_layer1->Paint(paint_ctx); |
| 138 | +} |
| 139 | + |
98 | 140 | } // namespace testing
|
99 | 141 | } // namespace flutter
|
0 commit comments