• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
5part of engine;
6
7class LayerScene implements ui.Scene {
8  final LayerTree layerTree;
9
10  LayerScene(Layer rootLayer) : layerTree = LayerTree() {
11    layerTree.rootLayer = rootLayer;
12  }
13
14  @override
15  void dispose() {}
16
17  @override
18  Future<ui.Image> toImage(int width, int height) => null;
19
20  @override
21  html.Element get webOnlyRootElement => null;
22}
23
24class LayerSceneBuilder implements ui.SceneBuilder {
25  Layer rootLayer;
26  ContainerLayer currentLayer;
27
28  @override
29  void addChildScene(
30      {ui.Offset offset = ui.Offset.zero,
31      double width = 0.0,
32      double height = 0.0,
33      ui.SceneHost sceneHost,
34      bool hitTestable = true}) {
35    throw UnimplementedError();
36  }
37
38  @override
39  void addPerformanceOverlay(int enabledOptions, ui.Rect bounds) {
40    // We don't plan to implement this on the web.
41    throw UnimplementedError();
42  }
43
44  @override
45  void addPicture(ui.Offset offset, ui.Picture picture,
46      {bool isComplexHint = false, bool willChangeHint = false}) {
47    currentLayer
48        .add(PictureLayer(picture, offset, isComplexHint, willChangeHint));
49  }
50
51  @override
52  void addRetained(ui.EngineLayer retainedLayer) {
53    if (currentLayer == null) {
54      return;
55    }
56    currentLayer.add(retainedLayer);
57  }
58
59  @override
60  void addTexture(int textureId,
61      {ui.Offset offset = ui.Offset.zero,
62      double width = 0.0,
63      double height = 0.0,
64      bool freeze = false}) {
65    // TODO(b/128315641): implement addTexture.
66  }
67
68  @override
69  void addPlatformView(
70    int viewId, {
71    ui.Offset offset = ui.Offset.zero,
72    double width = 0.0,
73    double height = 0.0,
74    Object webOnlyPaintedBy,
75  }) {
76    // TODO(b/128317425): implement addPlatformView.
77  }
78
79  @override
80  ui.Scene build() {
81    return LayerScene(rootLayer);
82  }
83
84  @override
85  void pop() {
86    if (currentLayer == null) {
87      return;
88    }
89    currentLayer = currentLayer.parent;
90  }
91
92  @override
93  ui.BackdropFilterEngineLayer pushBackdropFilter(ui.ImageFilter filter,
94      {ui.EngineLayer oldLayer}) {
95    throw UnimplementedError();
96  }
97
98  @override
99  ui.ClipPathEngineLayer pushClipPath(ui.Path path,
100      {ui.Clip clipBehavior = ui.Clip.antiAlias, ui.EngineLayer oldLayer}) {
101    pushLayer(ClipPathLayer(path));
102    return null;
103  }
104
105  @override
106  ui.ClipRRectEngineLayer pushClipRRect(ui.RRect rrect,
107      {ui.Clip clipBehavior, ui.EngineLayer oldLayer}) {
108    pushLayer(ClipRRectLayer(rrect));
109    return null;
110  }
111
112  @override
113  ui.ClipRectEngineLayer pushClipRect(ui.Rect rect,
114      {ui.Clip clipBehavior = ui.Clip.antiAlias, ui.EngineLayer oldLayer}) {
115    pushLayer(ClipRectLayer(rect));
116    return null;
117  }
118
119  @override
120  ui.ColorFilterEngineLayer pushColorFilter(ui.ColorFilter filter,
121      {ui.EngineLayer oldLayer}) {
122    throw UnimplementedError();
123  }
124
125  @override
126  ui.OffsetEngineLayer pushOffset(double dx, double dy,
127      {ui.EngineLayer oldLayer}) {
128    final Matrix4 matrix = Matrix4.translationValues(dx, dy, 0.0);
129    final TransformLayer layer = TransformLayer(matrix);
130    pushLayer(layer);
131    return layer;
132  }
133
134  @override
135  ui.OpacityEngineLayer pushOpacity(int alpha,
136      {ui.EngineLayer oldLayer, ui.Offset offset = ui.Offset.zero}) {
137    // TODO(het): Implement opacity
138    pushOffset(0.0, 0.0);
139    return null;
140  }
141
142  @override
143  ui.PhysicalShapeEngineLayer pushPhysicalShape({
144    ui.Path path,
145    double elevation,
146    ui.Color color,
147    ui.Color shadowColor,
148    ui.Clip clipBehavior = ui.Clip.none,
149    ui.EngineLayer oldLayer,
150  }) {
151    final PhysicalShapeLayer layer =
152        PhysicalShapeLayer(elevation, color, shadowColor, path, clipBehavior);
153    pushLayer(layer);
154    return layer;
155  }
156
157  @override
158  ui.ShaderMaskEngineLayer pushShaderMask(
159      ui.Shader shader, ui.Rect maskRect, ui.BlendMode blendMode,
160      {ui.EngineLayer oldLayer}) {
161    throw UnimplementedError();
162  }
163
164  @override
165  ui.TransformEngineLayer pushTransform(Float64List matrix4,
166      {ui.EngineLayer oldLayer}) {
167    final Matrix4 matrix = Matrix4.fromList(matrix4);
168    pushLayer(TransformLayer(matrix));
169    return null;
170  }
171
172  @override
173  void setCheckerboardOffscreenLayers(bool checkerboard) {
174    // TODO: implement setCheckerboardOffscreenLayers
175  }
176
177  @override
178  void setCheckerboardRasterCacheImages(bool checkerboard) {
179    // TODO: implement setCheckerboardRasterCacheImages
180  }
181
182  @override
183  void setRasterizerTracingThreshold(int frameInterval) {
184    // TODO: implement setRasterizerTracingThreshold
185  }
186
187  void pushLayer(ContainerLayer layer) {
188    if (rootLayer == null) {
189      rootLayer = currentLayer = layer;
190      return;
191    }
192
193    if (currentLayer == null) {
194      return;
195    }
196
197    currentLayer.add(layer);
198    currentLayer = layer;
199  }
200
201  @override
202  void setProperties(double width, double height, double insetTop,
203      double insetRight, double insetBottom, double insetLeft, bool focusable) {
204    throw UnimplementedError();
205  }
206}
207