[PD-dev] how to know if a GUI object is visible in a GOP?
Christof Ressi
info at christofressi.com
Sat Jun 27 03:06:10 CEST 2020
I'm not sure I understand the issue. Pd obtains the bounding rect of a
GUI object (by calling w_getrectfn in gobj_getrect()) to determine
whether it should be visible or not and then calls the w_visfn as
needed, see gobj_shouldvis(). This means you shouldn't have to perform
the bound check against the GOP rect yourself, Pd will do it for you.
> so it'll say it is visible, even though the object itself is actually
> out of bounds
Make sure that you report the actual bounding rect of your object.
Christof
On 27.06.2020 02:35, Alexandre Torres Porres wrote:
> Hi folks, I opened an issue about this on github, but since there was
> no answer I'm hoping to get some attention and a possible answer here
> on the dev list.
>
> In Pd, if you have graphical objects in a GOP subpatch that are out of
> the visible range, it's possible they get drawn, and I opened the
> issue to mention that [vradio], for instance, does that (here it is:
> https://github.com/pure-data/pure-data/issues/1053 ). I also mentioned
> n there how graphs inside a GOP subpatch can also do that. But I also
> have this issue with some GUI externals I take care of.
>
> So, is there a way for an object to know if it is visible in the
> parent pacth so we do not tell it to get drawn?
>
> What I've now just stumbled upon is our code for cyclone/scope~ -
> unlike [vradio], if the object is out of bounds in a GOP and I tell it
> to change dimensions, it won't get drawn, but trigger a tcl/tk error
> instead. Note that no error happens if the subpatch is opened or if it
> is inside bounds (or both of course). Anyway, this line is what
> triggers the error =>
> https://github.com/porres/pd-cyclone/blob/cyclone_0.5-1/cyclone_objects/binaries/audio/scope.c#L495
>
> The error gives me hope there's a way to check if it is possible to do
> it, and then not tell it to do it if it's not possible...
>
> I used the "(glist_isvisible())" function to check if it's visible. It
> doesn't work as a check because the object is in a GOP, so it'll say
> it is visible, even though the object itself is actually out of
> bounds. Now, in the case of scope~, it tries to delete the GUI by
> referring to the subpatch canvas, and I assume it doesn't work because
> that window isn't active/opened.
>
> So if I change the lines below
>
> sys_vgui(".x%lx.c delete all%lx\n", x->x_cv, x);
> scope_draw(x, x->x_cv);
>
> To refer to the parent canvas (and not "x->x_cv"), I don't get an
> error, but I get the object getting redrawn in the parent patch
> outside the graph, just like the issue I reported with [vradio].
>
> Again, when bumping into this, I thought, since the object knows it
> can't delete and redraw (that is, since it gives an error), there
> could be a way to check it.
>
> What do you say?
>
> Thanks
>
> _______________________________________________
> Pd-dev mailing list
> Pd-dev at lists.iem.at
> https://lists.puredata.info/listinfo/pd-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-dev/attachments/20200627/8187205b/attachment-0001.html>
More information about the Pd-dev
mailing list