Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
33ec74a4
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,发现更多精彩内容 >>
提交
33ec74a4
编写于
8月 14, 2015
作者:
A
Adam Barth
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #617 from abarth/separate_offset_and_size
Separate the notions of offset and size in compositing
上级
998d9a13
321d0693
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
44 addition
and
29 deletion
+44
-29
sky/packages/sky/lib/rendering/box.dart
sky/packages/sky/lib/rendering/box.dart
+3
-5
sky/packages/sky/lib/rendering/layer.dart
sky/packages/sky/lib/rendering/layer.dart
+21
-11
sky/packages/sky/lib/rendering/object.dart
sky/packages/sky/lib/rendering/object.dart
+20
-13
未找到文件。
sky/packages/sky/lib/rendering/box.dart
浏览文件 @
33ec74a4
...
@@ -1751,10 +1751,8 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox>
...
@@ -1751,10 +1751,8 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox>
try
{
try
{
final
double
devicePixelRatio
=
sky
.
view
.
devicePixelRatio
;
final
double
devicePixelRatio
=
sky
.
view
.
devicePixelRatio
;
Matrix4
transform
=
new
Matrix4
.
diagonal3Values
(
devicePixelRatio
,
devicePixelRatio
,
1.0
);
Matrix4
transform
=
new
Matrix4
.
diagonal3Values
(
devicePixelRatio
,
devicePixelRatio
,
1.0
);
Rect
bounds
=
Point
.
origin
&
size
;
_rootLayer
=
new
TransformLayer
(
transform:
transform
);
Rect
scaledBounds
=
Point
.
origin
&
(
size
*
devicePixelRatio
);
PaintingContext
context
=
new
PaintingContext
(
Offset
.
zero
,
size
);
_rootLayer
=
new
TransformLayer
(
bounds:
scaledBounds
,
transform:
transform
);
PaintingContext
context
=
new
PaintingContext
(
bounds
);
_rootLayer
.
add
(
context
.
layer
);
_rootLayer
.
add
(
context
.
layer
);
context
.
paintChild
(
child
,
Point
.
origin
);
context
.
paintChild
(
child
,
Point
.
origin
);
context
.
endRecording
();
context
.
endRecording
();
...
@@ -1767,7 +1765,7 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox>
...
@@ -1767,7 +1765,7 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox>
sky
.
tracing
.
begin
(
'RenderView.compositeFrame'
);
sky
.
tracing
.
begin
(
'RenderView.compositeFrame'
);
try
{
try
{
sky
.
PictureRecorder
recorder
=
new
sky
.
PictureRecorder
();
sky
.
PictureRecorder
recorder
=
new
sky
.
PictureRecorder
();
sky
.
Canvas
canvas
=
new
sky
.
Canvas
(
recorder
,
_rootLayer
.
bounds
);
sky
.
Canvas
canvas
=
new
sky
.
Canvas
(
recorder
,
Point
.
origin
&
(
size
*
sky
.
view
.
devicePixelRatio
)
);
_rootLayer
.
paint
(
canvas
);
_rootLayer
.
paint
(
canvas
);
sky
.
view
.
picture
=
recorder
.
endRecording
();
sky
.
view
.
picture
=
recorder
.
endRecording
();
}
finally
{
}
finally
{
...
...
sky/packages/sky/lib/rendering/layer.dart
浏览文件 @
33ec74a4
...
@@ -8,9 +8,9 @@ import 'dart:sky' show Point, Offset, Size, Rect, Color, Paint, Path;
...
@@ -8,9 +8,9 @@ import 'dart:sky' show Point, Offset, Size, Rect, Color, Paint, Path;
import
'package:vector_math/vector_math.dart'
;
import
'package:vector_math/vector_math.dart'
;
abstract
class
Layer
{
abstract
class
Layer
{
Layer
({
this
.
bounds
});
Layer
({
this
.
offset
:
Offset
.
zero
});
Rect
bounds
;
Offset
offset
;
// From parent, in parent's coordinate system.
ContainerLayer
_parent
;
ContainerLayer
_parent
;
ContainerLayer
get
parent
=>
_parent
;
ContainerLayer
get
parent
=>
_parent
;
...
@@ -30,18 +30,21 @@ abstract class Layer {
...
@@ -30,18 +30,21 @@ abstract class Layer {
}
}
class
PictureLayer
extends
Layer
{
class
PictureLayer
extends
Layer
{
PictureLayer
({
Rect
bounds
})
PictureLayer
({
Offset
offset:
Offset
.
zero
,
this
.
size
})
:
super
(
bounds:
bounds
);
:
super
(
offset:
offset
);
Size
size
;
sky
.
Picture
picture
;
sky
.
Picture
picture
;
void
paint
(
sky
.
Canvas
canvas
)
{
void
paint
(
sky
.
Canvas
canvas
)
{
canvas
.
translate
(
offset
.
dx
,
offset
.
dy
);
canvas
.
drawPicture
(
picture
);
canvas
.
drawPicture
(
picture
);
canvas
.
translate
(-
offset
.
dx
,
-
offset
.
dy
);
}
}
}
}
class
ContainerLayer
extends
Layer
{
class
ContainerLayer
extends
Layer
{
ContainerLayer
({
Rect
bounds
})
:
super
(
bounds:
bounds
);
ContainerLayer
({
Offset
offset:
Offset
.
zero
})
:
super
(
offset:
offset
);
void
paint
(
sky
.
Canvas
canvas
)
{
void
paint
(
sky
.
Canvas
canvas
)
{
Layer
child
=
firstChild
;
Layer
child
=
firstChild
;
...
@@ -133,12 +136,13 @@ class ContainerLayer extends Layer {
...
@@ -133,12 +136,13 @@ class ContainerLayer extends Layer {
}
}
class
TransformLayer
extends
ContainerLayer
{
class
TransformLayer
extends
ContainerLayer
{
TransformLayer
({
this
.
transform
,
Rect
bounds
})
:
super
(
bounds:
bounds
);
TransformLayer
({
Offset
offset:
Offset
.
zero
,
this
.
transform
})
:
super
(
offset:
offset
);
Matrix4
transform
;
Matrix4
transform
;
void
paint
(
sky
.
Canvas
canvas
)
{
void
paint
(
sky
.
Canvas
canvas
)
{
canvas
.
save
();
canvas
.
save
();
canvas
.
translate
(
offset
.
dx
,
offset
.
dy
);
canvas
.
concat
(
transform
.
storage
);
canvas
.
concat
(
transform
.
storage
);
super
.
paint
(
canvas
);
super
.
paint
(
canvas
);
canvas
.
restore
();
canvas
.
restore
();
...
@@ -146,11 +150,14 @@ class TransformLayer extends ContainerLayer {
...
@@ -146,11 +150,14 @@ class TransformLayer extends ContainerLayer {
}
}
class
ClipLayer
extends
ContainerLayer
{
class
ClipLayer
extends
ContainerLayer
{
ClipLayer
({
Rect
bounds
})
:
super
(
bounds:
bounds
);
ClipLayer
({
Offset
offset:
Offset
.
zero
,
this
.
size
})
:
super
(
offset:
offset
);
Size
size
;
void
paint
(
sky
.
Canvas
canvas
)
{
void
paint
(
sky
.
Canvas
canvas
)
{
canvas
.
save
();
canvas
.
save
();
canvas
.
clipRect
(
bounds
);
canvas
.
translate
(
offset
.
dx
,
offset
.
dy
);
canvas
.
clipRect
(
Point
.
origin
&
size
);
super
.
paint
(
canvas
);
super
.
paint
(
canvas
);
canvas
.
restore
();
canvas
.
restore
();
}
}
...
@@ -158,11 +165,13 @@ class ClipLayer extends ContainerLayer {
...
@@ -158,11 +165,13 @@ class ClipLayer extends ContainerLayer {
class
ColorFilterLayer
extends
ContainerLayer
{
class
ColorFilterLayer
extends
ContainerLayer
{
ColorFilterLayer
({
ColorFilterLayer
({
Rect
bounds
,
Offset
offset:
Offset
.
zero
,
this
.
size
,
this
.
color
,
this
.
color
,
this
.
transferMode
this
.
transferMode
})
:
super
(
bounds:
bounds
);
})
:
super
(
offset:
offset
);
Size
size
;
Color
color
;
Color
color
;
sky
.
TransferMode
transferMode
;
sky
.
TransferMode
transferMode
;
...
@@ -171,7 +180,8 @@ class ColorFilterLayer extends ContainerLayer {
...
@@ -171,7 +180,8 @@ class ColorFilterLayer extends ContainerLayer {
..
color
=
color
..
color
=
color
..
setTransferMode
(
transferMode
);
..
setTransferMode
(
transferMode
);
canvas
.
saveLayer
(
bounds
,
paint
);
canvas
.
saveLayer
(
offset
&
size
,
paint
);
canvas
.
translate
(
offset
.
dx
,
offset
.
dy
);
super
.
paint
(
canvas
);
super
.
paint
(
canvas
);
canvas
.
restore
();
canvas
.
restore
();
}
}
...
...
sky/packages/sky/lib/rendering/object.dart
浏览文件 @
33ec74a4
...
@@ -40,19 +40,19 @@ class PaintingContext {
...
@@ -40,19 +40,19 @@ class PaintingContext {
sky
.
PictureRecorder
_recorder
;
sky
.
PictureRecorder
_recorder
;
PaintingContext
(
Rect
bounds
)
{
PaintingContext
(
Offset
offest
,
Size
size
)
{
_startRecording
(
bounds
);
_startRecording
(
offest
,
size
);
}
}
PaintingContext
.
forTesting
(
this
.
canvas
);
PaintingContext
.
forTesting
(
this
.
canvas
);
void
_startRecording
(
Rect
bounds
)
{
void
_startRecording
(
Offset
offset
,
Size
size
)
{
assert
(
_layer
==
null
);
assert
(
_layer
==
null
);
assert
(
_recorder
==
null
);
assert
(
_recorder
==
null
);
assert
(
canvas
==
null
);
assert
(
canvas
==
null
);
_layer
=
new
PictureLayer
(
bounds:
bounds
);
_layer
=
new
PictureLayer
(
offset:
offset
,
size:
size
);
_recorder
=
new
sky
.
PictureRecorder
();
_recorder
=
new
sky
.
PictureRecorder
();
canvas
=
new
PaintingCanvas
(
_recorder
,
bounds
);
canvas
=
new
PaintingCanvas
(
_recorder
,
Point
.
origin
&
size
);
}
}
void
endRecording
()
{
void
endRecording
()
{
...
@@ -70,18 +70,23 @@ class PaintingContext {
...
@@ -70,18 +70,23 @@ class PaintingContext {
if
(!
child
.
requiresCompositing
)
if
(!
child
.
requiresCompositing
)
return
child
.
_paintWithContext
(
this
,
offset
);
return
child
.
_paintWithContext
(
this
,
offset
);
_compositChild
(
child
,
offset
,
layer
.
parent
,
layer
.
nextSibling
);
}
final
Layer
originalLayer
=
layer
;
void
_compositChild
(
RenderObject
child
,
Offset
offset
,
ContainerLayer
parentLayer
,
Layer
nextSibling
)
{
final
PictureLayer
originalLayer
=
_layer
;
endRecording
();
endRecording
();
Rect
bounds
=
child
.
paintBounds
.
shift
(
offset
);
Rect
childBounds
=
child
.
paintBounds
;
PaintingContext
context
=
new
PaintingContext
(
bounds
);
Offset
childOffset
=
childBounds
.
topLeft
.
toOffset
();
originalLayer
.
parent
.
add
(
context
.
layer
,
before:
originalLayer
.
nextSibling
);
PaintingContext
context
=
new
PaintingContext
(
offset
+
childOffset
,
childBounds
.
size
);
child
.
_paintWithContext
(
context
,
Offset
.
zero
);
parentLayer
.
add
(
context
.
layer
,
before:
nextSibling
);
context
.
endRecording
();
child
.
_layer
=
context
.
layer
;
child
.
_paintWithContext
(
context
,
-
childOffset
);
_startRecording
(
originalLayer
.
bounds
);
_startRecording
(
originalLayer
.
offset
,
originalLayer
.
size
);
originalLayer
.
parent
.
add
(
layer
,
before:
context
.
layer
.
nextSibling
);
originalLayer
.
parent
.
add
(
layer
,
before:
context
.
layer
.
nextSibling
);
context
.
endRecording
();
}
}
}
}
...
@@ -411,7 +416,9 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
...
@@ -411,7 +416,9 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
assert
(!
_needsLayout
);
assert
(!
_needsLayout
);
assert
(
requiresCompositing
);
assert
(
requiresCompositing
);
assert
(
_layer
!=
null
);
assert
(
_layer
!=
null
);
PaintingContext
context
=
new
PaintingContext
(
paintBounds
);
// TODO(abarth): Using _layer.offset isn't correct if the topLeft of our
// paint bounds has changed since our last repaint.
PaintingContext
context
=
new
PaintingContext
(
_layer
.
offset
,
paintBounds
.
size
);
_layer
.
parent
.
add
(
context
.
layer
,
before:
_layer
);
_layer
.
parent
.
add
(
context
.
layer
,
before:
_layer
);
_layer
.
detach
();
_layer
.
detach
();
_layer
=
context
.
_layer
;
_layer
=
context
.
_layer
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录