Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
60b27fd5
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
60b27fd5
编写于
2月 20, 2020
作者:
D
Dan Field
提交者:
GitHub
2月 20, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reland "Remove usage of Dart_AllocateWithNativeFields" (#16713)
上级
e44f99bb
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
244 addition
and
122 deletion
+244
-122
lib/ui/compositing.dart
lib/ui/compositing.dart
+66
-29
lib/ui/compositing/scene.cc
lib/ui/compositing/scene.cc
+7
-5
lib/ui/compositing/scene.h
lib/ui/compositing/scene.h
+5
-4
lib/ui/compositing/scene_builder.cc
lib/ui/compositing/scene_builder.cc
+53
-47
lib/ui/compositing/scene_builder.h
lib/ui/compositing/scene_builder.h
+37
-26
lib/ui/painting.dart
lib/ui/painting.dart
+13
-1
lib/ui/painting/engine_layer.h
lib/ui/painting/engine_layer.h
+6
-0
lib/ui/painting/picture.cc
lib/ui/painting/picture.cc
+5
-1
lib/ui/painting/picture.h
lib/ui/painting/picture.h
+2
-1
lib/ui/painting/picture_recorder.cc
lib/ui/painting/picture_recorder.cc
+4
-3
lib/ui/painting/picture_recorder.h
lib/ui/painting/picture_recorder.h
+1
-1
third_party/tonic/dart_state.cc
third_party/tonic/dart_state.cc
+9
-0
third_party/tonic/dart_state.h
third_party/tonic/dart_state.h
+7
-0
third_party/tonic/dart_wrappable.cc
third_party/tonic/dart_wrappable.cc
+26
-4
third_party/tonic/dart_wrappable.h
third_party/tonic/dart_wrappable.h
+3
-0
未找到文件。
lib/ui/compositing.dart
浏览文件 @
60b27fd5
...
...
@@ -281,12 +281,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
})
{
assert
(
_matrix4IsValid
(
matrix4
));
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushTransform'
));
final
TransformEngineLayer
layer
=
TransformEngineLayer
.
_
(
_pushTransform
(
matrix4
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushTransform
(
engineLayer
,
matrix4
);
final
TransformEngineLayer
layer
=
TransformEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushTransform
(
Float64List
matrix4
)
native
'SceneBuilder_pushTransform'
;
void
_pushTransform
(
EngineLayer
layer
,
Float64List
matrix4
)
native
'SceneBuilder_pushTransform'
;
/// Pushes an offset operation onto the operation stack.
///
...
...
@@ -303,12 +305,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
OffsetEngineLayer
oldLayer
,
})
{
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushOffset'
));
final
OffsetEngineLayer
layer
=
OffsetEngineLayer
.
_
(
_pushOffset
(
dx
,
dy
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushOffset
(
engineLayer
,
dx
,
dy
);
final
OffsetEngineLayer
layer
=
OffsetEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushOffset
(
double
dx
,
double
dy
)
native
'SceneBuilder_pushOffset'
;
void
_pushOffset
(
EngineLayer
layer
,
double
dx
,
double
dy
)
native
'SceneBuilder_pushOffset'
;
/// Pushes a rectangular clip operation onto the operation stack.
///
...
...
@@ -328,13 +332,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert
(
clipBehavior
!=
null
);
assert
(
clipBehavior
!=
Clip
.
none
);
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushClipRect'
));
final
ClipRectEngineLayer
layer
=
ClipRectEngineLayer
.
_
(
_pushClipRect
(
rect
.
left
,
rect
.
right
,
rect
.
top
,
rect
.
bottom
,
clipBehavior
.
index
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushClipRect
(
engineLayer
,
rect
.
left
,
rect
.
right
,
rect
.
top
,
rect
.
bottom
,
clipBehavior
.
index
);
final
ClipRectEngineLayer
layer
=
ClipRectEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushClipRect
(
double
left
,
double
right
,
double
top
,
double
bottom
,
int
clipBehavior
)
void
_pushClipRect
(
EngineLayer
outEngineLayer
,
double
left
,
double
right
,
double
top
,
double
bottom
,
int
clipBehavior
)
native
'SceneBuilder_pushClipRect'
;
/// Pushes a rounded-rectangular clip operation onto the operation stack.
...
...
@@ -355,13 +360,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert
(
clipBehavior
!=
null
);
assert
(
clipBehavior
!=
Clip
.
none
);
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushClipRRect'
));
final
ClipRRectEngineLayer
layer
=
ClipRRectEngineLayer
.
_
(
_pushClipRRect
(
rrect
.
_value32
,
clipBehavior
.
index
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushClipRRect
(
engineLayer
,
rrect
.
_value32
,
clipBehavior
.
index
);
final
ClipRRectEngineLayer
layer
=
ClipRRectEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushClipRRect
(
Float32List
rrect
,
int
clipBehavior
)
void
_pushClipRRect
(
EngineLayer
layer
,
Float32List
rrect
,
int
clipBehavior
)
native
'SceneBuilder_pushClipRRect'
;
/// Pushes a path clip operation onto the operation stack.
...
...
@@ -382,13 +388,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert
(
clipBehavior
!=
null
);
assert
(
clipBehavior
!=
Clip
.
none
);
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushClipPath'
));
final
ClipPathEngineLayer
layer
=
ClipPathEngineLayer
.
_
(
_pushClipPath
(
path
,
clipBehavior
.
index
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushClipPath
(
engineLayer
,
path
,
clipBehavior
.
index
);
final
ClipPathEngineLayer
layer
=
ClipPathEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushClipPath
(
Path
path
,
int
clipBehavior
)
native
'SceneBuilder_pushClipPath'
;
void
_pushClipPath
(
EngineLayer
layer
,
Path
path
,
int
clipBehavior
)
native
'SceneBuilder_pushClipPath'
;
/// Pushes an opacity operation onto the operation stack.
///
...
...
@@ -408,13 +415,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
OpacityEngineLayer
oldLayer
,
})
{
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushOpacity'
));
final
OpacityEngineLayer
layer
=
OpacityEngineLayer
.
_
(
_pushOpacity
(
alpha
,
offset
.
dx
,
offset
.
dy
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushOpacity
(
engineLayer
,
alpha
,
offset
.
dx
,
offset
.
dy
);
final
OpacityEngineLayer
layer
=
OpacityEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushOpacity
(
int
alpha
,
double
dx
,
double
dy
)
native
'SceneBuilder_pushOpacity'
;
void
_pushOpacity
(
EngineLayer
layer
,
int
alpha
,
double
dx
,
double
dy
)
native
'SceneBuilder_pushOpacity'
;
/// Pushes a color filter operation onto the operation stack.
///
...
...
@@ -434,12 +442,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushColorFilter'
));
final
_ColorFilter
nativeFilter
=
filter
.
_toNativeColorFilter
();
assert
(
nativeFilter
!=
null
);
final
ColorFilterEngineLayer
layer
=
ColorFilterEngineLayer
.
_
(
_pushColorFilter
(
nativeFilter
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushColorFilter
(
engineLayer
,
nativeFilter
);
final
ColorFilterEngineLayer
layer
=
ColorFilterEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushColorFilter
(
_ColorFilter
filter
)
native
'SceneBuilder_pushColorFilter'
;
void
_pushColorFilter
(
EngineLayer
layer
,
_ColorFilter
filter
)
native
'SceneBuilder_pushColorFilter'
;
/// Pushes an image filter operation onto the operation stack.
///
...
...
@@ -459,12 +469,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushImageFilter'
));
final
_ImageFilter
nativeFilter
=
filter
.
_toNativeImageFilter
();
assert
(
nativeFilter
!=
null
);
final
ImageFilterEngineLayer
layer
=
ImageFilterEngineLayer
.
_
(
_pushImageFilter
(
nativeFilter
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushImageFilter
(
engineLayer
,
nativeFilter
);
final
ImageFilterEngineLayer
layer
=
ImageFilterEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushImageFilter
(
_ImageFilter
filter
)
native
'SceneBuilder_pushImageFilter'
;
void
_pushImageFilter
(
EngineLayer
outEngineLayer
,
_ImageFilter
filter
)
native
'SceneBuilder_pushImageFilter'
;
/// Pushes a backdrop filter operation onto the operation stack.
///
...
...
@@ -481,13 +493,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
BackdropFilterEngineLayer
oldLayer
,
})
{
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushBackdropFilter'
));
final
BackdropFilterEngineLayer
layer
=
BackdropFilterEngineLayer
.
_
(
_pushBackdropFilter
(
filter
.
_toNativeImageFilter
()));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushBackdropFilter
(
engineLayer
,
filter
.
_toNativeImageFilter
());
final
BackdropFilterEngineLayer
layer
=
BackdropFilterEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushBackdropFilter
(
_ImageFilter
filter
)
native
'SceneBuilder_pushBackdropFilter'
;
void
_pushBackdropFilter
(
EngineLayer
outEngineLayer
,
_ImageFilter
filter
)
native
'SceneBuilder_pushBackdropFilter'
;
/// Pushes a shader mask operation onto the operation stack.
///
...
...
@@ -506,13 +519,23 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
ShaderMaskEngineLayer
oldLayer
,
})
{
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushShaderMask'
));
final
ShaderMaskEngineLayer
layer
=
ShaderMaskEngineLayer
.
_
(
_pushShaderMask
(
shader
,
maskRect
.
left
,
maskRect
.
right
,
maskRect
.
top
,
maskRect
.
bottom
,
blendMode
.
index
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushShaderMask
(
engineLayer
,
shader
,
maskRect
.
left
,
maskRect
.
right
,
maskRect
.
top
,
maskRect
.
bottom
,
blendMode
.
index
,
);
final
ShaderMaskEngineLayer
layer
=
ShaderMaskEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushShaderMask
(
EngineLayer
engineLayer
,
Shader
shader
,
double
maskRectLeft
,
double
maskRectRight
,
...
...
@@ -546,13 +569,21 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
PhysicalShapeEngineLayer
oldLayer
,
})
{
assert
(
_debugCheckCanBeUsedAsOldLayer
(
oldLayer
,
'pushPhysicalShape'
));
final
PhysicalShapeEngineLayer
layer
=
PhysicalShapeEngineLayer
.
_
(
_pushPhysicalShape
(
path
,
elevation
,
color
.
value
,
shadowColor
?.
value
??
0xFF000000
,
clipBehavior
.
index
));
final
EngineLayer
engineLayer
=
EngineLayer
.
_
();
_pushPhysicalShape
(
engineLayer
,
path
,
elevation
,
color
.
value
,
shadowColor
?.
value
??
0xFF000000
,
clipBehavior
.
index
,
);
final
PhysicalShapeEngineLayer
layer
=
PhysicalShapeEngineLayer
.
_
(
engineLayer
);
assert
(
_debugPushLayer
(
layer
));
return
layer
;
}
EngineLayer
_pushPhysicalShape
(
Path
path
,
double
elevation
,
int
color
,
int
shadowColor
,
EngineLayer
_pushPhysicalShape
(
EngineLayer
outEngineLayer
,
Path
path
,
double
elevation
,
int
color
,
int
shadowColor
,
int
clipBehavior
)
native
'SceneBuilder_pushPhysicalShape'
;
/// Ends the effect of the most recently pushed operation.
...
...
@@ -770,7 +801,13 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
///
/// After calling this function, the scene builder object is invalid and
/// cannot be used further.
Scene
build
()
native
'SceneBuilder_build'
;
Scene
build
()
{
final
Scene
scene
=
Scene
.
_
();
_build
(
scene
);
return
scene
;
}
void
_build
(
Scene
outScene
)
native
'SceneBuilder_build'
;
}
/// (Fuchsia-only) Hosts content provided by another application.
...
...
lib/ui/compositing/scene.cc
浏览文件 @
60b27fd5
...
...
@@ -26,13 +26,15 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, Scene);
DART_BIND_ALL
(
Scene
,
FOR_EACH_BINDING
)
fml
::
RefPtr
<
Scene
>
Scene
::
create
(
std
::
shared_ptr
<
flutter
::
Layer
>
rootLayer
,
uint32_t
rasterizerTracingThreshold
,
bool
checkerboardRasterCacheImages
,
bool
checkerboardOffscreenLayers
)
{
return
fml
::
MakeRefCounted
<
Scene
>
(
void
Scene
::
create
(
Dart_Handle
scene_handle
,
std
::
shared_ptr
<
flutter
::
Layer
>
rootLayer
,
uint32_t
rasterizerTracingThreshold
,
bool
checkerboardRasterCacheImages
,
bool
checkerboardOffscreenLayers
)
{
auto
scene
=
fml
::
MakeRefCounted
<
Scene
>
(
std
::
move
(
rootLayer
),
rasterizerTracingThreshold
,
checkerboardRasterCacheImages
,
checkerboardOffscreenLayers
);
scene
->
ClaimDartHandle
(
scene_handle
);
}
Scene
::
Scene
(
std
::
shared_ptr
<
flutter
::
Layer
>
rootLayer
,
...
...
lib/ui/compositing/scene.h
浏览文件 @
60b27fd5
...
...
@@ -24,10 +24,11 @@ class Scene : public RefCountedDartWrappable<Scene> {
public:
~
Scene
()
override
;
static
fml
::
RefPtr
<
Scene
>
create
(
std
::
shared_ptr
<
flutter
::
Layer
>
rootLayer
,
uint32_t
rasterizerTracingThreshold
,
bool
checkerboardRasterCacheImages
,
bool
checkerboardOffscreenLayers
);
static
void
create
(
Dart_Handle
scene_handle
,
std
::
shared_ptr
<
flutter
::
Layer
>
rootLayer
,
uint32_t
rasterizerTracingThreshold
,
bool
checkerboardRasterCacheImages
,
bool
checkerboardOffscreenLayers
);
std
::
unique_ptr
<
flutter
::
LayerTree
>
takeLayerTree
();
...
...
lib/ui/compositing/scene_builder.cc
浏览文件 @
60b27fd5
...
...
@@ -88,111 +88,118 @@ SceneBuilder::SceneBuilder() {
SceneBuilder
::~
SceneBuilder
()
=
default
;
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushTransform
(
tonic
::
Float64List
&
matrix4
)
{
void
SceneBuilder
::
pushTransform
(
Dart_Handle
layer_handle
,
tonic
::
Float64List
&
matrix4
)
{
SkMatrix
sk_matrix
=
ToSkMatrix
(
matrix4
);
auto
layer
=
std
::
make_shared
<
flutter
::
TransformLayer
>
(
sk_matrix
);
PushLayer
(
layer
);
// matrix4 has to be released before we can return another Dart object
matrix4
.
Release
();
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushOffset
(
double
dx
,
double
dy
)
{
void
SceneBuilder
::
pushOffset
(
Dart_Handle
layer_handle
,
double
dx
,
double
dy
)
{
SkMatrix
sk_matrix
=
SkMatrix
::
MakeTrans
(
dx
,
dy
);
auto
layer
=
std
::
make_shared
<
flutter
::
TransformLayer
>
(
sk_matrix
);
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushClipRect
(
double
left
,
double
right
,
double
top
,
double
bottom
,
int
clipBehavior
)
{
void
SceneBuilder
::
pushClipRect
(
Dart_Handle
layer_handle
,
double
left
,
double
right
,
double
top
,
double
bottom
,
int
clipBehavior
)
{
SkRect
clipRect
=
SkRect
::
MakeLTRB
(
left
,
top
,
right
,
bottom
);
flutter
::
Clip
clip_behavior
=
static_cast
<
flutter
::
Clip
>
(
clipBehavior
);
auto
layer
=
std
::
make_shared
<
flutter
::
ClipRectLayer
>
(
clipRect
,
clip_behavior
);
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushClipRRect
(
const
RRect
&
rrect
,
int
clipBehavior
)
{
void
SceneBuilder
::
pushClipRRect
(
Dart_Handle
layer_handle
,
const
RRect
&
rrect
,
int
clipBehavior
)
{
flutter
::
Clip
clip_behavior
=
static_cast
<
flutter
::
Clip
>
(
clipBehavior
);
auto
layer
=
std
::
make_shared
<
flutter
::
ClipRRectLayer
>
(
rrect
.
sk_rrect
,
clip_behavior
);
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushClipPath
(
const
CanvasPath
*
path
,
int
clipBehavior
)
{
void
SceneBuilder
::
pushClipPath
(
Dart_Handle
layer_handle
,
const
CanvasPath
*
path
,
int
clipBehavior
)
{
flutter
::
Clip
clip_behavior
=
static_cast
<
flutter
::
Clip
>
(
clipBehavior
);
FML_DCHECK
(
clip_behavior
!=
flutter
::
Clip
::
none
);
auto
layer
=
std
::
make_shared
<
flutter
::
ClipPathLayer
>
(
path
->
path
(),
clip_behavior
);
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushOpacity
(
int
alpha
,
double
dx
,
double
dy
)
{
void
SceneBuilder
::
pushOpacity
(
Dart_Handle
layer_handle
,
int
alpha
,
double
dx
,
double
dy
)
{
auto
layer
=
std
::
make_shared
<
flutter
::
OpacityLayer
>
(
alpha
,
SkPoint
::
Make
(
dx
,
dy
));
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushColorFilter
(
const
ColorFilter
*
color_filter
)
{
void
SceneBuilder
::
pushColorFilter
(
Dart_Handle
layer_handle
,
const
ColorFilter
*
color_filter
)
{
auto
layer
=
std
::
make_shared
<
flutter
::
ColorFilterLayer
>
(
color_filter
->
filter
());
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushImageFilter
(
const
ImageFilter
*
image_filter
)
{
void
SceneBuilder
::
pushImageFilter
(
Dart_Handle
layer_handle
,
const
ImageFilter
*
image_filter
)
{
auto
layer
=
std
::
make_shared
<
flutter
::
ImageFilterLayer
>
(
image_filter
->
filter
());
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushBackdropFilter
(
ImageFilter
*
filter
)
{
void
SceneBuilder
::
pushBackdropFilter
(
Dart_Handle
layer_handle
,
ImageFilter
*
filter
)
{
auto
layer
=
std
::
make_shared
<
flutter
::
BackdropFilterLayer
>
(
filter
->
filter
());
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushShaderMask
(
Shader
*
shader
,
double
maskRectLeft
,
double
maskRectRight
,
double
maskRectTop
,
double
maskRectBottom
,
int
blendMode
)
{
void
SceneBuilder
::
pushShaderMask
(
Dart_Handle
layer_handle
,
Shader
*
shader
,
double
maskRectLeft
,
double
maskRectRight
,
double
maskRectTop
,
double
maskRectBottom
,
int
blendMode
)
{
SkRect
rect
=
SkRect
::
MakeLTRB
(
maskRectLeft
,
maskRectTop
,
maskRectRight
,
maskRectBottom
);
auto
layer
=
std
::
make_shared
<
flutter
::
ShaderMaskLayer
>
(
shader
->
shader
(),
rect
,
static_cast
<
SkBlendMode
>
(
blendMode
));
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
fml
::
RefPtr
<
EngineLayer
>
SceneBuilder
::
pushPhysicalShape
(
const
CanvasPath
*
path
,
double
elevation
,
int
color
,
int
shadow_color
,
int
clipBehavior
)
{
void
SceneBuilder
::
pushPhysicalShape
(
Dart_Handle
layer_handle
,
const
CanvasPath
*
path
,
double
elevation
,
int
color
,
int
shadow_color
,
int
clipBehavior
)
{
auto
layer
=
std
::
make_shared
<
flutter
::
PhysicalShapeLayer
>
(
static_cast
<
SkColor
>
(
color
),
static_cast
<
SkColor
>
(
shadow_color
),
static_cast
<
float
>
(
elevation
),
path
->
path
(),
static_cast
<
flutter
::
Clip
>
(
clipBehavior
));
PushLayer
(
layer
);
return
EngineLayer
::
MakeRetained
(
layer
);
EngineLayer
::
MakeRetained
(
layer_handle
,
layer
);
}
void
SceneBuilder
::
addRetained
(
fml
::
RefPtr
<
EngineLayer
>
retainedLayer
)
{
...
...
@@ -275,14 +282,13 @@ void SceneBuilder::setCheckerboardOffscreenLayers(bool checkerboard) {
checkerboard_offscreen_layers_
=
checkerboard
;
}
fml
::
RefPtr
<
Scene
>
SceneBuilder
::
build
(
)
{
void
SceneBuilder
::
build
(
Dart_Handle
scene_handle
)
{
FML_DCHECK
(
layer_stack_
.
size
()
>=
1
);
fml
::
RefPtr
<
Scene
>
scene
=
Scene
::
create
(
layer_stack_
[
0
],
rasterizer_tracing_threshold
_
,
checkerboard_raster_cache_images_
,
checkerboard_offscreen_layers_
);
Scene
::
create
(
scene_handle
,
layer_stack_
[
0
],
rasterizer_tracing_threshold_
,
checkerboard_raster_cache_images
_
,
checkerboard_offscreen_layers_
);
ClearDartWrapper
();
// may delete this object.
return
scene
;
}
void
SceneBuilder
::
AddLayer
(
std
::
shared_ptr
<
Layer
>
layer
)
{
...
...
lib/ui/compositing/scene_builder.h
浏览文件 @
60b27fd5
...
...
@@ -38,31 +38,42 @@ class SceneBuilder : public RefCountedDartWrappable<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
(
const
ColorFilter
*
color_filter
);
fml
::
RefPtr
<
EngineLayer
>
pushImageFilter
(
const
ImageFilter
*
image_filter
);
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
pushTransform
(
Dart_Handle
layer_handle
,
tonic
::
Float64List
&
matrix4
);
void
pushOffset
(
Dart_Handle
layer_handle
,
double
dx
,
double
dy
);
void
pushClipRect
(
Dart_Handle
layer_handle
,
double
left
,
double
right
,
double
top
,
double
bottom
,
int
clipBehavior
);
void
pushClipRRect
(
Dart_Handle
layer_handle
,
const
RRect
&
rrect
,
int
clipBehavior
);
void
pushClipPath
(
Dart_Handle
layer_handle
,
const
CanvasPath
*
path
,
int
clipBehavior
);
void
pushOpacity
(
Dart_Handle
layer_handle
,
int
alpha
,
double
dx
=
0
,
double
dy
=
0
);
void
pushColorFilter
(
Dart_Handle
layer_handle
,
const
ColorFilter
*
color_filter
);
void
pushImageFilter
(
Dart_Handle
layer_handle
,
const
ImageFilter
*
image_filter
);
void
pushBackdropFilter
(
Dart_Handle
layer_handle
,
ImageFilter
*
filter
);
void
pushShaderMask
(
Dart_Handle
layer_handle
,
Shader
*
shader
,
double
maskRectLeft
,
double
maskRectRight
,
double
maskRectTop
,
double
maskRectBottom
,
int
blendMode
);
void
pushPhysicalShape
(
Dart_Handle
layer_handle
,
const
CanvasPath
*
path
,
double
elevation
,
int
color
,
int
shadowColor
,
int
clipBehavior
);
void
addRetained
(
fml
::
RefPtr
<
EngineLayer
>
retainedLayer
);
...
...
@@ -102,7 +113,7 @@ class SceneBuilder : public RefCountedDartWrappable<SceneBuilder> {
void
setCheckerboardRasterCacheImages
(
bool
checkerboard
);
void
setCheckerboardOffscreenLayers
(
bool
checkerboard
);
fml
::
RefPtr
<
Scene
>
build
(
);
void
build
(
Dart_Handle
scene_handle
);
static
void
RegisterNatives
(
tonic
::
DartLibraryNatives
*
natives
);
...
...
lib/ui/painting.dart
浏览文件 @
60b27fd5
...
...
@@ -1893,6 +1893,12 @@ class Path extends NativeFieldWrapperClass2 {
Path
()
{
_constructor
();
}
void
_constructor
()
native
'Path_constructor'
;
// Workaround for tonic, which expects classes with native fields to have a
// private constructor.
// TODO(dnfield): rework this to use ClaimNativeField - https://github.com/flutter/flutter/issues/50997
@pragma
(
'vm:entry-point'
)
Path
.
_
()
{
_constructor
();
}
/// Creates a copy of another [Path].
///
/// This copy is fast and does not require additional memory unless either
...
...
@@ -4159,7 +4165,13 @@ class PictureRecorder extends NativeFieldWrapperClass2 {
/// and the canvas objects are invalid and cannot be used further.
///
/// Returns null if the PictureRecorder is not associated with a canvas.
Picture
endRecording
()
native
'PictureRecorder_endRecording'
;
Picture
endRecording
()
{
final
Picture
picture
=
Picture
.
_
();
_endRecording
(
picture
);
return
picture
;
}
void
_endRecording
(
Picture
outPicture
)
native
'PictureRecorder_endRecording'
;
}
/// A single shadow.
...
...
lib/ui/painting/engine_layer.h
浏览文件 @
60b27fd5
...
...
@@ -30,6 +30,12 @@ class EngineLayer : public RefCountedDartWrappable<EngineLayer> {
return
fml
::
MakeRefCounted
<
EngineLayer
>
(
layer
);
}
static
void
MakeRetained
(
Dart_Handle
dart_handle
,
std
::
shared_ptr
<
flutter
::
ContainerLayer
>
layer
)
{
auto
engine_layer
=
fml
::
MakeRefCounted
<
EngineLayer
>
(
layer
);
engine_layer
->
ClaimDartHandle
(
dart_handle
);
}
static
void
RegisterNatives
(
tonic
::
DartLibraryNatives
*
natives
);
std
::
shared_ptr
<
flutter
::
ContainerLayer
>
Layer
()
const
{
return
layer_
;
}
...
...
lib/ui/painting/picture.cc
浏览文件 @
60b27fd5
...
...
@@ -27,8 +27,12 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, Picture);
DART_BIND_ALL
(
Picture
,
FOR_EACH_BINDING
)
fml
::
RefPtr
<
Picture
>
Picture
::
Create
(
Dart_Handle
dart_handle
,
flutter
::
SkiaGPUObject
<
SkPicture
>
picture
)
{
return
fml
::
MakeRefCounted
<
Picture
>
(
std
::
move
(
picture
));
auto
canvas_picture
=
fml
::
MakeRefCounted
<
Picture
>
(
std
::
move
(
picture
));
canvas_picture
->
ClaimDartHandle
(
dart_handle
);
return
canvas_picture
;
}
Picture
::
Picture
(
flutter
::
SkiaGPUObject
<
SkPicture
>
picture
)
...
...
lib/ui/painting/picture.h
浏览文件 @
60b27fd5
...
...
@@ -23,7 +23,8 @@ class Picture : public RefCountedDartWrappable<Picture> {
public:
~
Picture
()
override
;
static
fml
::
RefPtr
<
Picture
>
Create
(
flutter
::
SkiaGPUObject
<
SkPicture
>
picture
);
static
fml
::
RefPtr
<
Picture
>
Create
(
Dart_Handle
dart_handle
,
flutter
::
SkiaGPUObject
<
SkPicture
>
picture
);
sk_sp
<
SkPicture
>
picture
()
const
{
return
picture_
.
get
();
}
...
...
lib/ui/painting/picture_recorder.cc
浏览文件 @
60b27fd5
...
...
@@ -47,12 +47,13 @@ SkCanvas* PictureRecorder::BeginRecording(SkRect bounds) {
return
picture_recorder_
.
beginRecording
(
bounds
,
&
rtree_factory_
);
}
fml
::
RefPtr
<
Picture
>
PictureRecorder
::
endRecording
()
{
fml
::
RefPtr
<
Picture
>
PictureRecorder
::
endRecording
(
Dart_Handle
dart_picture
)
{
if
(
!
isRecording
())
return
nullptr
;
fml
::
RefPtr
<
Picture
>
picture
=
Picture
::
Create
(
UIDartState
::
CreateGPUObject
(
picture_recorder_
.
finishRecordingAsPicture
()));
fml
::
RefPtr
<
Picture
>
picture
=
Picture
::
Create
(
dart_picture
,
UIDartState
::
CreateGPUObject
(
picture_recorder_
.
finishRecordingAsPicture
()));
canvas_
->
Clear
();
canvas_
->
ClearDartWrapper
();
canvas_
=
nullptr
;
...
...
lib/ui/painting/picture_recorder.h
浏览文件 @
60b27fd5
...
...
@@ -26,7 +26,7 @@ class PictureRecorder : public RefCountedDartWrappable<PictureRecorder> {
~
PictureRecorder
()
override
;
SkCanvas
*
BeginRecording
(
SkRect
bounds
);
fml
::
RefPtr
<
Picture
>
endRecording
();
fml
::
RefPtr
<
Picture
>
endRecording
(
Dart_Handle
dart_picture
);
bool
isRecording
();
void
set_canvas
(
fml
::
RefPtr
<
Canvas
>
canvas
)
{
canvas_
=
std
::
move
(
canvas
);
}
...
...
third_party/tonic/dart_state.cc
浏览文件 @
60b27fd5
...
...
@@ -22,6 +22,7 @@ DartState::Scope::~Scope() {}
DartState
::
DartState
(
int
dirfd
,
std
::
function
<
void
(
Dart_Handle
)
>
message_epilogue
)
:
isolate_
(
nullptr
),
private_constructor_name_
(),
class_library_
(
new
DartClassLibrary
),
message_handler_
(
new
DartMessageHandler
()),
file_loader_
(
new
FileLoader
(
dirfd
)),
...
...
@@ -32,8 +33,16 @@ DartState::~DartState() {}
void
DartState
::
SetIsolate
(
Dart_Isolate
isolate
)
{
isolate_
=
isolate
;
if
(
!
isolate_
)
return
;
private_constructor_name_
.
Clear
();
Dart_EnterScope
();
private_constructor_name_
.
Set
(
this
,
Dart_NewPersistentHandle
(
Dart_NewStringFromCString
(
"_"
)));
Dart_ExitScope
();
DidSetIsolate
();
}
...
...
third_party/tonic/dart_state.h
浏览文件 @
60b27fd5
...
...
@@ -49,6 +49,12 @@ class DartState : public std::enable_shared_from_this<DartState> {
Dart_Isolate
isolate
()
{
return
isolate_
;
}
void
SetIsolate
(
Dart_Isolate
isolate
);
// TODO(https://github.com/flutter/flutter/issues/50997): Work around until we
// drop the need for Dart_New in tonic.
Dart_PersistentHandle
private_constructor_name
()
{
return
private_constructor_name_
.
Get
();
}
DartClassLibrary
&
class_library
()
{
return
*
class_library_
;
}
DartMessageHandler
&
message_handler
()
{
return
*
message_handler_
;
}
FileLoader
&
file_loader
()
{
return
*
file_loader_
;
}
...
...
@@ -70,6 +76,7 @@ class DartState : public std::enable_shared_from_this<DartState> {
private:
Dart_Isolate
isolate_
;
DartPersistentValue
private_constructor_name_
;
std
::
unique_ptr
<
DartClassLibrary
>
class_library_
;
std
::
unique_ptr
<
DartMessageHandler
>
message_handler_
;
std
::
unique_ptr
<
FileLoader
>
file_loader_
;
...
...
third_party/tonic/dart_wrappable.cc
浏览文件 @
60b27fd5
...
...
@@ -15,6 +15,7 @@ DartWrappable::~DartWrappable() {
TONIC_CHECK
(
!
dart_wrapper_
);
}
// TODO(dnfield): Delete this. https://github.com/flutter/flutter/issues/50997
Dart_Handle
DartWrappable
::
CreateDartWrapper
(
DartState
*
dart_state
)
{
TONIC_DCHECK
(
!
dart_wrapper_
);
const
DartWrapperInfo
&
info
=
GetDartWrapperInfo
();
...
...
@@ -22,13 +23,18 @@ Dart_Handle DartWrappable::CreateDartWrapper(DartState* dart_state) {
Dart_PersistentHandle
type
=
dart_state
->
class_library
().
GetClass
(
info
);
TONIC_DCHECK
(
!
LogIfError
(
type
));
intptr_t
native_fields
[
kNumberOfNativeFields
];
native_fields
[
kPeerIndex
]
=
reinterpret_cast
<
intptr_t
>
(
this
);
native_fields
[
kWrapperInfoIndex
]
=
reinterpret_cast
<
intptr_t
>
(
&
info
);
Dart_Handle
wrapper
=
Dart_AllocateWithNativeFields
(
type
,
kNumberOfNativeFields
,
native_fields
);
Dart_New
(
type
,
dart_state
->
private_constructor_name
(),
0
,
nullptr
);
TONIC_DCHECK
(
!
LogIfError
(
wrapper
));
Dart_Handle
res
=
Dart_SetNativeInstanceField
(
wrapper
,
kPeerIndex
,
reinterpret_cast
<
intptr_t
>
(
this
));
TONIC_DCHECK
(
!
LogIfError
(
res
));
res
=
Dart_SetNativeInstanceField
(
wrapper
,
kWrapperInfoIndex
,
reinterpret_cast
<
intptr_t
>
(
&
info
));
TONIC_DCHECK
(
!
LogIfError
(
res
));
this
->
RetainDartWrappableReference
();
// Balanced in FinalizeDartWrapper.
dart_wrapper_
=
Dart_NewWeakPersistentHandle
(
wrapper
,
this
,
GetAllocationSize
(),
&
FinalizeDartWrapper
);
...
...
@@ -36,6 +42,22 @@ Dart_Handle DartWrappable::CreateDartWrapper(DartState* dart_state) {
return
wrapper
;
}
void
DartWrappable
::
ClaimDartHandle
(
Dart_Handle
wrapper
)
{
TONIC_DCHECK
(
!
dart_wrapper_
);
TONIC_CHECK
(
!
LogIfError
(
wrapper
));
const
DartWrapperInfo
&
info
=
GetDartWrapperInfo
();
TONIC_CHECK
(
!
LogIfError
(
Dart_SetNativeInstanceField
(
wrapper
,
kPeerIndex
,
reinterpret_cast
<
intptr_t
>
(
this
))));
TONIC_CHECK
(
!
LogIfError
(
Dart_SetNativeInstanceField
(
wrapper
,
kWrapperInfoIndex
,
reinterpret_cast
<
intptr_t
>
(
&
info
))));
this
->
RetainDartWrappableReference
();
// Balanced in FinalizeDartWrapper.
dart_wrapper_
=
Dart_NewWeakPersistentHandle
(
wrapper
,
this
,
GetAllocationSize
(),
&
FinalizeDartWrapper
);
}
void
DartWrappable
::
AssociateWithDartWrapper
(
Dart_NativeArguments
args
)
{
TONIC_DCHECK
(
!
dart_wrapper_
);
...
...
third_party/tonic/dart_wrappable.h
浏览文件 @
60b27fd5
...
...
@@ -43,7 +43,10 @@ class DartWrappable {
virtual
void
ReleaseDartWrappableReference
()
const
=
0
;
// Use this method sparingly. It follows a slower path using Dart_New.
// Prefer constructing the object in Dart code and using ClaimDartHandle.
Dart_Handle
CreateDartWrapper
(
DartState
*
dart_state
);
void
ClaimDartHandle
(
Dart_Handle
wrappable
);
void
AssociateWithDartWrapper
(
Dart_NativeArguments
args
);
void
ClearDartWrapper
();
// Warning: Might delete this.
Dart_WeakPersistentHandle
dart_wrapper
()
const
{
return
dart_wrapper_
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录