mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Merge pull request #2249 from abarth/shader_mask_layer
ShaderLayer should actually be ShaderMaskLayer
This commit is contained in:
commit
a862fda816
@ -34,8 +34,8 @@ source_set("compositor") {
|
||||
"raster_cache.h",
|
||||
"performance_overlay_layer.cc",
|
||||
"performance_overlay_layer.h",
|
||||
"shader_layer.cc",
|
||||
"shader_layer.h",
|
||||
"shader_mask_layer.cc",
|
||||
"shader_mask_layer.h",
|
||||
"transform_layer.cc",
|
||||
"transform_layer.h",
|
||||
]
|
||||
|
||||
@ -24,7 +24,7 @@ void PictureLayer::Preroll(PrerollContext* context,
|
||||
const SkMatrix& matrix) {
|
||||
image_ = context->frame.context().raster_cache().GetPrerolledImage(
|
||||
context->frame.gr_context(), picture_.get(), matrix);
|
||||
context->child_paint_bounds = picture_->cullRect();
|
||||
context->child_paint_bounds = picture_->cullRect().makeOffset(offset_.x(), offset_.y());
|
||||
}
|
||||
|
||||
void PictureLayer::Paint(PaintContext::ScopedFrame& frame) {
|
||||
|
||||
@ -2,31 +2,33 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "sky/compositor/shader_layer.h"
|
||||
#include "sky/compositor/shader_mask_layer.h"
|
||||
|
||||
namespace sky {
|
||||
namespace compositor {
|
||||
|
||||
ShaderLayer::ShaderLayer() {
|
||||
ShaderMaskLayer::ShaderMaskLayer() {
|
||||
}
|
||||
|
||||
ShaderLayer::~ShaderLayer() {
|
||||
ShaderMaskLayer::~ShaderMaskLayer() {
|
||||
}
|
||||
|
||||
void ShaderLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) {
|
||||
void ShaderMaskLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) {
|
||||
ContainerLayer::Preroll(context, matrix);
|
||||
set_paint_bounds(context->child_paint_bounds);
|
||||
}
|
||||
|
||||
void ShaderLayer::Paint(PaintContext::ScopedFrame& frame) {
|
||||
void ShaderMaskLayer::Paint(PaintContext::ScopedFrame& frame) {
|
||||
SkCanvas& canvas = frame.canvas();
|
||||
SkAutoCanvasRestore save(&canvas, false);
|
||||
canvas.saveLayer(&paint_bounds(), nullptr);
|
||||
PaintChildren(frame);
|
||||
|
||||
SkPaint paint;
|
||||
paint.setXfermodeMode(transfer_mode_);
|
||||
paint.setShader(shader_.get());
|
||||
|
||||
SkCanvas& canvas = frame.canvas();
|
||||
SkAutoCanvasRestore save(&canvas, false);
|
||||
canvas.saveLayer(&paint_bounds(), &paint);
|
||||
PaintChildren(frame);
|
||||
canvas.translate(mask_rect_.left(), mask_rect_.top());
|
||||
canvas.drawRect(SkRect::MakeWH(mask_rect_.width(), mask_rect_.height()), paint);
|
||||
}
|
||||
|
||||
} // namespace compositor
|
||||
@ -2,8 +2,8 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef SKY_COMPOSITOR_SHADER_LAYER_H_
|
||||
#define SKY_COMPOSITOR_SHADER_LAYER_H_
|
||||
#ifndef SKY_COMPOSITOR_SHADER_MASK_LAYER_H_
|
||||
#define SKY_COMPOSITOR_SHADER_MASK_LAYER_H_
|
||||
|
||||
#include "sky/compositor/container_layer.h"
|
||||
|
||||
@ -12,13 +12,17 @@
|
||||
namespace sky {
|
||||
namespace compositor {
|
||||
|
||||
class ShaderLayer : public ContainerLayer {
|
||||
class ShaderMaskLayer : public ContainerLayer {
|
||||
public:
|
||||
ShaderLayer();
|
||||
~ShaderLayer() override;
|
||||
ShaderMaskLayer();
|
||||
~ShaderMaskLayer() override;
|
||||
|
||||
void set_shader(SkShader* shader) { shader_ = shader; }
|
||||
|
||||
void set_mask_rect(const SkRect& mask_rect) {
|
||||
mask_rect_ = mask_rect;
|
||||
}
|
||||
|
||||
void set_transfer_mode(SkXfermode::Mode transfer_mode) {
|
||||
transfer_mode_ = transfer_mode;
|
||||
}
|
||||
@ -29,12 +33,13 @@ class ShaderLayer : public ContainerLayer {
|
||||
|
||||
private:
|
||||
RefPtr<SkShader> shader_;
|
||||
SkRect mask_rect_;
|
||||
SkXfermode::Mode transfer_mode_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ShaderLayer);
|
||||
DISALLOW_COPY_AND_ASSIGN(ShaderMaskLayer);
|
||||
};
|
||||
|
||||
} // namespace compositor
|
||||
} // namespace sky
|
||||
|
||||
#endif // SKY_COMPOSITOR_SHADER_LAYER_H_
|
||||
#endif // SKY_COMPOSITOR_SHADER_MASK_LAYER_H_
|
||||
@ -15,7 +15,7 @@
|
||||
#include "sky/compositor/opacity_layer.h"
|
||||
#include "sky/compositor/picture_layer.h"
|
||||
#include "sky/compositor/performance_overlay_layer.h"
|
||||
#include "sky/compositor/shader_layer.h"
|
||||
#include "sky/compositor/shader_mask_layer.h"
|
||||
#include "sky/compositor/transform_layer.h"
|
||||
#include "sky/engine/tonic/dart_args.h"
|
||||
#include "sky/engine/tonic/dart_binding_macros.h"
|
||||
@ -47,7 +47,7 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, SceneBuilder);
|
||||
V(SceneBuilder, pushClipPath) \
|
||||
V(SceneBuilder, pushOpacity) \
|
||||
V(SceneBuilder, pushColorFilter) \
|
||||
V(SceneBuilder, pushShader) \
|
||||
V(SceneBuilder, pushShaderMask) \
|
||||
V(SceneBuilder, pop) \
|
||||
V(SceneBuilder, addPicture) \
|
||||
V(SceneBuilder, addPerformanceOverlay) \
|
||||
@ -120,10 +120,11 @@ void SceneBuilder::pushColorFilter(CanvasColor color, TransferMode transferMode)
|
||||
addLayer(std::move(layer));
|
||||
}
|
||||
|
||||
void SceneBuilder::pushShader(Shader* shader, TransferMode transferMode)
|
||||
void SceneBuilder::pushShaderMask(Shader* shader, const Rect& maskRect, TransferMode transferMode)
|
||||
{
|
||||
std::unique_ptr<sky::compositor::ShaderLayer> layer(new sky::compositor::ShaderLayer());
|
||||
std::unique_ptr<sky::compositor::ShaderMaskLayer> layer(new sky::compositor::ShaderMaskLayer());
|
||||
layer->set_shader(shader->shader());
|
||||
layer->set_mask_rect(maskRect.sk_rect);
|
||||
layer->set_transfer_mode(transferMode);
|
||||
addLayer(std::move(layer));
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ public:
|
||||
void pushClipPath(const CanvasPath* path);
|
||||
void pushOpacity(int alpha);
|
||||
void pushColorFilter(CanvasColor color, TransferMode transferMode);
|
||||
void pushShader(Shader* shader, TransferMode transferMode);
|
||||
void pushShaderMask(Shader* shader, const Rect& maskRect, TransferMode transferMode);
|
||||
void pop();
|
||||
|
||||
void addPerformanceOverlay(uint64_t enabledOptions, const Rect& bounds);
|
||||
|
||||
@ -18,7 +18,7 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
|
||||
void _pushClipPath(Path path) native "SceneBuilder_pushClipPath";
|
||||
void _pushOpacity(int alpha) native "SceneBuilder_pushOpacity";
|
||||
void _pushColorFilter(Color color, TransferMode transferMode) native "SceneBuilder_pushColorFilter";
|
||||
void pushShader(Shader shader, TransferMode transferMode) native "SceneBuilder_pushShader";
|
||||
void pushShaderMask(Shader shader, Rect maskRect, TransferMode transferMode) native "SceneBuilder_pushShaderMask";
|
||||
|
||||
void pop() native "SceneBuilder_pop";
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user