I was trying to apply ROTranslatingShape to produce a label sitting
above the children nodes. To understand it better how to get what I
need, I made ROExample>>nestingTranslate to show a permutation of
the order the shapes can be applied. I have attached a screen snapshot
and fileout for this. The case I am particularly interested in is el3.
The 'el0' case is the reference without any ROTranslatingShape.
When running the example hover near and over the inner elements to view
the misalignment of the mouse hotspot. I have marked the approximate
offset in green in the snapshot.
I notice that the existing call chain goes...
ROView>>localElementAt:
ROElement>>elementAt:
ROElement>>contains:
ROElemenet>>bounds
ROShape>>extentFor: (union of extent of each shape)
It seems to me the hotspot misalignment is related to the translation
being applied at the shape draw level whereas the #contains: checking
is done at the element level. This relies on the union of the shape
extents to set the element bounds, but I can't see how that extent
union could be modified to account for the translation - particular in
the case of a negative translation since extents throw away information
about any negative offset.
So I thought perhaps that the element #contains: checking needs might
be better chained through the shaped, so that the translation
could be applied similar to
ROTranslatingShape>>chainedDrawOn:for: and that this would not
cause any/much additional computation since all the shapes were being
cycled through anyway for #extentFor:
Something like...
ROView>>localElementAt:
ROElement>>elementAt:
ROElement>>contains:
ROShape>>chainedContains:For: (for each shape)
cheers, Ben
_______________________________________________
Moose-dev mailing list
Moose-dev@iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev