FrameView::layout干了什么

FrameView::performLayout

-》如果该FrameView对应的是Documentmainframe, 那么就取出其RenderView,并调用RenderView::layout(),如果不是mainframe, 那么就取出subtree root, 我理解应该是renderobject tree中某个子树layout,我们不可能每次都layout整棵树。

RenderViewRenderObject子类,他是树根,他有layout的逻辑:

->RenderView::layout()

通过SubtreeLayoutScope将需要layoutchildRenderObject标记起来。

-voidRenderView::layoutContent

-RenderBlockFlow::layoutblockflow就是css中的块flow的意思

->void RenderBlock::layout()

->void RenderBlockFlow::layoutBlock(bool relayoutChildren)

->RenderBlockFlow::layoutBlockFlow

->RenderBlockFlow::layoutInlineChildren, 如果本blockinlineflow

RenderBlockFlow::layoutBlockChildren如果本blockblockflow

据说一个blockflow中的所有chiildern,要么都是inlineflow的要么都是blockflow的,如果有不符合此规定的,会自动加入一些wrappernode,转换成正确的。

会遍历调用各个子RenderObjectlayoutIfNeeded()。如果有必要还会调用:

RenderBlock::layoutPositionedObjects,其实也是对一些RenderObject执行layoutIfNeeded.



那么具体的layout究竟干什么事情?找一个具体的RendreObjectlayout看看。

RenderImagelayoutIfNeeded实现看出来,主要是更新本对象的位置,坐标,尺寸。以及受到位置影响的layertransformation.

layout之前,renderteeobject都没有自己的位置和尺寸。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值