On Oct 6, 2009, at 8:49 PM, Alex Milowski wrote:

What exactly happens during a zoom (command +/-) ?

Depends on the flavor of zoom (“full-page” zoom vs. text-only zoom), but in both cases, a full style recalculation for the document is forced.

I have code that works well but layout doesn't seem to happen after
a zoom in/out operation.  If I then resize the window, that forces a
layout for the zoomed size and things adjust themselves
appropriately (because layout() eventually gets called).

So, what sequence of events happens after a zoom?

Frame::setZoomFactor() calls Document::recalcStyle(Force). If after that the document has a renderer (which would be a RenderView) and that renderer is marked for layout, then FrameView::layout() is called, which will call RenderView::layout() and recursively lay out every render tree object marked as needing layout.

One explanation for what you’re seeing would be that as your objects’ style changes, they fail to call setNeedsLayout() (or setNeedsLayoutAndPerfWidthsRecalc()), and therefore layout doesn’t occur at that time. An alternative, less likely, explanation is that your objects have anonymous children, but they don’t propagate the style changes correctly to those children.

Also, if I need layout() to be called for things to be handled properly, is
something out of place?

No, layout() is the correct way to update the layout after a style change. To ensure that it happens, objects should mark themselves for layout in response to the style change when necessary. RenderObject::styleDidChange() is an example, and most render objects that override styleDidChange() invoke their base class’s implementation, so they get marked for layout as needed.

This all relates to the stretchy operator code in the MathML rendering. The operator's box stretches correctly after layout but after a zoom, it doesn't
stretch until layout happens again.

I hope the above helps you debug the problem. You may want to experiment with more localized style changes (such that should affect only your object of interest) and see whether they work and if not, why not.
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to