On Feb 1, 2011, at 6:51 PM, Ryosuke Niwa wrote:

>       • DOMPosition or SimplePosition - This class solely works on DOM, and 
> is agnostic of renderers and other parts of WebCore.  It's meant to be used 
> in utility functions and classes or passed along between renderers and 
> WebCore/dom.  It doesn't know anything about upstream or downstream.

I’ve been hoping to turn the Position class into this for some time. I like to 
keep the “physics” (nodes, offsets, that sort of thing) separate from the 
“chemistry” (editing smarts, things that rely on rendering, style, and layout).

I don’t like the name “SimplePosition”. Maybe a good first step would be to 
rename the old class to DeprecatedPosition and this new class can be named 
Position.

Would this store a container node and offset using range-style technology, or 
would it have the features that the current Position class has that let it 
express positions before/after a node?

To me this just sounds like today’s Position minus all the high level functions 
that don’t belong as member functions.

>       • RenderedPosition - This positions is an enhanced version of the 
> current Position.  It represents every possible visible position and or DOM 
> position and communicates vocabularies between WebCore/rendering and 
> WebCore/editing.  It knows about line boundary and upstream/downstream but it 
> doesn't trigger a layout, doesn't canonicalize, and doesn't know anything 
> about editing boundary.  Its life-time is tied to layout cycle, and needs to 
> be re-created every time DOM mutation or style change occurs. Many functions 
> in visible_units.cpp can belong to this class as member functions.  
> Furthermore, PositionIterator could be merged into this class because 
> RenderedPosition can cache pointers and other invariants as needed since 
> RenderedPosition's lifetime is tied to layout cycle.  It can also share some 
> code with TextIterator as well.

I don’t understand what state this would store besides the “DOMPosition” and 
thus I am unclear on why it’s a class rather than a set of functions. I do 
agree that this is an important category of functions that needs to exist. I 
can’t understand the proposal until you say more about what state this would 
store.

Your suggestion that we make the functions in visible_units.cpp into member 
functions doesn’t sound like an improvement to me. I would prefer a design that 
keeps the number of member functions small.

>       • EditingPosition or VisiblePosition - This class is almost identical 
> to the existing VisiblePosition. It knows everything DOMPosition and 
> RenderedPosition knows, and respects editing boundary. A significant 
> difference with VisiblePosition is that this class remembers the editable 
> root element to which it belongs. So when crossing editing boundary, it can 
> figure out whether or not we're still inside the same root editable root or 
> not. It also knows how to canonicalize itself so editing commands can 
> canonicalize positions as needed although canonicalization could be optional. 
> I'm also not sure if this class should trigger a layout inside its 
> constructor like VisiblePosition does or not yet.
> The introduction of RenderedPosition is particularly useful in rendering 
> engine because it allows to express any caret/insertion point position with a 
> guarantee that it doesn't trigger a layout.

Sounds OK to add a root editable element to VisiblePosition. Also seems fine to 
rename it. But I think there is more room for improvement in VisiblePosition 
than this, so I suspect this proposal does not go far enough.

Thanks for tackling this. I’m having trouble understanding your plans, so I’d 
like to hear more concrete details at some point.

    -- Darin

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

Reply via email to