2014-11-25 21:07:13 -05:00
|
|
|
#include "MouseTracker.h"
|
2014-11-25 22:51:14 -05:00
|
|
|
#include <iostream>
|
2014-11-25 21:07:13 -05:00
|
|
|
|
2015-01-03 17:07:39 -05:00
|
|
|
MouseTracker::MouseTracker(wxWindow *target) :
|
|
|
|
mouseX(0), mouseY(0), lastMouseX(0), lastMouseY(0), originMouseX(0), originMouseY(0), deltaMouseX(0), deltaMouseY(0), vertDragLock(false), horizDragLock(
|
|
|
|
false), isMouseDown(false), isMouseRightDown(false), isMouseInView(false), target(target) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
MouseTracker::MouseTracker() :
|
|
|
|
MouseTracker(NULL) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2014-11-25 21:07:13 -05:00
|
|
|
void MouseTracker::OnMouseMoved(wxMouseEvent& event) {
|
2014-11-25 22:51:14 -05:00
|
|
|
if (target == NULL) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const wxSize ClientSize = target->GetClientSize();
|
|
|
|
|
|
|
|
mouseX = (float) event.m_x / (float) ClientSize.x;
|
2014-12-31 19:45:01 -05:00
|
|
|
mouseY = 1.0 - (float) event.m_y / (float) ClientSize.y;
|
2014-11-25 21:07:13 -05:00
|
|
|
|
2014-11-25 22:51:14 -05:00
|
|
|
deltaMouseX = mouseX - lastMouseX;
|
|
|
|
deltaMouseY = mouseY - lastMouseY;
|
2014-11-25 21:07:13 -05:00
|
|
|
|
2015-01-03 17:07:39 -05:00
|
|
|
if (isMouseDown || isMouseRightDown) {
|
2014-11-27 12:53:35 -05:00
|
|
|
#ifndef __APPLE__
|
2014-11-26 21:05:19 -05:00
|
|
|
if (horizDragLock && vertDragLock) {
|
2015-01-03 17:07:39 -05:00
|
|
|
target->WarpPointer(originMouseX * ClientSize.x, (1.0 - originMouseY) * ClientSize.y);
|
2014-11-26 21:05:19 -05:00
|
|
|
mouseX = originMouseX;
|
|
|
|
mouseY = originMouseY;
|
2015-01-03 17:07:39 -05:00
|
|
|
} else if (vertDragLock && mouseY != lastMouseY) {
|
|
|
|
target->WarpPointer(event.m_x, (1.0 - originMouseY) * ClientSize.y);
|
2014-11-26 21:05:19 -05:00
|
|
|
mouseY = originMouseY;
|
|
|
|
} else if (horizDragLock && mouseX != lastMouseX) {
|
|
|
|
target->WarpPointer(originMouseX * ClientSize.x, event.m_y);
|
|
|
|
mouseX = originMouseX;
|
2014-11-25 21:07:13 -05:00
|
|
|
}
|
2014-11-27 12:53:35 -05:00
|
|
|
#endif
|
2014-11-25 21:07:13 -05:00
|
|
|
}
|
2014-11-26 21:05:19 -05:00
|
|
|
|
|
|
|
lastMouseX = mouseX;
|
|
|
|
lastMouseY = mouseY;
|
2014-11-25 21:07:13 -05:00
|
|
|
}
|
|
|
|
|
2015-01-03 17:07:39 -05:00
|
|
|
void MouseTracker::OnMouseWheelMoved(wxMouseEvent& event) {
|
|
|
|
// std::cout << "wheel?" << std::endl;
|
|
|
|
}
|
|
|
|
|
2014-11-25 21:07:13 -05:00
|
|
|
void MouseTracker::OnMouseDown(wxMouseEvent& event) {
|
2015-01-03 17:07:39 -05:00
|
|
|
if (isMouseRightDown || target == NULL) {
|
2014-11-25 22:51:14 -05:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-11-25 21:07:13 -05:00
|
|
|
const wxSize ClientSize = target->GetClientSize();
|
|
|
|
|
2014-11-25 22:51:14 -05:00
|
|
|
mouseX = lastMouseX = (float) event.m_x / (float) ClientSize.x;
|
2014-12-31 19:45:01 -05:00
|
|
|
mouseY = lastMouseY = 1.0 - (float) event.m_y / (float) ClientSize.y;
|
2014-11-25 22:51:14 -05:00
|
|
|
|
|
|
|
originMouseX = mouseX;
|
|
|
|
originMouseY = mouseY;
|
2014-11-25 21:07:13 -05:00
|
|
|
|
|
|
|
isMouseDown = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void MouseTracker::OnMouseReleased(wxMouseEvent& event) {
|
|
|
|
isMouseDown = false;
|
|
|
|
}
|
|
|
|
|
2015-01-03 17:07:39 -05:00
|
|
|
void MouseTracker::OnMouseRightDown(wxMouseEvent& event) {
|
|
|
|
if (isMouseDown || target == NULL) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const wxSize ClientSize = target->GetClientSize();
|
|
|
|
|
|
|
|
mouseX = lastMouseX = (float) event.m_x / (float) ClientSize.x;
|
|
|
|
mouseY = lastMouseY = 1.0 - (float) event.m_y / (float) ClientSize.y;
|
|
|
|
|
|
|
|
originMouseX = mouseX;
|
|
|
|
originMouseY = mouseY;
|
|
|
|
|
|
|
|
isMouseRightDown = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void MouseTracker::OnMouseRightReleased(wxMouseEvent& event) {
|
|
|
|
isMouseRightDown = false;
|
|
|
|
}
|
|
|
|
|
2014-11-25 22:51:14 -05:00
|
|
|
void MouseTracker::OnMouseEnterWindow(wxMouseEvent& event) {
|
|
|
|
isMouseInView = true;
|
2015-01-03 17:07:39 -05:00
|
|
|
isMouseDown = false;
|
|
|
|
isMouseRightDown = false;
|
2014-11-25 22:51:14 -05:00
|
|
|
}
|
|
|
|
|
2014-11-25 21:07:13 -05:00
|
|
|
void MouseTracker::OnMouseLeftWindow(wxMouseEvent& event) {
|
|
|
|
isMouseDown = false;
|
2015-01-03 17:07:39 -05:00
|
|
|
isMouseRightDown = false;
|
2014-11-25 22:51:14 -05:00
|
|
|
isMouseInView = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getOriginMouseX() {
|
|
|
|
return originMouseX;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getOriginMouseY() {
|
|
|
|
return originMouseY;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getOriginDeltaMouseX() {
|
|
|
|
return mouseX - originMouseX;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getOriginDeltaMouseY() {
|
|
|
|
return mouseY - originMouseY;
|
2014-11-25 21:07:13 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getDeltaMouseX() {
|
|
|
|
return deltaMouseX;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getDeltaMouseY() {
|
|
|
|
return deltaMouseY;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getLastMouseX() {
|
|
|
|
return lastMouseX;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getLastMouseY() {
|
|
|
|
return lastMouseY;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getMouseX() {
|
|
|
|
return mouseX;
|
|
|
|
}
|
|
|
|
|
|
|
|
float MouseTracker::getMouseY() {
|
|
|
|
return mouseY;
|
|
|
|
}
|
|
|
|
|
|
|
|
void MouseTracker::setVertDragLock(bool dragLock) {
|
|
|
|
vertDragLock = dragLock;
|
|
|
|
}
|
|
|
|
|
2014-11-26 21:05:19 -05:00
|
|
|
void MouseTracker::setHorizDragLock(bool dragLock) {
|
|
|
|
horizDragLock = dragLock;
|
|
|
|
}
|
|
|
|
|
2014-11-25 21:07:13 -05:00
|
|
|
bool MouseTracker::mouseDown() {
|
|
|
|
return isMouseDown;
|
|
|
|
}
|
2014-11-25 22:51:14 -05:00
|
|
|
|
|
|
|
bool MouseTracker::mouseInView() {
|
|
|
|
return isMouseInView;
|
|
|
|
}
|
|
|
|
|
|
|
|
void MouseTracker::setTarget(wxWindow *target_in) {
|
|
|
|
target = target_in;
|
|
|
|
}
|
2015-01-03 17:07:39 -05:00
|
|
|
|
|
|
|
|
|
|
|
bool MouseTracker::mouseRightDown() {
|
|
|
|
return isMouseRightDown;
|
|
|
|
}
|