Fix the eraser state switch requirement

This commit is contained in:
X9VoiD 2020-09-13 07:33:38 +08:00
parent ec1b5f94bb
commit 99bc358a1d
No known key found for this signature in database
GPG key ID: 3AC5DBB8A2717CFF

View file

@ -25,6 +25,7 @@ namespace WindowsInk
private InkReport InkReport;
private readonly HidStream VMultiDev;
private Area ScreenArea;
private bool EraserState;
public InkHandler(Area screenArea)
{
@ -52,6 +53,7 @@ namespace WindowsInk
}
ScreenArea = screenArea;
EraserState = false;
}
public void MouseDown(MouseButton button)
@ -59,13 +61,18 @@ namespace WindowsInk
switch (button)
{
case MouseButton.Left:
EnableBit(ButtonMask.Press);
if (!EraserState)
{
EnableBit(ButtonMask.Press);
}
break;
case MouseButton.Right:
EnableBit(ButtonMask.Barrel);
break;
case MouseButton.Middle:
EnableBit(ButtonMask.Eraser);
DisableBit(ButtonMask.Press);
EraserState = true;
StateChange();
break;
}
@ -83,6 +90,7 @@ namespace WindowsInk
break;
case MouseButton.Middle:
DisableBit(ButtonMask.Eraser);
EraserState = false;
StateChange();
break;
}
@ -112,9 +120,15 @@ namespace WindowsInk
private void StateChange()
{
DisableBit(ButtonMask.InRange);
var prevState = InkReport.Buttons;
var prevPressure = InkReport.Pressure;
InkReport.ReportID = 0;
InkReport.Buttons = 0;
InkReport.Pressure = 0;
VMultiDev.Write(InkReport);
EnableBit(ButtonMask.InRange);
InkReport.ReportID = 0x05;
InkReport.Buttons = prevState;
InkReport.Pressure = prevPressure;
}
}
}