Hi OM, The event mask would be an interesting approach that be worth experimenting with. I don't have the available time to go try this out, so could you have a tinker and see how you get on.
Cheers, Robert. On 9/12/07, Ole-Morten Duesund <[EMAIL PROTECTED]> wrote: > Robert Osfield wrote: > > Hi Ole-Morten, > > > > As of 1.9.x onwards all EventHandlers including CameraManipulators get > > all events whether handled or not, in keeping with the Chain of > > Responsibility Design Pattern. > > And I certainly see the point in this. > > > The reason for passing on all events is that it permits a fuller range > > of usage models the blanket ignoring of events would deny, as the OSG > > is a general purpose toolkit this capability is important and not one > > I'm about to throw away on a whim. > > I know, which is why I wasn't suggesting a change to the the Viewer > without a discussion. > > > Now I do roughly understand the problem you are trying to tackle, but > > doing a blanket reject even for just a single manipulator is the wrong > > way to do it, if users want to ignore already handled events in an > > event handler then this should be optional, and even then possibly in > > a limited way. For instance your event handler might still want to > > get frame events, but not already handled mouse events, in these case > > the check should be local to the event switch case. Even this more > > limited scope still should be optional for most camera manipulators. > > > > Might I suggest considering adding an option to discard already handle > > events, and to local the use of this to just events that make sense to > > ignore in this case. Feel free to code this up. > > I'd really like to be able to use any of the already existing > manipulators interchangeably - without having to maintain my own version > of OSG so I'm more than open to a more generic approach. > > Doing a selective enable/disable would be fairly easy if > GUIEventAdapter::EventType could be used as a mask instead of just a > sequencial enum. > That way the user could set an enable/disable mask with a default to > all. And the cameramanipulators would just have to do a quick and > between the mask and the event-type to know if they should return early. > For instance : > manipulator->setIgnoreUsedEventsMask(DRAG | MOVE) > would do the obvious, but still be able to react to other events, even > if they're already handled. > > This, along with the possibility to set a default ignore-mask would > solve at least my problems. > > As far as I can see this would require changes to > GUIEventAdapter::EventType, adding get/setIgnoreUsedEventsMask() and > get/setDefaultIgnoreUsedEventsMask() to MatrixManipulator. As well as a > quick check either in all the CameraManipulators or in > Viewer::eventTraversal(). > > If EventType can't be changed, it should rather be an on/off thing > instead since I can't see any sensible way to selectively switch on/off > the various events in this case. > > I'll be happy to provide the code or suggestions on how to do it > differently. > > - OM > _______________________________________________ > osg-submissions mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
