[webkit-dev] RenderObject hasLayer method
Simon Fraser
simon.fraser at apple.com
Fri Jun 12 08:11:22 PDT 2009
On Jun 12, 2009, at 7:08 AM, Scott Thompson wrote:
> On Jun 12, 2009, at 12:17 AM, Meryl Silverburgh wrote:
>
>> Hi,
>>
>> Can someone please tell me what does the 'layer' in a RenderObject
>> means?
>> in other words, what does hasLayer method returns or purpose of
>> that method?
>
>
> I'm going to speculate here, but on the MacOS, there is a technology
> called "Core Animation". Core Animation allows a program to create
> rectangular graphical areas and easily animate them on the screen.
> These rectangular areas are called "Layers".
>
> Safari supports CSS transitions and effects which (again I
> speculate) make use of those layers to simplify their animations. I
> suspect, then, that a RenderObject, while animating, is associated
> with at least one CALayer and the "hasLayer" method would tell you
> whether or not that was, in fact, occurring.
>
> http://developer.apple.com/documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html
Indeed, that is all speculation :-)
The layer() method on RenderObject (actually, it has now moved to
RenderBoxModelObject if you look at TOT) returns a RenderLayer object.
RenderLayers are responsible for painting and hit testing some subset
of the render tree that shares a common coordinate space, to put it
simply. RenderLayers "hang off" of the tree of RenderObjects, and are
themselves parented in parallel with their associated RenderObjects.
However, we build a painting order tree of RenderObjects via their z-
order lists, which controls the back-to-front painting order between
RenderLayers.
When painting happens, we start painting with the root RenderLayer,
which paints tells any RLs behind it to paint, then paints its
enclosing RenderObjects, and then tells any RLs in front of it to
paint, and this continues down the RL tree. Hit testing all uses the z-
order tree to do front-to-back hit testing.
RenderLayers get created for elements with overflow, absolute or
relative position, transforms, masks, opacity < 1 and various other
reasons. RenderLayers are used on all platforms, and have no platform-
specific behavior.
Now we do have some support in the code for accelerated compositing,
and that does involve RenderLayers indirectly, but there is a much
more complex relationship between a RenderLayer and associated
hardware-based layers than Scott alludes to above (see the
RenderLayerCompositor/RenderLayerBacking/GraphicsLayer code for that
stuff).
Simon
More information about the webkit-dev
mailing list