Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_34031325
engine
提交
e51642e4
E
engine
项目概览
qq_34031325
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
未验证
提交
e51642e4
编写于
7月 17, 2020
作者:
Y
Yegor
提交者:
GitHub
7月 17, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
JS-interop clean-up (#19850)
上级
83c45b29
变更
20
展开全部
隐藏空白更改
内联
并排
Showing
20 changed file
with
354 addition
and
736 deletion
+354
-736
lib/web_ui/lib/src/engine/compositor/canvas.dart
lib/web_ui/lib/src/engine/compositor/canvas.dart
+4
-4
lib/web_ui/lib/src/engine/compositor/canvaskit_api.dart
lib/web_ui/lib/src/engine/compositor/canvaskit_api.dart
+165
-244
lib/web_ui/lib/src/engine/compositor/color_filter.dart
lib/web_ui/lib/src/engine/compositor/color_filter.dart
+4
-7
lib/web_ui/lib/src/engine/compositor/fonts.dart
lib/web_ui/lib/src/engine/compositor/fonts.dart
+4
-5
lib/web_ui/lib/src/engine/compositor/image.dart
lib/web_ui/lib/src/engine/compositor/image.dart
+1
-2
lib/web_ui/lib/src/engine/compositor/image_filter.dart
lib/web_ui/lib/src/engine/compositor/image_filter.dart
+2
-5
lib/web_ui/lib/src/engine/compositor/initialization.dart
lib/web_ui/lib/src/engine/compositor/initialization.dart
+10
-20
lib/web_ui/lib/src/engine/compositor/mask_filter.dart
lib/web_ui/lib/src/engine/compositor/mask_filter.dart
+1
-4
lib/web_ui/lib/src/engine/compositor/painting.dart
lib/web_ui/lib/src/engine/compositor/painting.dart
+0
-3
lib/web_ui/lib/src/engine/compositor/path.dart
lib/web_ui/lib/src/engine/compositor/path.dart
+6
-7
lib/web_ui/lib/src/engine/compositor/picture.dart
lib/web_ui/lib/src/engine/compositor/picture.dart
+0
-3
lib/web_ui/lib/src/engine/compositor/skia_object_cache.dart
lib/web_ui/lib/src/engine/compositor/skia_object_cache.dart
+0
-4
lib/web_ui/lib/src/engine/compositor/surface.dart
lib/web_ui/lib/src/engine/compositor/surface.dart
+27
-33
lib/web_ui/lib/src/engine/compositor/text.dart
lib/web_ui/lib/src/engine/compositor/text.dart
+7
-10
lib/web_ui/lib/src/engine/compositor/util.dart
lib/web_ui/lib/src/engine/compositor/util.dart
+1
-255
lib/web_ui/lib/src/engine/compositor/vertices.dart
lib/web_ui/lib/src/engine/compositor/vertices.dart
+2
-2
lib/web_ui/lib/src/engine/shader.dart
lib/web_ui/lib/src/engine/shader.dart
+3
-3
lib/web_ui/lib/src/ui/initialization.dart
lib/web_ui/lib/src/ui/initialization.dart
+1
-1
lib/web_ui/test/canvaskit/canvaskit_api_test.dart
lib/web_ui/test/canvaskit/canvaskit_api_test.dart
+114
-115
lib/web_ui/test/canvaskit/skia_objects_cache_test.dart
lib/web_ui/test/canvaskit/skia_objects_cache_test.dart
+2
-9
未找到文件。
lib/web_ui/lib/src/engine/compositor/canvas.dart
浏览文件 @
e51642e4
...
...
@@ -16,7 +16,7 @@ class CkCanvas {
skCanvas
.
clear
(
toSharedSkColor1
(
color
));
}
static
final
SkClipOp
_clipOpIntersect
=
canvasKit
Js
.
ClipOp
.
Intersect
;
static
final
SkClipOp
_clipOpIntersect
=
canvasKit
.
ClipOp
.
Intersect
;
void
clipPath
(
ui
.
Path
path
,
bool
doAntiAlias
)
{
final
CkPath
ckPath
=
path
as
CkPath
;
...
...
@@ -158,7 +158,7 @@ class CkCanvas {
void
drawParagraph
(
CkParagraph
paragraph
,
ui
.
Offset
offset
)
{
skCanvas
.
drawParagraph
(
_jsObjectWrapper
.
unwrapSkParagraph
(
paragraph
.
legacySkiaObject
)
,
paragraph
.
skiaObject
,
offset
.
dx
,
offset
.
dy
,
);
...
...
@@ -232,12 +232,12 @@ class CkCanvas {
}
void
saveLayerWithoutBounds
(
CkPaint
paint
)
{
final
SkCanvasSaveLayerWithoutBoundsOver
ride
override
=
_jsObjectWrapper
.
castToSkCanvasSaveLayerWithoutBoundsOverride
(
skCanvas
)
;
final
SkCanvasSaveLayerWithoutBoundsOver
load
override
=
skCanvas
as
SkCanvasSaveLayerWithoutBoundsOverload
;
override
.
saveLayer
(
paint
.
skiaObject
);
}
void
saveLayerWithFilter
(
ui
.
Rect
bounds
,
ui
.
ImageFilter
filter
)
{
final
SkCanvasSaveLayerWithFilterOver
ride
override
=
_jsObjectWrapper
.
castToSkCanvasSaveLayerWithFilterOverride
(
skCanvas
)
;
final
SkCanvasSaveLayerWithFilterOver
load
override
=
skCanvas
as
SkCanvasSaveLayerWithFilterOverload
;
final
CkImageFilter
skImageFilter
=
filter
as
CkImageFilter
;
return
override
.
saveLayer
(
null
,
...
...
lib/web_ui/lib/src/engine/compositor/canvaskit_api.dart
浏览文件 @
e51642e4
...
...
@@ -8,162 +8,15 @@
/// the API behind these bindings in the Skia source code.
part of
engine
;
final
js
.
JsObject
_jsWindow
=
js
.
JsObject
.
fromBrowserObject
(
html
.
window
);
/// Entrypoint into the CanvasKit API.
late
CanvasKit
canvasKit
;
/// This and [_jsObjectWrapper] below are used to convert `@JS`-backed
/// objects to [js.JsObject]s. To do that we use `@JS` to pass the object
/// to JavaScript (see [JsObjectWrapper]), then use this variable (which
/// uses `dart:js`) to read the value back, causing it to be wrapped in
/// [js.JsObject].
/// Sets the [CanvasKit] object on `window` so we can use `@JS()` to bind to
/// static APIs.
///
// TODO(yjbanov): this is a temporary hack until we fully migrate to @JS.
final
js
.
JsObject
_jsObjectWrapperLegacy
=
js
.
JsObject
(
js
.
context
[
'Object'
]);
@JS
(
'window.flutter_js_object_wrapper'
)
external
JsObjectWrapper
get
_jsObjectWrapper
;
@visibleForTesting
JsObjectWrapper
get
debugJsObjectWrapper
=>
_jsObjectWrapper
;
void
initializeCanvasKitBindings
(
js
.
JsObject
canvasKit
)
{
// Because JsObject cannot be cast to a @JS type, we stash CanvasKit into
// a global and use the [canvasKitJs] getter to access it.
_jsWindow
[
'flutter_canvas_kit'
]
=
canvasKit
;
_jsWindow
[
'flutter_js_object_wrapper'
]
=
_jsObjectWrapperLegacy
;
}
@JS
()
class
JsObjectWrapper
{
external
set
skPaint
(
SkPaint
?
paint
);
external
set
skMaskFilter
(
SkMaskFilter
?
filter
);
external
set
skColorFilter
(
SkColorFilter
?
filter
);
external
set
skImageFilter
(
SkImageFilter
?
filter
);
external
set
skPath
(
SkPath
?
path
);
external
set
skImage
(
SkImage
?
image
);
external
SkCanvas
?
get
skCanvas
;
external
set
skCanvas
(
SkCanvas
?
canvas
);
external
SkPicture
?
get
skPicture
;
external
set
skPicture
(
SkPicture
?
picture
);
external
SkParagraph
?
get
skParagraph
;
external
set
skParagraph
(
SkParagraph
?
paragraph
);
}
/// Reads [JsObjectWrapper.skPath] as [SkPathArcToPointOverload].
@JS
(
'window.flutter_js_object_wrapper.skPath'
)
external
SkPathArcToPointOverload
get
_skPathArcToPointOverload
;
/// Reads [JsObjectWrapper.skCanvas] as [SkCanvasSaveLayerWithoutBoundsOverride].
@JS
(
'window.flutter_js_object_wrapper.skCanvas'
)
external
SkCanvasSaveLayerWithoutBoundsOverride
get
_skCanvasSaveLayerWithoutBoundsOverride
;
/// Reads [JsObjectWrapper.skCanvas] as [SkCanvasSaveLayerWithFilterOverride].
@JS
(
'window.flutter_js_object_wrapper.skCanvas'
)
external
SkCanvasSaveLayerWithFilterOverride
get
_skCanvasSaveLayerWithFilterOverride
;
/// Specific methods that wrap `@JS`-backed objects into a [js.JsObject]
/// for use with legacy `dart:js` API.
extension
JsObjectWrappers
on
JsObjectWrapper
{
js
.
JsObject
wrapSkPaint
(
SkPaint
paint
)
{
_jsObjectWrapper
.
skPaint
=
paint
;
js
.
JsObject
wrapped
=
_jsObjectWrapperLegacy
[
'skPaint'
];
_jsObjectWrapper
.
skPaint
=
null
;
return
wrapped
;
}
js
.
JsObject
wrapSkMaskFilter
(
SkMaskFilter
filter
)
{
_jsObjectWrapper
.
skMaskFilter
=
filter
;
js
.
JsObject
wrapped
=
_jsObjectWrapperLegacy
[
'skMaskFilter'
];
_jsObjectWrapper
.
skMaskFilter
=
null
;
return
wrapped
;
}
js
.
JsObject
wrapSkColorFilter
(
SkColorFilter
filter
)
{
_jsObjectWrapper
.
skColorFilter
=
filter
;
js
.
JsObject
wrapped
=
_jsObjectWrapperLegacy
[
'skColorFilter'
];
_jsObjectWrapper
.
skColorFilter
=
null
;
return
wrapped
;
}
js
.
JsObject
wrapSkImageFilter
(
SkImageFilter
filter
)
{
_jsObjectWrapper
.
skImageFilter
=
filter
;
js
.
JsObject
wrapped
=
_jsObjectWrapperLegacy
[
'skImageFilter'
];
_jsObjectWrapper
.
skImageFilter
=
null
;
return
wrapped
;
}
js
.
JsObject
wrapSkPath
(
SkPath
path
)
{
_jsObjectWrapper
.
skPath
=
path
;
js
.
JsObject
wrapped
=
_jsObjectWrapperLegacy
[
'skPath'
];
_jsObjectWrapper
.
skPath
=
null
;
return
wrapped
;
}
js
.
JsObject
wrapSkImage
(
SkImage
image
)
{
_jsObjectWrapper
.
skImage
=
image
;
js
.
JsObject
wrapped
=
_jsObjectWrapperLegacy
[
'skImage'
];
_jsObjectWrapper
.
skImage
=
null
;
return
wrapped
;
}
js
.
JsObject
wrapSkPicture
(
SkPicture
picture
)
{
_jsObjectWrapper
.
skPicture
=
picture
;
js
.
JsObject
wrapped
=
_jsObjectWrapperLegacy
[
'skPicture'
];
_jsObjectWrapper
.
skPicture
=
null
;
return
wrapped
;
}
SkPicture
unwrapSkPicture
(
js
.
JsObject
wrapped
)
{
_jsObjectWrapperLegacy
[
'skPicture'
]
=
wrapped
;
final
SkPicture
unwrapped
=
_jsObjectWrapper
.
skPicture
!;
_jsObjectWrapper
.
skPicture
=
null
;
return
unwrapped
;
}
js
.
JsObject
wrapSkParagraph
(
SkParagraph
paragraph
)
{
_jsObjectWrapper
.
skParagraph
=
paragraph
;
js
.
JsObject
wrapped
=
_jsObjectWrapperLegacy
[
'skParagraph'
];
_jsObjectWrapper
.
skParagraph
=
null
;
return
wrapped
;
}
SkParagraph
unwrapSkParagraph
(
js
.
JsObject
wrapped
)
{
_jsObjectWrapperLegacy
[
'skParagraph'
]
=
wrapped
;
final
SkParagraph
unwrapped
=
_jsObjectWrapper
.
skParagraph
!;
_jsObjectWrapper
.
skParagraph
=
null
;
return
unwrapped
;
}
SkCanvas
unwrapSkCanvas
(
js
.
JsObject
wrapped
)
{
_jsObjectWrapperLegacy
[
'skCanvas'
]
=
wrapped
;
final
SkCanvas
unwrapped
=
_jsObjectWrapper
.
skCanvas
!;
_jsObjectWrapper
.
skCanvas
=
null
;
return
unwrapped
;
}
SkPathArcToPointOverload
castToSkPathArcToPointOverload
(
SkPath
path
)
{
_jsObjectWrapper
.
skPath
=
path
;
final
SkPathArcToPointOverload
overload
=
_skPathArcToPointOverload
;
_jsObjectWrapper
.
skPath
=
null
;
return
overload
;
}
SkCanvasSaveLayerWithoutBoundsOverride
castToSkCanvasSaveLayerWithoutBoundsOverride
(
SkCanvas
canvas
)
{
_jsObjectWrapper
.
skCanvas
=
canvas
;
final
SkCanvasSaveLayerWithoutBoundsOverride
overload
=
_skCanvasSaveLayerWithoutBoundsOverride
;
_jsObjectWrapper
.
skCanvas
=
null
;
return
overload
;
}
SkCanvasSaveLayerWithFilterOverride
castToSkCanvasSaveLayerWithFilterOverride
(
SkCanvas
canvas
)
{
_jsObjectWrapper
.
skCanvas
=
canvas
;
final
SkCanvasSaveLayerWithFilterOverride
overload
=
_skCanvasSaveLayerWithFilterOverride
;
_jsObjectWrapper
.
skCanvas
=
null
;
return
overload
;
}
}
/// See, e.g. [SkPaint].
@JS
(
'window.flutter_canvas_kit'
)
external
CanvasKit
get
canvasKitJs
;
external
set
windowFlutterCanvasKit
(
CanvasKit
value
)
;
@JS
()
class
CanvasKit
{
...
...
@@ -213,6 +66,66 @@ class CanvasKit {
// End of text decoration enum.
external
SkFontMgrNamespace
get
SkFontMgr
;
external
int
GetWebGLContext
(
html
.
CanvasElement
canvas
,
SkWebGLContextOptions
options
);
external
SkGrContext
MakeGrContext
(
int
glContext
);
external
SkSurface
MakeOnScreenGLSurface
(
SkGrContext
grContext
,
double
width
,
double
height
,
SkColorSpace
colorSpace
,
);
external
SkSurface
MakeSWCanvasSurface
(
html
.
CanvasElement
canvas
);
external
void
setCurrentContext
(
int
glContext
);
}
@JS
(
'window.CanvasKitInit'
)
external
CanvasKitInitPromise
CanvasKitInit
(
CanvasKitInitOptions
options
);
typedef
LocateFileCallback
=
String
Function
(
String
file
,
String
unusedBase
);
@JS
()
@anonymous
class
CanvasKitInitOptions
{
external
factory
CanvasKitInitOptions
({
required
LocateFileCallback
locateFile
,
});
}
typedef
CanvasKitInitCallback
=
void
Function
(
CanvasKit
canvasKit
);
@JS
()
class
CanvasKitInitPromise
{
external
void
then
(
CanvasKitInitCallback
callback
);
}
@JS
(
'window.flutter_canvas_kit.SkColorSpace.SRGB'
)
external
SkColorSpace
get
SkColorSpaceSRGB
;
@JS
()
class
SkColorSpace
{}
@JS
()
@anonymous
class
SkWebGLContextOptions
{
external
factory
SkWebGLContextOptions
({
required
int
anitalias
,
});
}
@JS
()
class
SkSurface
{
external
SkCanvas
getCanvas
();
external
void
flush
();
external
int
width
();
external
int
height
();
external
void
dispose
();
}
@JS
()
class
SkGrContext
{
external
void
setResourceCacheLimitBytes
(
int
limit
);
external
void
releaseResourcesAndAbandonContext
();
external
void
delete
();
}
@JS
()
...
...
@@ -227,8 +140,8 @@ class SkFontSlant {
}
final
List
<
SkFontSlant
>
_skFontSlants
=
<
SkFontSlant
>[
canvasKit
Js
.
FontSlant
.
Upright
,
canvasKit
Js
.
FontSlant
.
Italic
,
canvasKit
.
FontSlant
.
Upright
,
canvasKit
.
FontSlant
.
Italic
,
];
SkFontSlant
toSkFontSlant
(
ui
.
FontStyle
style
)
{
...
...
@@ -254,15 +167,15 @@ class SkFontWeight {
}
final
List
<
SkFontWeight
>
_skFontWeights
=
<
SkFontWeight
>[
canvasKit
Js
.
FontWeight
.
Thin
,
canvasKit
Js
.
FontWeight
.
ExtraLight
,
canvasKit
Js
.
FontWeight
.
Light
,
canvasKit
Js
.
FontWeight
.
Normal
,
canvasKit
Js
.
FontWeight
.
Medium
,
canvasKit
Js
.
FontWeight
.
SemiBold
,
canvasKit
Js
.
FontWeight
.
Bold
,
canvasKit
Js
.
FontWeight
.
ExtraBold
,
canvasKit
Js
.
FontWeight
.
ExtraBlack
,
canvasKit
.
FontWeight
.
Thin
,
canvasKit
.
FontWeight
.
ExtraLight
,
canvasKit
.
FontWeight
.
Light
,
canvasKit
.
FontWeight
.
Normal
,
canvasKit
.
FontWeight
.
Medium
,
canvasKit
.
FontWeight
.
SemiBold
,
canvasKit
.
FontWeight
.
Bold
,
canvasKit
.
FontWeight
.
ExtraBold
,
canvasKit
.
FontWeight
.
ExtraBlack
,
];
SkFontWeight
toSkFontWeight
(
ui
.
FontWeight
weight
)
{
...
...
@@ -281,8 +194,8 @@ class SkAffinity {
}
final
List
<
SkAffinity
>
_skAffinitys
=
<
SkAffinity
>[
canvasKit
Js
.
Affinity
.
Upstream
,
canvasKit
Js
.
Affinity
.
Downstream
,
canvasKit
.
Affinity
.
Upstream
,
canvasKit
.
Affinity
.
Downstream
,
];
SkAffinity
toSkAffinity
(
ui
.
TextAffinity
affinity
)
{
...
...
@@ -303,8 +216,8 @@ class SkTextDirection {
// Flutter enumerates text directions as RTL, LTR, while CanvasKit
// enumerates them LTR, RTL.
final
List
<
SkTextDirection
>
_skTextDirections
=
<
SkTextDirection
>[
canvasKit
Js
.
TextDirection
.
RTL
,
canvasKit
Js
.
TextDirection
.
LTR
,
canvasKit
.
TextDirection
.
RTL
,
canvasKit
.
TextDirection
.
LTR
,
];
SkTextDirection
toSkTextDirection
(
ui
.
TextDirection
direction
)
{
...
...
@@ -327,12 +240,12 @@ class SkTextAlign {
}
final
List
<
SkTextAlign
>
_skTextAligns
=
<
SkTextAlign
>[
canvasKit
Js
.
TextAlign
.
Left
,
canvasKit
Js
.
TextAlign
.
Right
,
canvasKit
Js
.
TextAlign
.
Center
,
canvasKit
Js
.
TextAlign
.
Justify
,
canvasKit
Js
.
TextAlign
.
Start
,
canvasKit
Js
.
TextAlign
.
End
,
canvasKit
.
TextAlign
.
Left
,
canvasKit
.
TextAlign
.
Right
,
canvasKit
.
TextAlign
.
Center
,
canvasKit
.
TextAlign
.
Justify
,
canvasKit
.
TextAlign
.
Start
,
canvasKit
.
TextAlign
.
End
,
];
SkTextAlign
toSkTextAlign
(
ui
.
TextAlign
align
)
{
...
...
@@ -352,8 +265,8 @@ class SkRectHeightStyle {
}
final
List
<
SkRectHeightStyle
>
_skRectHeightStyles
=
<
SkRectHeightStyle
>[
canvasKit
Js
.
RectHeightStyle
.
Tight
,
canvasKit
Js
.
RectHeightStyle
.
Max
,
canvasKit
.
RectHeightStyle
.
Tight
,
canvasKit
.
RectHeightStyle
.
Max
,
];
SkRectHeightStyle
toSkRectHeightStyle
(
ui
.
BoxHeightStyle
style
)
{
...
...
@@ -373,8 +286,8 @@ class SkRectWidthStyle {
}
final
List
<
SkRectWidthStyle
>
_skRectWidthStyles
=
<
SkRectWidthStyle
>[
canvasKit
Js
.
RectWidthStyle
.
Tight
,
canvasKit
Js
.
RectWidthStyle
.
Max
,
canvasKit
.
RectWidthStyle
.
Tight
,
canvasKit
.
RectWidthStyle
.
Max
,
];
SkRectWidthStyle
toSkRectWidthStyle
(
ui
.
BoxWidthStyle
style
)
{
...
...
@@ -395,9 +308,9 @@ class SkVertexMode {
}
final
List
<
SkVertexMode
>
_skVertexModes
=
<
SkVertexMode
>[
canvasKit
Js
.
VertexMode
.
Triangles
,
canvasKit
Js
.
VertexMode
.
TrianglesStrip
,
canvasKit
Js
.
VertexMode
.
TriangleFan
,
canvasKit
.
VertexMode
.
Triangles
,
canvasKit
.
VertexMode
.
TrianglesStrip
,
canvasKit
.
VertexMode
.
TriangleFan
,
];
SkVertexMode
toSkVertexMode
(
ui
.
VertexMode
mode
)
{
...
...
@@ -417,9 +330,9 @@ class SkPointMode {
}
final
List
<
SkPointMode
>
_skPointModes
=
<
SkPointMode
>[
canvasKit
Js
.
PointMode
.
Points
,
canvasKit
Js
.
PointMode
.
Lines
,
canvasKit
Js
.
PointMode
.
Polygon
,
canvasKit
.
PointMode
.
Points
,
canvasKit
.
PointMode
.
Lines
,
canvasKit
.
PointMode
.
Polygon
,
];
SkPointMode
toSkPointMode
(
ui
.
PointMode
mode
)
{
...
...
@@ -438,8 +351,8 @@ class SkClipOp {
}
final
List
<
SkClipOp
>
_skClipOps
=
<
SkClipOp
>[
canvasKit
Js
.
ClipOp
.
Difference
,
canvasKit
Js
.
ClipOp
.
Intersect
,
canvasKit
.
ClipOp
.
Difference
,
canvasKit
.
ClipOp
.
Intersect
,
];
SkClipOp
toSkClipOp
(
ui
.
ClipOp
clipOp
)
{
...
...
@@ -458,8 +371,8 @@ class SkFillType {
}
final
List
<
SkFillType
>
_skFillTypes
=
<
SkFillType
>[
canvasKit
Js
.
FillType
.
Winding
,
canvasKit
Js
.
FillType
.
EvenOdd
,
canvasKit
.
FillType
.
Winding
,
canvasKit
.
FillType
.
EvenOdd
,
];
SkFillType
toSkFillType
(
ui
.
PathFillType
fillType
)
{
...
...
@@ -481,11 +394,11 @@ class SkPathOp {
}
final
List
<
SkPathOp
>
_skPathOps
=
<
SkPathOp
>[
canvasKit
Js
.
PathOp
.
Difference
,
canvasKit
Js
.
PathOp
.
Intersect
,
canvasKit
Js
.
PathOp
.
Union
,
canvasKit
Js
.
PathOp
.
XOR
,
canvasKit
Js
.
PathOp
.
ReverseDifference
,
canvasKit
.
PathOp
.
Difference
,
canvasKit
.
PathOp
.
Intersect
,
canvasKit
.
PathOp
.
Union
,
canvasKit
.
PathOp
.
XOR
,
canvasKit
.
PathOp
.
ReverseDifference
,
];
SkPathOp
toSkPathOp
(
ui
.
PathOperation
pathOp
)
{
...
...
@@ -506,10 +419,10 @@ class SkBlurStyle {
}
final
List
<
SkBlurStyle
>
_skBlurStyles
=
<
SkBlurStyle
>[
canvasKit
Js
.
BlurStyle
.
Normal
,
canvasKit
Js
.
BlurStyle
.
Solid
,
canvasKit
Js
.
BlurStyle
.
Outer
,
canvasKit
Js
.
BlurStyle
.
Inner
,
canvasKit
.
BlurStyle
.
Normal
,
canvasKit
.
BlurStyle
.
Solid
,
canvasKit
.
BlurStyle
.
Outer
,
canvasKit
.
BlurStyle
.
Inner
,
];
SkBlurStyle
toSkBlurStyle
(
ui
.
BlurStyle
style
)
{
...
...
@@ -529,9 +442,9 @@ class SkStrokeCap {
}
final
List
<
SkStrokeCap
>
_skStrokeCaps
=
<
SkStrokeCap
>[
canvasKit
Js
.
StrokeCap
.
Butt
,
canvasKit
Js
.
StrokeCap
.
Round
,
canvasKit
Js
.
StrokeCap
.
Square
,
canvasKit
.
StrokeCap
.
Butt
,
canvasKit
.
StrokeCap
.
Round
,
canvasKit
.
StrokeCap
.
Square
,
];
SkStrokeCap
toSkStrokeCap
(
ui
.
StrokeCap
strokeCap
)
{
...
...
@@ -550,8 +463,8 @@ class SkPaintStyle {
}
final
List
<
SkPaintStyle
>
_skPaintStyles
=
<
SkPaintStyle
>[
canvasKit
Js
.
PaintStyle
.
Fill
,
canvasKit
Js
.
PaintStyle
.
Stroke
,
canvasKit
.
PaintStyle
.
Fill
,
canvasKit
.
PaintStyle
.
Stroke
,
];
SkPaintStyle
toSkPaintStyle
(
ui
.
PaintingStyle
paintStyle
)
{
...
...
@@ -597,35 +510,35 @@ class SkBlendMode {
}
final
List
<
SkBlendMode
>
_skBlendModes
=
<
SkBlendMode
>[
canvasKit
Js
.
BlendMode
.
Clear
,
canvasKit
Js
.
BlendMode
.
Src
,
canvasKit
Js
.
BlendMode
.
Dst
,
canvasKit
Js
.
BlendMode
.
SrcOver
,
canvasKit
Js
.
BlendMode
.
DstOver
,
canvasKit
Js
.
BlendMode
.
SrcIn
,
canvasKit
Js
.
BlendMode
.
DstIn
,
canvasKit
Js
.
BlendMode
.
SrcOut
,
canvasKit
Js
.
BlendMode
.
DstOut
,
canvasKit
Js
.
BlendMode
.
SrcATop
,
canvasKit
Js
.
BlendMode
.
DstATop
,
canvasKit
Js
.
BlendMode
.
Xor
,
canvasKit
Js
.
BlendMode
.
Plus
,
canvasKit
Js
.
BlendMode
.
Modulate
,
canvasKit
Js
.
BlendMode
.
Screen
,
canvasKit
Js
.
BlendMode
.
Overlay
,
canvasKit
Js
.
BlendMode
.
Darken
,
canvasKit
Js
.
BlendMode
.
Lighten
,
canvasKit
Js
.
BlendMode
.
ColorDodge
,
canvasKit
Js
.
BlendMode
.
ColorBurn
,
canvasKit
Js
.
BlendMode
.
HardLight
,
canvasKit
Js
.
BlendMode
.
SoftLight
,
canvasKit
Js
.
BlendMode
.
Difference
,
canvasKit
Js
.
BlendMode
.
Exclusion
,
canvasKit
Js
.
BlendMode
.
Multiply
,
canvasKit
Js
.
BlendMode
.
Hue
,
canvasKit
Js
.
BlendMode
.
Saturation
,
canvasKit
Js
.
BlendMode
.
Color
,
canvasKit
Js
.
BlendMode
.
Luminosity
,
canvasKit
.
BlendMode
.
Clear
,
canvasKit
.
BlendMode
.
Src
,
canvasKit
.
BlendMode
.
Dst
,
canvasKit
.
BlendMode
.
SrcOver
,
canvasKit
.
BlendMode
.
DstOver
,
canvasKit
.
BlendMode
.
SrcIn
,
canvasKit
.
BlendMode
.
DstIn
,
canvasKit
.
BlendMode
.
SrcOut
,
canvasKit
.
BlendMode
.
DstOut
,
canvasKit
.
BlendMode
.
SrcATop
,
canvasKit
.
BlendMode
.
DstATop
,
canvasKit
.
BlendMode
.
Xor
,
canvasKit
.
BlendMode
.
Plus
,
canvasKit
.
BlendMode
.
Modulate
,
canvasKit
.
BlendMode
.
Screen
,
canvasKit
.
BlendMode
.
Overlay
,
canvasKit
.
BlendMode
.
Darken
,
canvasKit
.
BlendMode
.
Lighten
,
canvasKit
.
BlendMode
.
ColorDodge
,
canvasKit
.
BlendMode
.
ColorBurn
,
canvasKit
.
BlendMode
.
HardLight
,
canvasKit
.
BlendMode
.
SoftLight
,
canvasKit
.
BlendMode
.
Difference
,
canvasKit
.
BlendMode
.
Exclusion
,
canvasKit
.
BlendMode
.
Multiply
,
canvasKit
.
BlendMode
.
Hue
,
canvasKit
.
BlendMode
.
Saturation
,
canvasKit
.
BlendMode
.
Color
,
canvasKit
.
BlendMode
.
Luminosity
,
];
SkBlendMode
toSkBlendMode
(
ui
.
BlendMode
blendMode
)
{
...
...
@@ -645,9 +558,9 @@ class SkStrokeJoin {
}
final
List
<
SkStrokeJoin
>
_skStrokeJoins
=
<
SkStrokeJoin
>[
canvasKit
Js
.
StrokeJoin
.
Miter
,
canvasKit
Js
.
StrokeJoin
.
Round
,
canvasKit
Js
.
StrokeJoin
.
Bevel
,
canvasKit
.
StrokeJoin
.
Miter
,
canvasKit
.
StrokeJoin
.
Round
,
canvasKit
.
StrokeJoin
.
Bevel
,
];
SkStrokeJoin
toSkStrokeJoin
(
ui
.
StrokeJoin
strokeJoin
)
{
...
...
@@ -669,10 +582,10 @@ class SkFilterQuality {
}
final
List
<
SkFilterQuality
>
_skFilterQualitys
=
<
SkFilterQuality
>[
canvasKit
Js
.
FilterQuality
.
None
,
canvasKit
Js
.
FilterQuality
.
Low
,
canvasKit
Js
.
FilterQuality
.
Medium
,
canvasKit
Js
.
FilterQuality
.
High
,
canvasKit
.
FilterQuality
.
None
,
canvasKit
.
FilterQuality
.
Low
,
canvasKit
.
FilterQuality
.
Medium
,
canvasKit
.
FilterQuality
.
High
,
];
SkFilterQuality
toSkFilterQuality
(
ui
.
FilterQuality
filterQuality
)
{
...
...
@@ -693,9 +606,9 @@ class SkTileMode {
}
final
List
<
SkTileMode
>
_skTileModes
=
<
SkTileMode
>[
canvasKit
Js
.
TileMode
.
Clamp
,
canvasKit
Js
.
TileMode
.
Repeat
,
canvasKit
Js
.
TileMode
.
Mirror
,
canvasKit
.
TileMode
.
Clamp
,
canvasKit
.
TileMode
.
Repeat
,
canvasKit
.
TileMode
.
Mirror
,
];
SkTileMode
toSkTileMode
(
ui
.
TileMode
mode
)
{
...
...
@@ -829,6 +742,13 @@ class SkImageFilter {
external
void
delete
();
}
// Mappings from SkMatrix-index to input-index.
const
List
<
int
>
_skMatrixIndexToMatrix4Index
=
<
int
>[
0
,
4
,
12
,
// Row 1
1
,
5
,
13
,
// Row 2
3
,
7
,
15
,
// Row 3
];
/// Converts a 4x4 Flutter matrix (represented as a [Float32List]) to an
/// SkMatrix, which is a 3x3 transform matrix.
Float32List
toSkMatrixFromFloat32
(
Float32List
matrix4
)
{
...
...
@@ -1445,12 +1365,12 @@ class SkCanvas {
}
@JS
()
class
SkCanvasSaveLayerWithoutBoundsOver
ride
{
class
SkCanvasSaveLayerWithoutBoundsOver
load
{
external
void
saveLayer
(
SkPaint
paint
);
}
@JS
()
class
SkCanvasSaveLayerWithFilterOver
ride
{
class
SkCanvasSaveLayerWithFilterOver
load
{
external
void
saveLayer
(
SkPaint
?
paint
,
SkImageFilter
?
imageFilter
,
...
...
@@ -1555,7 +1475,8 @@ class SkFontStyle {
@JS
()
class
SkFontMgr
{
external
String
?
getFamilyName
(
int
fontId
);
external
void
delete
();
}
@JS
()
...
...
lib/web_ui/lib/src/engine/compositor/color_filter.dart
浏览文件 @
e51642e4
...
...
@@ -23,7 +23,7 @@ class CkColorFilter extends ResurrectableSkiaObject<SkColorFilter> {
SkColorFilter
skColorFilter
;
switch
(
_engineFilter
.
_type
)
{
case
EngineColorFilter
.
_TypeMode
:
skColorFilter
=
canvasKit
Js
.
SkColorFilter
.
MakeBlend
(
skColorFilter
=
canvasKit
.
SkColorFilter
.
MakeBlend
(
toSharedSkColor1
(
_engineFilter
.
_color
!),
toSkBlendMode
(
_engineFilter
.
_blendMode
!),
);
...
...
@@ -34,13 +34,13 @@ class CkColorFilter extends ResurrectableSkiaObject<SkColorFilter> {
for
(
int
i
=
0
;
i
<
20
;
i
++)
{
colorMatrix
[
i
]
=
matrix
[
i
];
}
skColorFilter
=
canvasKit
Js
.
SkColorFilter
.
MakeMatrix
(
colorMatrix
);
skColorFilter
=
canvasKit
.
SkColorFilter
.
MakeMatrix
(
colorMatrix
);
break
;
case
EngineColorFilter
.
_TypeLinearToSrgbGamma
:
skColorFilter
=
canvasKit
Js
.
SkColorFilter
.
MakeLinearToSRGBGamma
();
skColorFilter
=
canvasKit
.
SkColorFilter
.
MakeLinearToSRGBGamma
();
break
;
case
EngineColorFilter
.
_TypeSrgbToLinearGamma
:
skColorFilter
=
canvasKit
Js
.
SkColorFilter
.
MakeSRGBToLinearGamma
();
skColorFilter
=
canvasKit
.
SkColorFilter
.
MakeSRGBToLinearGamma
();
break
;
default
:
throw
StateError
(
...
...
@@ -49,9 +49,6 @@ class CkColorFilter extends ResurrectableSkiaObject<SkColorFilter> {
return
skColorFilter
;
}
@override
js
.
JsObject
get
legacySkiaObject
=>
_jsObjectWrapper
.
wrapSkColorFilter
(
skiaObject
);
@override
SkColorFilter
createDefault
()
{
return
_createSkiaObjectFromFilter
();
...
...
lib/web_ui/lib/src/engine/compositor/fonts.dart
浏览文件 @
e51642e4
...
...
@@ -41,7 +41,7 @@ class SkiaFontCollection {
final
List
<
Uint8List
>
fontBuffers
=
_registeredFonts
.
map
<
Uint8List
>((
f
)
=>
f
!.
bytes
).
toList
();
skFontMgr
=
canvasKit
Js
.
SkFontMgr
.
FromData
(
fontBuffers
);
skFontMgr
=
canvasKit
.
SkFontMgr
.
FromData
(
fontBuffers
);
}
/// Loads all of the unloaded fonts in [_unloadedFonts] and adds them
...
...
@@ -164,10 +164,9 @@ class SkiaFontCollection {
}
String
?
_readActualFamilyName
(
Uint8List
bytes
)
{
final
js
.
JsObject
tmpFontMgr
=
canvasKit
[
'SkFontMgr'
].
callMethod
(
'FromData'
,
<
Uint8List
>[
bytes
]);
String
?
actualFamily
=
tmpFontMgr
.
callMethod
(
'getFamilyName'
,
<
int
>[
0
]);
tmpFontMgr
.
callMethod
(
'delete'
);
final
SkFontMgr
tmpFontMgr
=
canvasKit
.
SkFontMgr
.
FromData
([
bytes
])!;
String
?
actualFamily
=
tmpFontMgr
.
getFamilyName
(
0
);
tmpFontMgr
.
delete
();
return
actualFamily
;
}
...
...
lib/web_ui/lib/src/engine/compositor/image.dart
浏览文件 @
e51642e4
...
...
@@ -8,7 +8,7 @@ part of engine;
/// Instantiates a [ui.Codec] backed by an `SkImage` from Skia.
void
skiaInstantiateImageCodec
(
Uint8List
list
,
Callback
<
ui
.
Codec
>
callback
,
[
int
?
width
,
int
?
height
,
int
?
format
,
int
?
rowBytes
])
{
final
SkAnimatedImage
skAnimatedImage
=
canvasKit
Js
.
MakeAnimatedImageFromEncoded
(
list
);
final
SkAnimatedImage
skAnimatedImage
=
canvasKit
.
MakeAnimatedImageFromEncoded
(
list
);
final
CkAnimatedImage
animatedImage
=
CkAnimatedImage
(
skAnimatedImage
);
final
CkAnimatedImageCodec
codec
=
CkAnimatedImageCodec
(
animatedImage
);
callback
(
codec
);
...
...
@@ -55,7 +55,6 @@ class CkAnimatedImage implements ui.Image {
/// A [ui.Image] backed by an `SkImage` from Skia.
class
CkImage
implements
ui
.
Image
{
final
SkImage
skImage
;
late
final
js
.
JsObject
legacyJsObject
=
_jsObjectWrapper
.
wrapSkImage
(
skImage
);
CkImage
(
this
.
skImage
);
...
...
lib/web_ui/lib/src/engine/compositor/image_filter.dart
浏览文件 @
e51642e4
...
...
@@ -26,14 +26,11 @@ class CkImageFilter extends ResurrectableSkiaObject<SkImageFilter> implements ui
rawSkiaObject
?.
delete
();
}
@override
js
.
JsObject
get
legacySkiaObject
=>
_jsObjectWrapper
.
wrapSkImageFilter
(
skiaObject
);
SkImageFilter
_initSkiaObject
()
{
return
canvasKit
Js
.
SkImageFilter
.
MakeBlur
(
return
canvasKit
.
SkImageFilter
.
MakeBlur
(
_sigmaX
,
_sigmaY
,
canvasKit
Js
.
TileMode
.
Clamp
,
canvasKit
.
TileMode
.
Clamp
,
null
,
);
}
...
...
lib/web_ui/lib/src/engine/compositor/initialization.dart
浏览文件 @
e51642e4
...
...
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
part of
engine
;
/// EXPERIMENTAL: Enable the Skia-based rendering backend.
...
...
@@ -20,26 +19,22 @@ const bool canvasKitForceCpuOnly =
/// NPM, update this URL to `https://unpkg.com/canvaskit-wasm@0.34.0/bin/`.
const
String
canvasKitBaseUrl
=
'https://unpkg.com/canvaskit-wasm@0.16.2/bin/'
;
/// Initialize
the Skia backend
.
/// Initialize
CanvasKit
.
///
/// This calls `CanvasKitInit` and assigns the global [canvasKit] object.
Future
<
void
>
initialize
Skia
()
{
Future
<
void
>
initialize
CanvasKit
()
{
final
Completer
<
void
>
canvasKitCompleter
=
Completer
<
void
>();
late
StreamSubscription
<
html
.
Event
>
loadSubscription
;
loadSubscription
=
domRenderer
.
canvasKitScript
!.
onLoad
.
listen
((
_
)
{
loadSubscription
.
cancel
();
final
js
.
JsObject
canvasKitInitArgs
=
js
.
JsObject
.
jsify
(<
String
,
dynamic
>{
'locateFile'
:
(
String
file
,
String
unusedBase
)
=>
canvasKitBaseUrl
+
file
,
});
final
js
.
JsObject
canvasKitInitPromise
=
js
.
JsObject
(
js
.
context
[
'CanvasKitInit'
],
<
dynamic
>[
canvasKitInitArgs
]);
canvasKitInitPromise
.
callMethod
(
'then'
,
<
dynamic
>[
(
js
.
JsObject
ck
)
{
canvasKit
=
ck
;
initializeCanvasKitBindings
(
canvasKit
);
canvasKitCompleter
.
complete
();
},
]);
final
CanvasKitInitPromise
canvasKitInitPromise
=
CanvasKitInit
(
CanvasKitInitOptions
(
locateFile:
js
.
allowInterop
((
String
file
,
String
unusedBase
)
=>
canvasKitBaseUrl
+
file
),
));
canvasKitInitPromise
.
then
(
js
.
allowInterop
((
CanvasKit
ck
)
{
canvasKit
=
ck
;
windowFlutterCanvasKit
=
canvasKit
;
canvasKitCompleter
.
complete
();
}));
});
/// Add a Skia scene host.
...
...
@@ -48,11 +43,6 @@ Future<void> initializeSkia() {
return
canvasKitCompleter
.
future
;
}
/// The entrypoint into all CanvasKit functions and classes.
///
/// This is created by [initializeSkia].
late
js
.
JsObject
canvasKit
;
/// The Skia font collection.
SkiaFontCollection
get
skiaFontCollection
=>
_skiaFontCollection
!;
SkiaFontCollection
?
_skiaFontCollection
;
...
...
lib/web_ui/lib/src/engine/compositor/mask_filter.dart
浏览文件 @
e51642e4
...
...
@@ -20,16 +20,13 @@ class CkMaskFilter extends ResurrectableSkiaObject<SkMaskFilter> {
SkMaskFilter
resurrect
()
=>
_initSkiaObject
();
SkMaskFilter
_initSkiaObject
()
{
return
canvasKit
Js
.
MakeBlurMaskFilter
(
return
canvasKit
.
MakeBlurMaskFilter
(
toSkBlurStyle
(
_blurStyle
),
_sigma
,
true
,
);
}
@override
js
.
JsObject
get
legacySkiaObject
=>
_jsObjectWrapper
.
wrapSkMaskFilter
(
skiaObject
);
@override
void
delete
()
{
rawSkiaObject
?.
delete
();
...
...
lib/web_ui/lib/src/engine/compositor/painting.dart
浏览文件 @
e51642e4
...
...
@@ -233,7 +233,4 @@ class CkPaint extends ResurrectableSkiaObject<SkPaint> implements ui.Paint {
void
delete
()
{
rawSkiaObject
?.
delete
();
}
@override
js
.
JsObject
get
legacySkiaObject
=>
_jsObjectWrapper
.
wrapSkPaint
(
skiaObject
);
}
lib/web_ui/lib/src/engine/compositor/path.dart
浏览文件 @
e51642e4
...
...
@@ -55,10 +55,10 @@ class CkPath implements ui.Path {
void
addPath
(
ui
.
Path
path
,
ui
.
Offset
offset
,
{
Float64List
?
matrix4
})
{
List
<
double
>
skMatrix
;
if
(
matrix4
==
null
)
{
skMatrix
=
make
SkMatrixFromFloat32
(
skMatrix
=
to
SkMatrixFromFloat32
(
Matrix4
.
translationValues
(
offset
.
dx
,
offset
.
dy
,
0.0
).
storage
);
}
else
{
skMatrix
=
make
SkMatrixFromFloat64
(
matrix4
);
skMatrix
=
to
SkMatrixFromFloat64
(
matrix4
);
skMatrix
[
2
]
+=
offset
.
dx
;
skMatrix
[
5
]
+=
offset
.
dy
;
}
...
...
@@ -129,8 +129,7 @@ class CkPath implements ui.Path {
double
rotation
=
0.0
,
bool
largeArc
=
false
,
bool
clockwise
=
true
})
{
final
SkPathArcToPointOverload
overload
=
_jsObjectWrapper
.
castToSkPathArcToPointOverload
(
_skPath
);
overload
.
arcTo
(
(
_skPath
as
SkPathArcToPointOverload
).
arcTo
(
radius
.
x
,
radius
.
y
,
rotation
,
...
...
@@ -171,10 +170,10 @@ class CkPath implements ui.Path {
void
extendWithPath
(
ui
.
Path
path
,
ui
.
Offset
offset
,
{
Float64List
?
matrix4
})
{
List
<
double
>
skMatrix
;
if
(
matrix4
==
null
)
{
skMatrix
=
make
SkMatrixFromFloat32
(
skMatrix
=
to
SkMatrixFromFloat32
(
Matrix4
.
translationValues
(
offset
.
dx
,
offset
.
dy
,
0.0
).
storage
);
}
else
{
skMatrix
=
make
SkMatrixFromFloat64
(
matrix4
);
skMatrix
=
to
SkMatrixFromFloat64
(
matrix4
);
skMatrix
[
2
]
+=
offset
.
dx
;
skMatrix
[
5
]
+=
offset
.
dy
;
}
...
...
@@ -276,7 +275,7 @@ class CkPath implements ui.Path {
)
{
final
CkPath
path1
=
uiPath1
as
CkPath
;
final
CkPath
path2
=
uiPath2
as
CkPath
;
final
SkPath
newPath
=
canvasKit
Js
.
MakePathFromOp
(
final
SkPath
newPath
=
canvasKit
.
MakePathFromOp
(
path1
.
_skPath
,
path2
.
_skPath
,
toSkPathOp
(
operation
),
...
...
lib/web_ui/lib/src/engine/compositor/picture.dart
浏览文件 @
e51642e4
...
...
@@ -30,9 +30,6 @@ class CkPicture implements ui.Picture {
class
SkPictureSkiaObject
extends
OneShotSkiaObject
<
SkPicture
>
{
SkPictureSkiaObject
(
SkPicture
picture
)
:
super
(
picture
);
@override
js
.
JsObject
get
legacySkiaObject
=>
_jsObjectWrapper
.
wrapSkPicture
(
skiaObject
);
@override
void
delete
()
{
rawSkiaObject
?.
delete
();
...
...
lib/web_ui/lib/src/engine/compositor/skia_object_cache.dart
浏览文件 @
e51642e4
...
...
@@ -89,10 +89,6 @@ abstract class SkiaObject<T> {
/// The JavaScript object that's mapped onto a Skia C++ object in the WebAssembly heap.
T
get
skiaObject
;
/// The legacy view on the [skiaObject].
// TODO(yjbanov): remove this after completing JS-interop migration.
js
.
JsObject
?
get
legacySkiaObject
;
/// Deletes the associated C++ object from the WebAssembly heap.
void
delete
();
...
...
lib/web_ui/lib/src/engine/compositor/surface.dart
浏览文件 @
e51642e4
...
...
@@ -38,7 +38,7 @@ class Surface {
CkSurface
?
_surface
;
html
.
Element
?
htmlElement
;
js
.
JsObjec
t
?
_grContext
;
SkGrContex
t
?
_grContext
;
int
?
_skiaCacheBytes
;
/// Specify the GPU resource cache limits.
...
...
@@ -49,8 +49,7 @@ class Surface {
void
_syncCacheBytes
()
{
if
(
_skiaCacheBytes
!=
null
)
{
_grContext
?.
callMethod
(
'setResourceCacheLimitBytes'
,
<
dynamic
>[
_skiaCacheBytes
]);
_grContext
?.
setResourceCacheLimitBytes
(
_skiaCacheBytes
!);
}
}
...
...
@@ -67,7 +66,7 @@ class Surface {
final
CkSurface
surface
=
acquireRenderSurface
(
size
);
if
(
surface
.
context
!=
null
)
{
canvasKit
.
callMethod
(
'setCurrentContext'
,
<
int
?>[
surface
.
context
]
);
canvasKit
.
setCurrentContext
(
surface
.
context
!
);
}
SubmitCallback
submitCallback
=
(
SurfaceFrame
surfaceFrame
,
CkCanvas
canvas
)
{
...
...
@@ -127,19 +126,20 @@ class Surface {
return
_makeSoftwareCanvasSurface
(
htmlCanvas
);
}
else
{
// Try WebGL first.
final
int
glContext
=
canvasKit
.
callMethod
(
'GetWebGLContext'
,
<
dynamic
>[
final
int
glContext
=
canvasKit
.
GetWebGLContext
(
htmlCanvas
,
// Default to no anti-aliasing. Paint commands can be explicitly
// anti-aliased by setting their `Paint` object's `antialias` property.
js
.
JsObject
.
jsify
({
'antialias'
:
0
}),
]);
SkWebGLContextOptions
(
// Default to no anti-aliasing. Paint commands can be explicitly
// anti-aliased by setting their `Paint` object's `antialias` property.
anitalias:
0
,
),
);
if
(
glContext
==
0
)
{
return
_makeSoftwareCanvasSurface
(
htmlCanvas
);
}
_grContext
=
canvasKit
.
callMethod
(
'MakeGrContext'
,
<
dynamic
>[
glContext
]);
_grContext
=
canvasKit
.
MakeGrContext
(
glContext
);
if
(
_grContext
==
null
)
{
throw
CanvasKitError
(
'Failed to initialize CanvasKit. CanvasKit.MakeGrContext returned null.'
);
...
...
@@ -149,13 +149,12 @@ class Surface {
// CanvasKit's default.
_syncCacheBytes
();
js
.
JsObject
?
skSurface
=
canvasKit
.
callMethod
(
'MakeOnScreenGLSurface'
,
<
dynamic
>[
_grContext
,
SkSurface
?
skSurface
=
canvasKit
.
MakeOnScreenGLSurface
(
_grContext
!,
size
.
width
,
size
.
height
,
canvasKit
[
'SkColorSpace'
][
'SRGB'
]
,
]
);
SkColorSpaceSRGB
,
);
if
(
skSurface
==
null
)
{
return
_makeSoftwareCanvasSurface
(
htmlCanvas
);
...
...
@@ -173,9 +172,7 @@ class Surface {
_didWarnAboutWebGlInitializationFailure
=
true
;
}
return
CkSurface
(
canvasKit
.
callMethod
(
'MakeSWCanvasSurface'
,
<
dynamic
>[
htmlCanvas
,
]),
canvasKit
.
MakeSWCanvasSurface
(
htmlCanvas
),
null
,
null
,
);
...
...
@@ -183,7 +180,7 @@ class Surface {
bool
_presentSurface
()
{
if
(
_surface
!.
context
!=
null
)
{
canvasKit
.
callMethod
(
'setCurrentContext'
,
<
int
?>[
_surface
!.
context
]
);
canvasKit
.
setCurrentContext
(
_surface
!.
context
!
);
}
_surface
!.
flush
();
return
true
;
...
...
@@ -192,28 +189,25 @@ class Surface {
/// A Dart wrapper around Skia's CkSurface.
class
CkSurface
{
final
js
.
JsObject
_surface
;
final
js
.
JsObjec
t
?
_grContext
;
final
SkSurface
_surface
;
final
SkGrContex
t
?
_grContext
;
final
int
?
_glContext
;
CkSurface
(
this
.
_surface
,
this
.
_grContext
,
this
.
_glContext
);
CkCanvas
getCanvas
()
{
final
js
.
JsObject
skCanvas
=
_surface
.
callMethod
(
'getCanvas'
);
return
CkCanvas
(
_jsObjectWrapper
.
unwrapSkCanvas
(
skCanvas
),
);
return
CkCanvas
(
_surface
.
getCanvas
());
}
/// Flushes the graphics to be rendered on screen.
void
flush
()
{
_surface
.
callMethod
(
'flush'
);
_surface
.
flush
(
);
}
int
?
get
context
=>
_glContext
;
int
width
()
=>
_surface
.
callMethod
(
'width'
);
int
height
()
=>
_surface
.
callMethod
(
'height'
);
int
width
()
=>
_surface
.
width
(
);
int
height
()
=>
_surface
.
height
(
);
void
dispose
()
{
if
(
_isDisposed
)
{
...
...
@@ -221,14 +215,14 @@ class CkSurface {
}
// Only resources from the current context can be disposed.
if
(
_glContext
!=
null
)
{
canvasKit
.
callMethod
(
'setCurrentContext'
,
<
int
?>[
_glContext
]
);
canvasKit
.
setCurrentContext
(
_glContext
!
);
}
_surface
.
callMethod
(
'dispose'
);
_surface
.
dispose
(
);
// In CPU-only mode there's no graphics context.
if
(
_grContext
!=
null
)
{
_grContext
!.
callMethod
(
'releaseResourcesAndAbandonContext'
);
_grContext
!.
callMethod
(
'delete'
);
_grContext
!.
releaseResourcesAndAbandonContext
(
);
_grContext
!.
delete
(
);
}
_isDisposed
=
true
;
}
...
...
lib/web_ui/lib/src/engine/compositor/text.dart
浏览文件 @
e51642e4
...
...
@@ -107,7 +107,7 @@ class CkParagraphStyle implements ui.ParagraphStyle {
properties
.
textStyle
=
toSkTextStyleProperties
(
fontFamily
,
fontSize
,
fontWeight
,
fontStyle
);
return
canvasKit
Js
.
ParagraphStyle
(
properties
);
return
canvasKit
.
ParagraphStyle
(
properties
);
}
}
...
...
@@ -146,15 +146,15 @@ class CkTextStyle implements ui.TextStyle {
}
if
(
decoration
!=
null
)
{
int
decorationValue
=
canvasKit
Js
.
NoDecoration
;
int
decorationValue
=
canvasKit
.
NoDecoration
;
if
(
decoration
.
contains
(
ui
.
TextDecoration
.
underline
))
{
decorationValue
|=
canvasKit
Js
.
UnderlineDecoration
;
decorationValue
|=
canvasKit
.
UnderlineDecoration
;
}
if
(
decoration
.
contains
(
ui
.
TextDecoration
.
overline
))
{
decorationValue
|=
canvasKit
Js
.
OverlineDecoration
;
decorationValue
|=
canvasKit
.
OverlineDecoration
;
}
if
(
decoration
.
contains
(
ui
.
TextDecoration
.
lineThrough
))
{
decorationValue
|=
canvasKit
Js
.
LineThroughDecoration
;
decorationValue
|=
canvasKit
.
LineThroughDecoration
;
}
properties
.
decoration
=
decorationValue
;
}
...
...
@@ -201,7 +201,7 @@ class CkTextStyle implements ui.TextStyle {
// - locale
// - shadows
// - fontFeatures
return
CkTextStyle
.
_
(
canvasKit
Js
.
TextStyle
(
properties
));
return
CkTextStyle
.
_
(
canvasKit
.
TextStyle
(
properties
));
}
CkTextStyle
.
_
(
this
.
skTextStyle
);
...
...
@@ -280,9 +280,6 @@ class CkParagraph extends ResurrectableSkiaObject<SkParagraph> implements ui.Par
rawSkiaObject
?.
delete
();
}
@override
js
.
JsObject
get
legacySkiaObject
=>
_jsObjectWrapper
.
wrapSkParagraph
(
skiaObject
);
@override
bool
get
isResurrectionExpensive
=>
true
;
...
...
@@ -416,7 +413,7 @@ class CkParagraphBuilder implements ui.ParagraphBuilder {
CkParagraphBuilder
(
ui
.
ParagraphStyle
style
)
:
_commands
=
<
_ParagraphCommand
>[],
_style
=
style
as
CkParagraphStyle
,
_paragraphBuilder
=
canvasKit
Js
.
ParagraphBuilder
.
Make
(
_paragraphBuilder
=
canvasKit
.
ParagraphBuilder
.
Make
(
style
.
skParagraphStyle
,
skiaFontCollection
.
skFontMgr
,
);
...
...
lib/web_ui/lib/src/engine/compositor/util.dart
浏览文件 @
e51642e4
...
...
@@ -15,44 +15,6 @@ class CanvasKitError extends Error {
String
toString
()
=>
'CanvasKitError:
$message
'
;
}
js
.
JsObject
_mallocColorArray
(
)
{
return
canvasKit
.
callMethod
(
'Malloc'
,
<
dynamic
>[
js
.
context
[
'Float32Array'
],
4
]);
}
js
.
JsObject
?
sharedSkColor1
;
js
.
JsObject
?
sharedSkColor2
;
js
.
JsObject
?
sharedSkColor3
;
void
_setSharedColor
(
js
.
JsObject
sharedColor
,
ui
.
Color
color
)
{
Float32List
array
=
sharedColor
.
callMethod
(
'toTypedArray'
);
array
[
0
]
=
color
.
red
/
255.0
;
array
[
1
]
=
color
.
green
/
255.0
;
array
[
2
]
=
color
.
blue
/
255.0
;
array
[
3
]
=
color
.
alpha
/
255.0
;
}
void
setSharedSkColor1
(
ui
.
Color
color
)
{
if
(
sharedSkColor1
==
null
)
{
sharedSkColor1
=
_mallocColorArray
();
}
_setSharedColor
(
sharedSkColor1
!,
color
);
}
void
setSharedSkColor2
(
ui
.
Color
color
)
{
if
(
sharedSkColor2
==
null
)
{
sharedSkColor2
=
_mallocColorArray
();
}
_setSharedColor
(
sharedSkColor2
!,
color
);
}
void
setSharedSkColor3
(
ui
.
Color
color
)
{
if
(
sharedSkColor3
==
null
)
{
sharedSkColor3
=
_mallocColorArray
();
}
_setSharedColor
(
sharedSkColor3
!,
color
);
}
/// Creates a new color array.
Float32List
makeFreshSkColor
(
ui
.
Color
color
)
{
final
Float32List
result
=
Float32List
(
4
);
...
...
@@ -63,34 +25,6 @@ Float32List makeFreshSkColor(ui.Color color) {
return
result
;
}
js
.
JsObject
makeSkRect
(
ui
.
Rect
rect
)
{
return
js
.
JsObject
(
canvasKit
[
'LTRBRect'
],
<
double
>[
rect
.
left
,
rect
.
top
,
rect
.
right
,
rect
.
bottom
]);
}
js
.
JsObject
makeSkRRect
(
ui
.
RRect
rrect
)
{
return
js
.
JsObject
.
jsify
({
'rect'
:
makeSkRect
(
rrect
.
outerRect
),
'rx1'
:
rrect
.
tlRadiusX
,
'ry1'
:
rrect
.
tlRadiusY
,
'rx2'
:
rrect
.
trRadiusX
,
'ry2'
:
rrect
.
trRadiusY
,
'rx3'
:
rrect
.
brRadiusX
,
'ry3'
:
rrect
.
brRadiusY
,
'rx4'
:
rrect
.
blRadiusX
,
'ry4'
:
rrect
.
blRadiusY
,
});
}
ui
.
Rect
fromSkRect
(
js
.
JsObject
skRect
)
{
return
ui
.
Rect
.
fromLTRB
(
skRect
[
'fLeft'
],
skRect
[
'fTop'
],
skRect
[
'fRight'
],
skRect
[
'fBottom'
],
);
}
ui
.
TextPosition
fromPositionWithAffinity
(
SkTextPosition
positionWithAffinity
)
{
final
ui
.
TextAffinity
affinity
=
ui
.
TextAffinity
.
values
[
positionWithAffinity
.
affinity
.
value
];
return
ui
.
TextPosition
(
...
...
@@ -99,194 +33,6 @@ ui.TextPosition fromPositionWithAffinity(SkTextPosition positionWithAffinity) {
);
}
js
.
JsArray
<
double
>
makeSkPoint
(
ui
.
Offset
point
)
{
final
js
.
JsArray
<
double
>
skPoint
=
js
.
JsArray
<
double
>();
skPoint
.
length
=
2
;
skPoint
[
0
]
=
point
.
dx
;
skPoint
[
1
]
=
point
.
dy
;
return
skPoint
;
}
// TODO(hterkelsen): https://github.com/flutter/flutter/issues/58824
/// Creates a point list using a 2D JS array.
js
.
JsArray
<
js
.
JsArray
<
double
>>?
encodePointList
(
List
<
ui
.
Offset
>?
points
)
{
if
(
points
==
null
)
{
return
null
;
}
final
int
pointCount
=
points
.
length
;
final
js
.
JsArray
<
js
.
JsArray
<
double
>>
result
=
js
.
JsArray
<
js
.
JsArray
<
double
>>();
result
.
length
=
pointCount
;
for
(
int
i
=
0
;
i
<
pointCount
;
++
i
)
{
final
ui
.
Offset
point
=
points
[
i
];
assert
(
_offsetIsValid
(
point
));
final
js
.
JsArray
<
double
>
skPoint
=
js
.
JsArray
<
double
>();
skPoint
.
length
=
2
;
skPoint
[
0
]
=
point
.
dx
;
skPoint
[
1
]
=
point
.
dy
;
result
[
i
]
=
skPoint
;
}
return
result
;
}
// TODO(hterkelsen): https://github.com/flutter/flutter/issues/58824
/// Creates a point list using a 2D JS array.
List
<
List
<
double
>>?
encodeRawPointList
(
Float32List
?
points
)
{
if
(
points
==
null
)
{
return
null
;
}
assert
(
points
.
length
%
2
==
0
);
var
pointLength
=
points
.
length
~/
2
;
final
js
.
JsArray
<
js
.
JsArray
<
double
>>
result
=
js
.
JsArray
<
js
.
JsArray
<
double
>>();
result
.
length
=
pointLength
;
for
(
var
i
=
0
;
i
<
pointLength
;
i
++)
{
var
x
=
i
*
2
;
var
y
=
x
+
1
;
final
js
.
JsArray
<
double
>
skPoint
=
js
.
JsArray
<
double
>();
skPoint
.
length
=
2
;
skPoint
[
0
]
=
points
[
x
];
skPoint
[
1
]
=
points
[
y
];
result
[
i
]
=
skPoint
;
}
return
result
;
}
js
.
JsObject
?
makeSkPointMode
(
ui
.
PointMode
pointMode
)
{
switch
(
pointMode
)
{
case
ui
.
PointMode
.
points
:
return
canvasKit
[
'PointMode'
][
'Points'
];
case
ui
.
PointMode
.
lines
:
return
canvasKit
[
'PointMode'
][
'Lines'
];
case
ui
.
PointMode
.
polygon
:
return
canvasKit
[
'PointMode'
][
'Polygon'
];
default
:
throw
StateError
(
'Unrecognized point mode
$pointMode
'
);
}
}
js
.
JsObject
?
makeSkBlendMode
(
ui
.
BlendMode
?
blendMode
)
{
switch
(
blendMode
)
{
case
ui
.
BlendMode
.
clear
:
return
canvasKit
[
'BlendMode'
][
'Clear'
];
case
ui
.
BlendMode
.
src
:
return
canvasKit
[
'BlendMode'
][
'Src'
];
case
ui
.
BlendMode
.
dst
:
return
canvasKit
[
'BlendMode'
][
'Dst'
];
case
ui
.
BlendMode
.
srcOver
:
return
canvasKit
[
'BlendMode'
][
'SrcOver'
];
case
ui
.
BlendMode
.
dstOver
:
return
canvasKit
[
'BlendMode'
][
'DstOver'
];
case
ui
.
BlendMode
.
srcIn
:
return
canvasKit
[
'BlendMode'
][
'SrcIn'
];
case
ui
.
BlendMode
.
dstIn
:
return
canvasKit
[
'BlendMode'
][
'DstIn'
];
case
ui
.
BlendMode
.
srcOut
:
return
canvasKit
[
'BlendMode'
][
'SrcOut'
];
case
ui
.
BlendMode
.
dstOut
:
return
canvasKit
[
'BlendMode'
][
'DstOut'
];
case
ui
.
BlendMode
.
srcATop
:
return
canvasKit
[
'BlendMode'
][
'SrcATop'
];
case
ui
.
BlendMode
.
dstATop
:
return
canvasKit
[
'BlendMode'
][
'DstATop'
];
case
ui
.
BlendMode
.
xor
:
return
canvasKit
[
'BlendMode'
][
'Xor'
];
case
ui
.
BlendMode
.
plus
:
return
canvasKit
[
'BlendMode'
][
'Plus'
];
case
ui
.
BlendMode
.
modulate
:
return
canvasKit
[
'BlendMode'
][
'Modulate'
];
case
ui
.
BlendMode
.
screen
:
return
canvasKit
[
'BlendMode'
][
'Screen'
];
case
ui
.
BlendMode
.
overlay
:
return
canvasKit
[
'BlendMode'
][
'Overlay'
];
case
ui
.
BlendMode
.
darken
:
return
canvasKit
[
'BlendMode'
][
'Darken'
];
case
ui
.
BlendMode
.
lighten
:
return
canvasKit
[
'BlendMode'
][
'Lighten'
];
case
ui
.
BlendMode
.
colorDodge
:
return
canvasKit
[
'BlendMode'
][
'ColorDodge'
];
case
ui
.
BlendMode
.
colorBurn
:
return
canvasKit
[
'BlendMode'
][
'ColorBurn'
];
case
ui
.
BlendMode
.
hardLight
:
return
canvasKit
[
'BlendMode'
][
'HardLight'
];
case
ui
.
BlendMode
.
softLight
:
return
canvasKit
[
'BlendMode'
][
'SoftLight'
];
case
ui
.
BlendMode
.
difference
:
return
canvasKit
[
'BlendMode'
][
'Difference'
];
case
ui
.
BlendMode
.
exclusion
:
return
canvasKit
[
'BlendMode'
][
'Exclusion'
];
case
ui
.
BlendMode
.
multiply
:
return
canvasKit
[
'BlendMode'
][
'Multiply'
];
case
ui
.
BlendMode
.
hue
:
return
canvasKit
[
'BlendMode'
][
'Hue'
];
case
ui
.
BlendMode
.
saturation
:
return
canvasKit
[
'BlendMode'
][
'Saturation'
];
case
ui
.
BlendMode
.
color
:
return
canvasKit
[
'BlendMode'
][
'Color'
];
case
ui
.
BlendMode
.
luminosity
:
return
canvasKit
[
'BlendMode'
][
'Luminosity'
];
default
:
return
null
;
}
}
// Mappings from SkMatrix-index to input-index.
const
List
<
int
>
_skMatrixIndexToMatrix4Index
=
<
int
>[
0
,
4
,
12
,
// Row 1
1
,
5
,
13
,
// Row 2
3
,
7
,
15
,
// Row 3
];
/// Converts a 4x4 Flutter matrix (represented as a [Float32List]) to an
/// SkMatrix, which is a 3x3 transform matrix.
js
.
JsArray
<
double
>
makeSkMatrixFromFloat32
(
Float32List
?
matrix4
)
{
final
js
.
JsArray
<
double
>
skMatrix
=
js
.
JsArray
<
double
>();
skMatrix
.
length
=
9
;
for
(
int
i
=
0
;
i
<
9
;
++
i
)
{
final
int
matrix4Index
=
_skMatrixIndexToMatrix4Index
[
i
];
if
(
matrix4Index
<
matrix4
!.
length
)
skMatrix
[
i
]
=
matrix4
[
matrix4Index
];
else
skMatrix
[
i
]
=
0.0
;
}
return
skMatrix
;
}
js
.
JsArray
<
double
>
makeSkMatrixFromFloat64
(
Float64List
matrix4
)
{
final
js
.
JsArray
<
double
>
skMatrix
=
js
.
JsArray
<
double
>();
skMatrix
.
length
=
9
;
for
(
int
i
=
0
;
i
<
9
;
++
i
)
{
final
int
matrix4Index
=
_skMatrixIndexToMatrix4Index
[
i
];
if
(
matrix4Index
<
matrix4
.
length
)
skMatrix
[
i
]
=
matrix4
[
matrix4Index
];
else
skMatrix
[
i
]
=
0.0
;
}
return
skMatrix
;
}
/// Color stops used when the framework specifies `null`.
final
js
.
JsArray
<
double
>
_kDefaultColorStops
=
()
{
final
js
.
JsArray
<
double
>
jsColorStops
=
js
.
JsArray
<
double
>();
jsColorStops
.
length
=
2
;
jsColorStops
[
0
]
=
0
;
jsColorStops
[
1
]
=
1
;
return
jsColorStops
;
}();
/// Converts a list of color stops into a Skia-compatible JS array or color stops.
///
/// In Flutter `null` means two color stops `[0, 1]` that in Skia must be specified explicitly.
js
.
JsArray
<
double
>
makeSkiaColorStops
(
List
<
double
>?
colorStops
)
{
if
(
colorStops
==
null
)
{
return
_kDefaultColorStops
;
}
final
js
.
JsArray
<
double
>
jsColorStops
=
js
.
JsArray
<
double
>.
from
(
colorStops
);
jsColorStops
.
length
=
colorStops
.
length
;
return
jsColorStops
;
}
void
drawSkShadow
(
SkCanvas
skCanvas
,
CkPath
path
,
...
...
@@ -313,7 +59,7 @@ void drawSkShadow(
);
final
SkTonalColors
tonalColors
=
canvasKit
Js
.
computeTonalColors
(
inTonalColors
);
canvasKit
.
computeTonalColors
(
inTonalColors
);
skCanvas
.
drawShadow
(
path
.
_skPath
,
...
...
lib/web_ui/lib/src/engine/compositor/vertices.dart
浏览文件 @
e51642e4
...
...
@@ -27,7 +27,7 @@ class CkVertices implements ui.Vertices {
throw
ArgumentError
(
'"indices" values must be valid indices in the positions list.'
);
skVertices
=
canvasKit
Js
.
MakeSkVertices
(
skVertices
=
canvasKit
.
MakeSkVertices
(
toSkVertexMode
(
mode
),
toSkPoints2d
(
positions
),
textureCoordinates
!=
null
?
toSkPoints2d
(
textureCoordinates
)
:
null
,
...
...
@@ -55,7 +55,7 @@ class CkVertices implements ui.Vertices {
throw
ArgumentError
(
'"indices" values must be valid indices in the positions list.'
);
skVertices
=
canvasKit
Js
.
MakeSkVertices
(
skVertices
=
canvasKit
.
MakeSkVertices
(
toSkVertexMode
(
mode
),
rawPointsToSkPoints2d
(
positions
),
textureCoordinates
!=
null
?
rawPointsToSkPoints2d
(
textureCoordinates
)
:
null
,
...
...
lib/web_ui/lib/src/engine/shader.dart
浏览文件 @
e51642e4
...
...
@@ -158,7 +158,7 @@ class GradientLinear extends EngineGradient {
SkShader
createSkiaShader
()
{
assert
(
experimentalUseSkia
);
return
canvasKit
Js
.
SkShader
.
MakeLinearGradient
(
return
canvasKit
.
SkShader
.
MakeLinearGradient
(
toSkPoint
(
from
),
toSkPoint
(
to
),
toSkFloatColorList
(
colors
),
...
...
@@ -212,7 +212,7 @@ class GradientRadial extends EngineGradient {
SkShader
createSkiaShader
()
{
assert
(
experimentalUseSkia
);
return
canvasKit
Js
.
SkShader
.
MakeRadialGradient
(
return
canvasKit
.
SkShader
.
MakeRadialGradient
(
toSkPoint
(
center
),
radius
,
toSkFloatColorList
(
colors
),
...
...
@@ -246,7 +246,7 @@ class GradientConical extends EngineGradient {
@override
SkShader
createSkiaShader
()
{
assert
(
experimentalUseSkia
);
return
canvasKit
Js
.
SkShader
.
MakeTwoPointConicalGradient
(
return
canvasKit
.
SkShader
.
MakeTwoPointConicalGradient
(
toSkPoint
(
focal
),
focalRadius
,
toSkPoint
(
center
),
...
...
lib/web_ui/lib/src/ui/initialization.dart
浏览文件 @
e51642e4
...
...
@@ -31,7 +31,7 @@ Future<void> _initializePlatform({
// This needs to be after `webOnlyInitializeEngine` because that is where the
// canvaskit script is added to the page.
if
(
engine
.
experimentalUseSkia
)
{
await
engine
.
initialize
Skia
();
await
engine
.
initialize
CanvasKit
();
}
assetManager
??=
const
engine
.
AssetManager
();
...
...
lib/web_ui/test/canvaskit/canvaskit_api_test.dart
浏览文件 @
e51642e4
此差异已折叠。
点击以展开。
lib/web_ui/test/canvaskit/skia_objects_cache_test.dart
浏览文件 @
e51642e4
...
...
@@ -3,7 +3,6 @@
// found in the LICENSE file.
// @dart = 2.6
import
'dart:js'
;
import
'package:mockito/mockito.dart'
;
import
'package:test/test.dart'
;
...
...
@@ -45,7 +44,7 @@ void _tests() {
expect
(
testObject
.
deleteCount
,
0
);
// Check that the getter does not have side-effects
final
JsObject
skiaObject1
=
testObject
.
legacyS
kiaObject
;
final
SkPaint
skiaObject1
=
testObject
.
s
kiaObject
;
expect
(
skiaObject1
,
isNotNull
);
expect
(
SkiaObjects
.
resurrectableObjects
.
single
,
testObject
);
expect
(
testObject
.
createDefaultCount
,
1
);
...
...
@@ -61,7 +60,7 @@ void _tests() {
expect
(
testObject
.
deleteCount
,
1
);
// Trigger resurrect
final
JsObject
skiaObject2
=
testObject
.
legacyS
kiaObject
;
final
SkPaint
skiaObject2
=
testObject
.
s
kiaObject
;
expect
(
skiaObject2
,
isNotNull
);
expect
(
skiaObject2
,
isNot
(
same
(
skiaObject1
)));
expect
(
SkiaObjects
.
resurrectableObjects
.
single
,
testObject
);
...
...
@@ -146,9 +145,6 @@ class TestOneShotSkiaObject extends OneShotSkiaObject<SkPaint> {
TestOneShotSkiaObject
()
:
super
(
SkPaint
());
@override
JsObject
get
legacySkiaObject
=>
debugJsObjectWrapper
.
wrapSkPaint
(
skiaObject
);
@override
void
delete
()
{
rawSkiaObject
?.
delete
();
...
...
@@ -183,9 +179,6 @@ class TestSkiaObject extends ResurrectableSkiaObject<SkPaint> {
deleteCount
++;
}
@override
JsObject
get
legacySkiaObject
=>
debugJsObjectWrapper
.
wrapSkPaint
(
skiaObject
);
@override
bool
get
isResurrectionExpensive
=>
isExpensive
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录