mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
fix 'lost' button events when mouse wanders out of window
This commit is contained in:
parent
bddbd6788b
commit
8440f4bb3e
@ -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));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user