| // Copyright 2017 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FLUTTER_FLOW_LAYERS_LAYER_BUILDER_H_ |
| #define FLUTTER_FLOW_LAYERS_LAYER_BUILDER_H_ |
| |
| #include <memory> |
| |
| #include "flutter/flow/layers/layer.h" |
| #include "flutter/flow/skia_gpu_object.h" |
| #include "garnet/public/lib/fxl/macros.h" |
| #include "third_party/skia/include/core/SkBlendMode.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| #include "third_party/skia/include/core/SkImageFilter.h" |
| #include "third_party/skia/include/core/SkMatrix.h" |
| #include "third_party/skia/include/core/SkPath.h" |
| #include "third_party/skia/include/core/SkPicture.h" |
| #include "third_party/skia/include/core/SkRRect.h" |
| #include "third_party/skia/include/core/SkRect.h" |
| #include "third_party/skia/include/core/SkShader.h" |
| |
| namespace flow { |
| |
| class LayerBuilder { |
| public: |
| static std::unique_ptr<LayerBuilder> Create(); |
| |
| LayerBuilder(); |
| |
| virtual ~LayerBuilder(); |
| |
| virtual void PushTransform(const SkMatrix& matrix) = 0; |
| |
| virtual void PushClipRect(const SkRect& rect) = 0; |
| |
| virtual void PushClipRoundedRect(const SkRRect& rect) = 0; |
| |
| virtual void PushClipPath(const SkPath& path) = 0; |
| |
| virtual void PushOpacity(int alpha) = 0; |
| |
| virtual void PushColorFilter(SkColor color, SkBlendMode blend_mode) = 0; |
| |
| virtual void PushBackdropFilter(sk_sp<SkImageFilter> filter) = 0; |
| |
| virtual void PushShaderMask(sk_sp<SkShader> shader, |
| const SkRect& rect, |
| SkBlendMode blend_mode) = 0; |
| |
| virtual void PushPhysicalShape(const SkPath& path, |
| double elevation, |
| SkColor color, |
| SkColor shadow_color, |
| SkScalar device_pixel_ratio) = 0; |
| |
| virtual void PushPerformanceOverlay(uint64_t enabled_options, |
| const SkRect& rect) = 0; |
| |
| virtual void PushPicture(const SkPoint& offset, |
| SkiaGPUObject<SkPicture> picture, |
| bool picture_is_complex, |
| bool picture_will_change) = 0; |
| |
| virtual void PushTexture(const SkPoint& offset, |
| const SkSize& size, |
| int64_t texture_id) = 0; |
| |
| #if defined(OS_FUCHSIA) |
| virtual void PushChildScene( |
| const SkPoint& offset, |
| const SkSize& size, |
| fxl::RefPtr<flow::ExportNodeHolder> export_token_holder, |
| bool hit_testable) = 0; |
| #endif // defined(OS_FUCHSIA) |
| |
| virtual void Pop() = 0; |
| |
| virtual std::unique_ptr<flow::Layer> TakeLayer() = 0; |
| |
| int GetRasterizerTracingThreshold() const; |
| |
| bool GetCheckerboardRasterCacheImages() const; |
| |
| bool GetCheckerboardOffscreenLayers() const; |
| |
| void SetRasterizerTracingThreshold(uint32_t frameInterval); |
| |
| void SetCheckerboardRasterCacheImages(bool checkerboard); |
| |
| void SetCheckerboardOffscreenLayers(bool checkerboard); |
| |
| private: |
| int rasterizer_tracing_threshold_ = 0; |
| bool checkerboard_raster_cache_images_ = false; |
| bool checkerboard_offscreen_layers_ = false; |
| |
| FXL_DISALLOW_COPY_AND_ASSIGN(LayerBuilder); |
| }; |
| |
| } // namespace flow |
| |
| #endif // FLUTTER_FLOW_LAYERS_LAYER_BUILDER_H_ |