From edf6249e07bbb8a627aa6b376bf293be6178fc79 Mon Sep 17 00:00:00 2001 From: liyuqian Date: Thu, 27 Sep 2018 11:48:27 -0700 Subject: [PATCH] Add pushOffset to SceneBuilder (#6349) For https://github.com/flutter/flutter/pull/21619#discussion_r220390088 --- lib/ui/compositing.dart | 7 +++++++ lib/ui/compositing/scene_builder.cc | 7 +++++++ lib/ui/compositing/scene_builder.h | 1 + 3 files changed, 15 insertions(+) diff --git a/lib/ui/compositing.dart b/lib/ui/compositing.dart index ff2cbec38..1e2af6802 100644 --- a/lib/ui/compositing.dart +++ b/lib/ui/compositing.dart @@ -64,6 +64,13 @@ class SceneBuilder extends NativeFieldWrapperClass2 { } void _pushTransform(Float64List matrix4) native 'SceneBuilder_pushTransform'; + /// Pushes an offset operation onto the operation stack. + /// + /// This is equivalent to [pushTransform] with a matrix with only translation. + /// + /// See [pop] for details about the operation stack. + void pushOffset(double dx, double dy) native 'SceneBuilder_pushOffset'; + /// Pushes a rectangular clip operation onto the operation stack. /// /// Rasterization outside the given rectangle is discarded. diff --git a/lib/ui/compositing/scene_builder.cc b/lib/ui/compositing/scene_builder.cc index bf3e8c0ed..a52c6ea15 100644 --- a/lib/ui/compositing/scene_builder.cc +++ b/lib/ui/compositing/scene_builder.cc @@ -93,6 +93,13 @@ void SceneBuilder::pushTransform(const tonic::Float64List& matrix4) { PushLayer(std::move(layer), cullRect); } +void SceneBuilder::pushOffset(double dx, double dy) { + SkMatrix sk_matrix = SkMatrix::MakeTrans(dx, dy); + auto layer = std::make_unique(); + layer->set_transform(sk_matrix); + PushLayer(std::move(layer), cull_rects_.top().makeOffset(-dx, -dy)); +} + void SceneBuilder::pushClipRect(double left, double right, double top, diff --git a/lib/ui/compositing/scene_builder.h b/lib/ui/compositing/scene_builder.h index fc7bcc6a9..94fe954a8 100644 --- a/lib/ui/compositing/scene_builder.h +++ b/lib/ui/compositing/scene_builder.h @@ -33,6 +33,7 @@ class SceneBuilder : public RefCountedDartWrappable { ~SceneBuilder() override; void pushTransform(const tonic::Float64List& matrix4); + void pushOffset(double dx, double dy); void pushClipRect(double left, double right, double top, -- GitLab