On May 27, 2009, at 8:21 PM, Roland Steiner wrote:

Hi all,

As I am currently hacking on implementing ruby for WebKit, I came across 2 questions where I couldn't find a good answer in the code, and thus would like to ask people more knowledgable than me:

Question #1: CSSStyleSelector::adjustRenderStyle (css/ CSSStyleSelector.cpp) changes the effectiveDisplay value of a node. Amongst other things:

// Mutate the display to BLOCK or TABLE for certain cases, e.g., if someone attempts to // position or float an inline, compact, or run-in. Cache the original display, since it // may be needed for positioned elements that have to compute their static normal flow // positions. We also force inline-level roots to be block- level.

I.e., basically, for positioned and floating elements it changes INLINE_TABLE -> TABLE, INLINE_BOX -> BOX, everything else -> BLOCK. Now, a ruby is analogous to an inline block, or inline table. However, there is no analogous block-level object for ruby. Therefore I wondered whether it wouldn't be ok (or even better, read: less error prone) to generally just wrap such objects into an anonymous block instead of changing the display value (with an exception for positioned/floated table parts that are handled after that point in the code).


My own expectation is that if you float or position a ruby it would just stop being a ruby and turn into a normal block. Maybe others disagree though.

Question #2: Is there code that would expect that the relative order of objects in the render tree follows the relative order of the corresponding nodes in the DOM tree (i.e., if DOM-node-B is after DOM-node-A then render-node-B should also be after render-node-A, where "after" means in the same order encountered when doing a depth- first search). Or am I worrying too much and I can order the nodes in the render tree without regard for the DOM tree?


You cannot order nodes in the render tree without regard for the DOM tree. There is an assumption of document ordering in the RenderObject lists. Check out how newly created renderers from the DOM get inserted passing in previous renderers for example.

dave

_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to