summaryrefslogtreecommitdiff
path: root/windows/keybuddy2/src/mousecontrol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'windows/keybuddy2/src/mousecontrol.cpp')
-rw-r--r--windows/keybuddy2/src/mousecontrol.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/windows/keybuddy2/src/mousecontrol.cpp b/windows/keybuddy2/src/mousecontrol.cpp
new file mode 100644
index 0000000..34b4b97
--- /dev/null
+++ b/windows/keybuddy2/src/mousecontrol.cpp
@@ -0,0 +1,107 @@
+#include "includes.h"
+
+int mouseController::vx=0;
+int mouseController::vy=0;
+
+byte mouseController::mouseKeys[9]={0};
+bool mouseController::mouseButtonStates[3]={0};
+
+wchar mouseController::mouseSymbols[9]={0x15CF,0x15CB,0x15CC,0x15CA,0x15E1,0x15DE,0x15DD,0x15E3,0x15E2};
+
+// generate mouse event for the specified button
+void mouseController::mouseEvent(DWORD vkCode, bool isReleased){
+
+ INPUT in;
+ memset(&in,0,sizeof(INPUT));
+ in.type=INPUT_MOUSE;
+
+ if(vkCode==mouseKeys[MOUSE_MOVE_L]){
+ if(isReleased){
+ vx=0;
+ return;
+ }
+ if(vx>0){vx=0;}
+ if(vx>-20){vx--;}
+ in.mi.dx=vx;
+ in.mi.dwFlags=MOUSEEVENTF_MOVE;
+ }
+ else if(vkCode==mouseKeys[MOUSE_MOVE_R]){
+ if(isReleased){
+ vx=0;
+ return;
+ }
+ if(vx<0){vx=0;}
+ if(vx<20){vx++;}
+ in.mi.dx=vx;
+ in.mi.dwFlags=MOUSEEVENTF_MOVE;
+ }
+ else if(vkCode==mouseKeys[MOUSE_MOVE_U]){
+ if(isReleased){
+ vy=0;
+ return;
+ }
+ if(vy>0){vy=0;}
+ if(vy>-20){vy--;}
+ in.mi.dy=vy;
+ in.mi.dwFlags=MOUSEEVENTF_MOVE;
+ }
+ else if(vkCode==mouseKeys[MOUSE_MOVE_D]){
+ if(isReleased){
+ vy=0;
+ return;
+ }
+ if(vy<0){vy=0;}
+ if(vy<20){vy++;}
+ in.mi.dy=vy;
+ in.mi.dwFlags=MOUSEEVENTF_MOVE;
+ }
+ else if(vkCode==mouseKeys[MOUSE_BUTTON_L]){
+ if(!isReleased && mouseButtonStates[0]){return;} // dont resend clicks
+ if(!isReleased){
+ in.mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
+ mouseButtonStates[0]=true;
+ }
+ else{
+ in.mi.dwFlags=MOUSEEVENTF_LEFTUP;
+ mouseButtonStates[0]=false;
+ }
+ }
+ else if(vkCode==mouseKeys[MOUSE_BUTTON_R]){
+ if(!isReleased && mouseButtonStates[1]){return;} // dont resend clicks
+ if(!isReleased){
+ in.mi.dwFlags=MOUSEEVENTF_RIGHTDOWN;
+ mouseButtonStates[1]=true;
+ }
+ else{
+ in.mi.dwFlags=MOUSEEVENTF_RIGHTUP;
+ mouseButtonStates[1]=false;
+ }
+ }
+ else if(vkCode==mouseKeys[MOUSE_BUTTON_M]){
+ if(!isReleased && mouseButtonStates[2]){return;} // dont resend clicks
+ if(!isReleased){
+ in.mi.dwFlags=MOUSEEVENTF_MIDDLEDOWN;
+ mouseButtonStates[2]=true;
+ }
+ else{
+ in.mi.dwFlags=MOUSEEVENTF_MIDDLEUP;
+ mouseButtonStates[2]=false;
+ }
+ }
+ else if(vkCode==mouseKeys[MOUSE_SCROLL_U]){
+ if(isReleased){return;}
+ in.mi.dwFlags=MOUSEEVENTF_WHEEL;
+ in.mi.mouseData=WHEEL_DELTA;
+ }
+ else if(vkCode==mouseKeys[MOUSE_SCROLL_D]){
+ if(isReleased){return;}
+ in.mi.dwFlags=MOUSEEVENTF_WHEEL;
+ in.mi.mouseData=-WHEEL_DELTA;
+ }
+ else{
+ return; // do not call sendinput
+ }
+
+ // send mouse event
+ SendInput(1,&in,sizeof(INPUT));
+}