fix 'lost' button events when mouse wanders out of window

This commit is contained in:
David Rose 2002-08-21 20:46:05 +00:00
parent bddbd6788b
commit 8440f4bb3e

View File

@ -858,33 +858,31 @@ do_transmit_data(const DataNodeTransmit &input, DataNodeTransmit &output) {
} }
_has_mouse = false; _has_mouse = false;
// If the mouse is outside the window, do nothing; let all the
// events continue down the pipe unmolested.
clear_current_regions(); clear_current_regions();
return;
}
// The mouse is within the window. Get the current mouse position. } else {
const EventStoreVec2 *xy; // The mouse is within the window. Get the current mouse position.
DCAST_INTO_V(xy, input.get_data(_xy_input).get_ptr()); const EventStoreVec2 *xy;
const LVecBase2f &p = xy->get_value(); DCAST_INTO_V(xy, input.get_data(_xy_input).get_ptr());
_mouse.set(p[0], p[1]); const LVecBase2f &p = xy->get_value();
_mouse.set(p[0], p[1]);
if (!_geometry.is_null()) {
// Transform the mouse pointer. if (!_geometry.is_null()) {
_geometry->set_transform(TransformState::make_pos(LVecBase3f(p[0], 0, p[1]))); // Transform the mouse pointer.
if (!_has_mouse) { _geometry->set_transform(TransformState::make_pos(LVecBase3f(p[0], 0, p[1])));
// Show the mouse pointer. if (!_has_mouse) {
_geometry->set_draw_mask(DrawMask::all_on()); // Show the mouse pointer.
_geometry->set_draw_mask(DrawMask::all_on());
}
} }
_has_mouse = true;
VRegions regions;
get_over_regions(regions, _mouse);
set_current_regions(regions);
} }
_has_mouse = true;
VRegions regions;
get_over_regions(regions, _mouse);
set_current_regions(regions);
_suppress_flags = 0; _suppress_flags = 0;
if (_preferred_region != (MouseWatcherRegion *)NULL) { if (_preferred_region != (MouseWatcherRegion *)NULL) {
_suppress_flags = _preferred_region->get_suppress_flags(); _suppress_flags = _preferred_region->get_suppress_flags();
@ -915,7 +913,8 @@ do_transmit_data(const DataNodeTransmit &input, DataNodeTransmit &output) {
} }
} }
if ((_suppress_flags & MouseWatcherRegion::SF_mouse_position) == 0) { if (_has_mouse &&
(_suppress_flags & MouseWatcherRegion::SF_mouse_position) == 0) {
// Transmit the mouse position. // Transmit the mouse position.
output.set_data(_xy_output, input.get_data(_xy_input)); output.set_data(_xy_output, input.get_data(_xy_input));
output.set_data(_pixel_xy_output, input.get_data(_pixel_xy_input)); output.set_data(_pixel_xy_output, input.get_data(_pixel_xy_input));