Skip to content

Commit

Permalink
Merge pull request #9 from kkwpsv/fix-pointer
Browse files Browse the repository at this point in the history
修复开启 WM_Pointer 后,非主屏获取的 GetTouchPoint/GetStylusPoint 坐标错误
  • Loading branch information
lindexi authored Dec 5, 2023
2 parents dc4a485 + 0f3be1e commit caf64ad
Showing 1 changed file with 17 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.



using MS.Internal;
using MS.Internal.Interop;
using MS.Internal.PresentationCore;
Expand Down Expand Up @@ -223,7 +223,7 @@ private bool ProcessMessage(uint pointerId, RawStylusActions action, int timesta
if (data.IsValid
&& (data.Info.pointerType == UnsafeNativeMethods.POINTER_INPUT_TYPE.PT_TOUCH
|| data.Info.pointerType == UnsafeNativeMethods.POINTER_INPUT_TYPE.PT_PEN))
{
{
uint cursorId = 0;

if (UnsafeNativeMethods.GetPointerCursorId(pointerId, ref cursorId))
Expand All @@ -236,7 +236,7 @@ private bool ProcessMessage(uint pointerId, RawStylusActions action, int timesta
{
return false;
}

// Convert move to InAirMove if applicable
if (action == RawStylusActions.Move
&& (!data.Info.pointerFlags.HasFlag(UnsafeNativeMethods.POINTER_FLAGS.POINTER_FLAG_INCONTACT)
Expand Down Expand Up @@ -325,7 +325,20 @@ private bool ProcessMessage(uint pointerId, RawStylusActions action, int timesta
/// <param name="originOffsetY">The Y offset in logical coordiantes</param>
private void GetOriginOffsetsLogical(out int originOffsetX, out int originOffsetY)
{
Point originScreenCoord = _source.Value.RootVisual.PointToScreen(new Point(0, 0));
Point originScreenCoord = new Point();

HwndSource hwndSource = PresentationSource.FromVisual(_source.Value.RootVisual) as HwndSource;
if (hwndSource != null)
{
HandleRef handleRef = new HandleRef(hwndSource, hwndSource.CriticalHandle);

MS.Win32.NativeMethods.POINT point = new MS.Win32.NativeMethods.POINT();
MS.Win32.UnsafeNativeMethods.ClientToScreen(handleRef, ref point);

var displayRect = _currentTabletDevice.DeviceInfo.DisplayRect;

originScreenCoord = new Point(point.x - displayRect.left, point.y - displayRect.top);
}

// Use the inverse of our logical tablet to screen matrix to generate tablet coords
MatrixTransform screenToTablet = new MatrixTransform(_currentTabletDevice.TabletToScreen);
Expand Down

0 comments on commit caf64ad

Please sign in to comment.