mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2024-11-26 02:54:20 +01:00
113 lines
4.0 KiB
C#
113 lines
4.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Runtime.InteropServices;
|
|
using DS4Library;
|
|
using System.Threading;
|
|
|
|
namespace DS4Control
|
|
{
|
|
class DragMouse: Mouse
|
|
{
|
|
protected bool leftClick = false;
|
|
protected Timer timer;
|
|
private readonly MouseCursor cursor;
|
|
private readonly MouseWheel wheel;
|
|
|
|
public DragMouse(int deviceID):base(deviceID)
|
|
{
|
|
timer = new System.Threading.Timer((a) =>
|
|
{
|
|
InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP);
|
|
leftClick = false;
|
|
}, null,
|
|
System.Threading.Timeout.Infinite,
|
|
System.Threading.Timeout.Infinite);
|
|
cursor = new MouseCursor(deviceNum);
|
|
wheel = new MouseWheel(deviceNum);
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return "Drag Mode";
|
|
}
|
|
|
|
public override void touchesBegan(object sender, TouchpadEventArgs arg)
|
|
{
|
|
base.touchesBegan(sender, arg);
|
|
if (leftClick)
|
|
timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
|
|
}
|
|
|
|
public override void touchesEnded(object sender, TouchpadEventArgs arg)
|
|
{
|
|
if (Global.getTapSensitivity(deviceNum) != 0)
|
|
{
|
|
DateTime test = arg.timeStamp;
|
|
if (test <= (pastTime + TimeSpan.FromMilliseconds((double)Global.getTapSensitivity(deviceNum) * 2)) && !arg.touchButtonPressed)
|
|
{
|
|
if (Math.Abs(firstTouch.hwX - arg.touches[0].hwX) < 10 &&
|
|
Math.Abs(firstTouch.hwY - arg.touches[0].hwY) < 10)
|
|
{
|
|
if (leftClick)
|
|
InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP);
|
|
|
|
leftClick = true;
|
|
InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTDOWN);
|
|
timer.Change(Global.getTapSensitivity(deviceNum) * 2, System.Threading.Timeout.Infinite);
|
|
}
|
|
}
|
|
else if (leftClick)
|
|
{
|
|
InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP);
|
|
leftClick = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void touchButtonUp(object sender, TouchpadEventArgs arg)
|
|
{
|
|
if (arg.touches == null)
|
|
{
|
|
//No touches, finger on upper portion of touchpad
|
|
mapTouchPad(DS4Controls.TouchUpper, true);
|
|
}
|
|
else if (arg.touches.Length > 1)
|
|
mapTouchPad(DS4Controls.TouchMulti, true);
|
|
else if (!rightClick && arg.touches.Length == 1 && !mapTouchPad(DS4Controls.TouchButton, true))
|
|
{
|
|
InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP);
|
|
leftClick = false;
|
|
}
|
|
}
|
|
|
|
public override void touchButtonDown(object sender, TouchpadEventArgs arg)
|
|
{
|
|
if (arg.touches == null)
|
|
{
|
|
//No touches, finger on upper portion of touchpad
|
|
if (!mapTouchPad(DS4Controls.TouchUpper))
|
|
InputMethods.performMiddleClick();
|
|
}
|
|
else if (!Global.getLowerRCOff(deviceNum) && arg.touches[0].hwX > (1920 * 3) / 4
|
|
&& arg.touches[0].hwY > (960 * 3) / 4)
|
|
{
|
|
rightClick = true;
|
|
InputMethods.performRightClick();
|
|
}
|
|
else if (arg.touches.Length > 1 && !mapTouchPad(DS4Controls.TouchMulti))
|
|
{
|
|
rightClick = true;
|
|
InputMethods.performRightClick();
|
|
}
|
|
else if (arg.touches.Length == 1 && !mapTouchPad(DS4Controls.TouchButton))
|
|
{
|
|
rightClick = false;
|
|
InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTDOWN);
|
|
leftClick = true;
|
|
}
|
|
}
|
|
}
|
|
}
|