MouseWatcher::set_frame
This commit is contained in:
parent
f2671e9437
commit
85e5ad2e45
|
|
@ -79,6 +79,49 @@ get_mouse_y() const {
|
|||
return _mouse[1];
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: MouseWatcher::set_frame
|
||||
// Access: Published
|
||||
// Description: Sets the frame of the MouseWatcher. See the next
|
||||
// flavor of this method for a more verbose explanation.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void MouseWatcher::
|
||||
set_frame(float left, float right, float bottom, float top) {
|
||||
set_frame(LVecBase4f(left, right, bottom, top));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: MouseWatcher::set_frame
|
||||
// Access: Published
|
||||
// Description: Sets the frame of the MouseWatcher. This determines
|
||||
// the coordinate space in which the MouseWatcherRegions
|
||||
// should be expected to live. Normally, this is left
|
||||
// at -1, 1, -1, 1, which is the default setting, and
|
||||
// matches the mouse coordinate range.
|
||||
//
|
||||
// Whatever values you specify here indicate the shape
|
||||
// of the full screen, and the MouseWatcherRegions will
|
||||
// be given in coordinate space matching it. For
|
||||
// instance, if you specify (0, 1, 0, 1), then a
|
||||
// MouseWatcherRegion with the frame (0, 1, 0, .5) will
|
||||
// cover the lower half of the screen.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void MouseWatcher::
|
||||
set_frame(const LVecBase4f &frame) {
|
||||
_frame = frame;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: MouseWatcher::get_frame
|
||||
// Access: Published
|
||||
// Description: Returns the frame of the MouseWatcher. See
|
||||
// set_frame().
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE const LVecBase4f &MouseWatcher::
|
||||
get_frame() const {
|
||||
return _frame;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: MouseWatcher::is_over_region
|
||||
// Access: Published
|
||||
|
|
|
|||
|
|
@ -69,6 +69,8 @@ MouseWatcher(const string &name) :
|
|||
_button_down = false;
|
||||
_eh = (EventHandler *)NULL;
|
||||
_display_region = (DisplayRegion *)NULL;
|
||||
|
||||
_frame.set(-1.0f, 1.0f, -1.0f, 1.0f);
|
||||
|
||||
_inactivity_timeout = inactivity_timeout;
|
||||
_has_inactivity_timeout = !IS_NEARLY_ZERO(_inactivity_timeout);
|
||||
|
|
@ -586,6 +588,13 @@ void MouseWatcher::
|
|||
get_over_regions(MouseWatcher::Regions ®ions, const LPoint2f &pos) const {
|
||||
nassertv(_lock.debug_is_locked());
|
||||
|
||||
// Scale the mouse coordinates into the frame.
|
||||
float mx = (pos[0] + 1.0f) * 0.5f * (_frame[1] - _frame[0]) + _frame[0];
|
||||
float my = (pos[1] + 1.0f) * 0.5f * (_frame[3] - _frame[2]) + _frame[2];
|
||||
|
||||
// pos[0] = 2.0f * (mx - _frame[0]) / (_frame[1] - _frame[0]) - 1.0f;
|
||||
// pos[1] = 2.0f * (my - _frame[2]) / (_frame[3] - _frame[2]) - 1.0f;
|
||||
|
||||
// Ensure the vector is empty before we begin.
|
||||
regions.clear();
|
||||
|
||||
|
|
@ -595,8 +604,8 @@ get_over_regions(MouseWatcher::Regions ®ions, const LPoint2f &pos) const {
|
|||
const LVecBase4f &frame = region->get_frame();
|
||||
|
||||
if (region->get_active() &&
|
||||
pos[0] >= frame[0] && pos[0] <= frame[1] &&
|
||||
pos[1] >= frame[2] && pos[1] <= frame[3]) {
|
||||
mx >= frame[0] && mx <= frame[1] &&
|
||||
my >= frame[2] && my <= frame[3]) {
|
||||
|
||||
regions.push_back(region);
|
||||
}
|
||||
|
|
@ -611,8 +620,8 @@ get_over_regions(MouseWatcher::Regions ®ions, const LPoint2f &pos) const {
|
|||
const LVecBase4f &frame = region->get_frame();
|
||||
|
||||
if (region->get_active() &&
|
||||
pos[0] >= frame[0] && pos[0] <= frame[1] &&
|
||||
pos[1] >= frame[2] && pos[1] <= frame[3]) {
|
||||
mx >= frame[0] && mx <= frame[1] &&
|
||||
my >= frame[2] && my <= frame[3]) {
|
||||
|
||||
regions.push_back(region);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,6 +78,10 @@ PUBLISHED:
|
|||
INLINE float get_mouse_x() const;
|
||||
INLINE float get_mouse_y() const;
|
||||
|
||||
INLINE void set_frame(float left, float right, float bottom, float top);
|
||||
INLINE void set_frame(const LVecBase4f &frame);
|
||||
INLINE const LVecBase4f &get_frame() const;
|
||||
|
||||
INLINE bool is_over_region() const;
|
||||
INLINE bool is_over_region(float x, float y) const;
|
||||
INLINE bool is_over_region(const LPoint2f &pos) const;
|
||||
|
|
@ -216,6 +220,8 @@ private:
|
|||
LPoint2f _mouse_pixel;
|
||||
BitArray _current_buttons_down;
|
||||
|
||||
LVecBase4f _frame;
|
||||
|
||||
PT(PointerEventList) _trail_log;
|
||||
int _num_trail_recent;
|
||||
double _trail_log_duration;
|
||||
|
|
|
|||
Loading…
Reference in New Issue