flutter_flutter/lib/ui/compositing/scene_builder.h
Chinmay Garde eec74e5c92
Rename the blink namespace to flutter. (#8517)
Some components in the Flutter engine were derived from the forked blink codebase. While the forked components have either been removed or rewritten, the use of the blink namespace has mostly (and inconsistently) remained. This renames the blink namesapce to flutter for consistency. There are no functional changes in this patch.
2019-04-09 12:44:42 -07:00

126 lines
4.3 KiB
C++

// Copyright 2013 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_LIB_UI_COMPOSITING_SCENE_BUILDER_H_
#define FLUTTER_LIB_UI_COMPOSITING_SCENE_BUILDER_H_
#include <stdint.h>
#include <memory>
#include <stack>
#include "flutter/lib/ui/compositing/scene.h"
#include "flutter/lib/ui/dart_wrapper.h"
#include "flutter/lib/ui/painting/engine_layer.h"
#include "flutter/lib/ui/painting/image_filter.h"
#include "flutter/lib/ui/painting/path.h"
#include "flutter/lib/ui/painting/picture.h"
#include "flutter/lib/ui/painting/rrect.h"
#include "flutter/lib/ui/painting/shader.h"
#include "third_party/tonic/typed_data/float64_list.h"
#if defined(OS_FUCHSIA)
#include "flutter/lib/ui/compositing/scene_host.h"
#endif
namespace flutter {
class SceneBuilder : public RefCountedDartWrappable<SceneBuilder> {
DEFINE_WRAPPERTYPEINFO();
FML_FRIEND_MAKE_REF_COUNTED(SceneBuilder);
public:
static fml::RefPtr<SceneBuilder> create() {
return fml::MakeRefCounted<SceneBuilder>();
}
~SceneBuilder() override;
fml::RefPtr<EngineLayer> pushTransform(tonic::Float64List& matrix4);
fml::RefPtr<EngineLayer> pushOffset(double dx, double dy);
fml::RefPtr<EngineLayer> pushClipRect(double left,
double right,
double top,
double bottom,
int clipBehavior);
fml::RefPtr<EngineLayer> pushClipRRect(const RRect& rrect, int clipBehavior);
fml::RefPtr<EngineLayer> pushClipPath(const CanvasPath* path,
int clipBehavior);
fml::RefPtr<EngineLayer> pushOpacity(int alpha, double dx = 0, double dy = 0);
fml::RefPtr<EngineLayer> pushColorFilter(int color, int blendMode);
fml::RefPtr<EngineLayer> pushBackdropFilter(ImageFilter* filter);
fml::RefPtr<EngineLayer> pushShaderMask(Shader* shader,
double maskRectLeft,
double maskRectRight,
double maskRectTop,
double maskRectBottom,
int blendMode);
fml::RefPtr<EngineLayer> pushPhysicalShape(const CanvasPath* path,
double elevation,
int color,
int shadowColor,
int clipBehavior);
void addRetained(fml::RefPtr<EngineLayer> retainedLayer);
void pop();
void addPerformanceOverlay(uint64_t enabledOptions,
double left,
double right,
double top,
double bottom);
void addPicture(double dx, double dy, Picture* picture, int hints);
void addTexture(double dx,
double dy,
double width,
double height,
int64_t textureId,
bool freeze);
void addPlatformView(double dx,
double dy,
double width,
double height,
int64_t viewId);
#if defined(OS_FUCHSIA)
void addChildScene(double dx,
double dy,
double width,
double height,
SceneHost* sceneHost,
bool hitTestable);
#endif
void setRasterizerTracingThreshold(uint32_t frameInterval);
void setCheckerboardRasterCacheImages(bool checkerboard);
void setCheckerboardOffscreenLayers(bool checkerboard);
fml::RefPtr<Scene> build();
static void RegisterNatives(tonic::DartLibraryNatives* natives);
private:
SceneBuilder();
std::shared_ptr<flow::ContainerLayer> root_layer_;
flow::ContainerLayer* current_layer_ = nullptr;
int rasterizer_tracing_threshold_ = 0;
bool checkerboard_raster_cache_images_ = false;
bool checkerboard_offscreen_layers_ = false;
void PushLayer(std::shared_ptr<flow::ContainerLayer> layer);
FML_DISALLOW_COPY_AND_ASSIGN(SceneBuilder);
};
} // namespace flutter
#endif // FLUTTER_LIB_UI_COMPOSITING_SCENE_BUILDER_H_