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? Thank you.
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_guid... Scott
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_guid...
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
participants (3)
-
Meryl Silverburgh
-
Scott Thompson
-
Simon Fraser