Re: Include out of viewport frames in display list

[email protected]
Newsgroups gmane.comp.mozilla.devel.layout
Message-ID <[email protected]>
Hi,

Thanks a lot for replying again. I'll look into it more but it already makes sense!

Does it means I also have to modify nsDisplayList.h in order to add the flag to nsDisplayListBuilder? I'm still a bit unsure how to add a flag to nsDisplayListBuilder. I think I need to implement my own function to get and set a custom parameter, right? I can then check for this parameter from the two parts you referenced. And I can set the parameter from GetFramesForArea() which constructs the nsDisplayListBuilder.

In my brief testing I noticed that overriding the pointer-events check in nsDisplayList::HitTest() allows me to also retrieve elements with pointer-events:none. Though strangely no iframes with pointer-events:none. Those are still left out.

I made this screen recording to give an idea of my end goal: https://youtu.be/EtH1MMDorKA

I basically want to visualize the position of all visible elements on a webpage, with all CSS rules applied and in the right visual order (z-order). In real time. The only elements I want to leave out are elements with display:none.

As you can see in the video I still have some issues with elements within scrolling elements...

On Monday, 2 May 2016 18:50:28 UTC+2, [email protected]  wrote:
> Sorry for the delayed response! I'm not actually subscribed to this list, and I thought replies would be automatically cc'd to me.
> 
> On Sunday, April 24, 2016 at 6:12:31 AM UTC-4, [email protected] wrote:
> > I'm still stuck with a few things. Just like elementsFromPoint() my function currently ignores nodes with pointer-events:none; or visibility:hidden; (and maybe more). I only want to ignore nodes with display:none; Where can I override this?
> 
> It looks like visibility:none is checked here [1] and pointer-events:none is checked here [2].
> 
> Both of those functions have an nsDisplayListBuilder* argument, so you could do something like this:
> 
>   - add a flag to nsDisplayListBuilder, whether it should ignore
>     visibility:none and pointer-events:none
>   - condition the above checks on the flag not being set
>   - add a corresponding option to GetFramesForArea()
>   - when GetFramesForArea() constructs the nsDisplayListBuilder,
>     set the flag is the option is set
>   - for your call to GetFramesForArea(), set the option
> 
> Hope that made sense.
> 
> If you give some more details about your end goal, we may be able to suggest solutions that are easier / involve writing less custom code.
> 
> Cheers,
> Botond
> 
> [1] https://dxr.mozilla.org/mozilla-central/rev/1461a4071341c282afcf7b72e33036412d2251d4/layout/generic/nsFrame.cpp#6295
> [2] https://dxr.mozilla.org/mozilla-central/rev/1461a4071341c282afcf7b72e33036412d2251d4/layout/base/nsDisplayList.cpp#2061
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.