[webkit-dev] nodeAtPoint is very confusing

Maciej Stachowiak mjs at apple.com
Wed Apr 8 15:50:40 PDT 2009


On Apr 8, 2009, at 9:23 AM, Simon Fraser wrote:

> On Apr 8, 2009, at 7:06 AM, Eric Seidel wrote:
>
>> Dave, Simon, and other rendering gurus:
>>
>> bool RenderObject::nodeAtPoint(const HitTestRequest&, HitTestResult&
>> result, int _x, int _y, int tx, int ty, HitTestAction hitTestAction)
>>
>> _x, _y, tx, ty are very confusing.
>>
>> As far as I can tell, _x, _y are relative to the root layer (which  
>> can
>> change during hit-testing!) and tx, ty are more of the HTML "offset  
>> to
>> your parent" optimization which painting uses.
>>
>> Can you explain what the best way to convert from _x, _y to local
>> coordinates?  And what I should rename _x, _y, and tx, ty to in a
>> forthcoming "make hit testing readable to normal humans" cleanup
>> patch?
>
> As I understand it, _x and _y are relative to tx, ty, which in turn  
> is relative
> to the rootLayer.
>
> In general tx and ty, as passed to painting and hit testing  
> functions, are
> the offsets that put you in the coordinate space of the parent  
> renderer,
> relative to the current rootLayer  being used for painting or hit  
> testing
> (which, as you note, gets reset for transforms, and I think should
> also get reset for HTML/SVG boundaries).  So to get local x and y  
> for hit testing,
> you'll see code like:
>
> tx += x();
> ty += y()
> ...
> updateHitTestResult(_x - tx, _y - ty)
>
> It is all rather confusing, but much of the complexity comes from  
> having to
> deal with inlines.

Maybe one thing that would help would be combining (tx, ty) into an  
IntPoint and (_x, _y) into an IntSize (since it as an offset from the  
point established by tx, ty). Or vice versa.

Regards,
Maciej



More information about the webkit-dev mailing list