Fix T55589: drawing strokes with Microsoft surface pen misses first part.
This disables touch gesture recognition in Blender, avoiding any initial delay when drawing with grease pencil, texture paint, etc. Differential Revision: https://developer.blender.org/D4203
This commit is contained in:
parent
10fa3b790f
commit
19fba61d46
Notes:
blender-bot
2023-02-14 05:41:58 +01:00
Referenced by issue #55589, Microsoft Surface pens does not send first events when moves
|
@ -190,7 +190,24 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system,
|
|||
0); // pointer to window-creation data
|
||||
free(title_16);
|
||||
}
|
||||
|
||||
m_user32 = ::LoadLibrary("user32.dll");
|
||||
|
||||
if (m_hWnd) {
|
||||
if (m_user32) {
|
||||
// Touch enabled screens with pen support by default have gestures
|
||||
// enabled, which results in a delay between the pointer down event
|
||||
// and the first move when using the stylus. RegisterTouchWindow
|
||||
// disables the new gesture architecture enabling the events to be
|
||||
// sent immediately to the application rather than being absorbed by
|
||||
// the gesture API.
|
||||
GHOST_WIN32_RegisterTouchWindow pRegisterTouchWindow =
|
||||
(GHOST_WIN32_RegisterTouchWindow)GetProcAddress(m_user32, "RegisterTouchWindow");
|
||||
if (pRegisterTouchWindow) {
|
||||
pRegisterTouchWindow(m_hWnd, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Register this window as a droptarget. Requires m_hWnd to be valid.
|
||||
// Note that OleInitialize(0) has to be called prior to this. Done in GHOST_SystemWin32.
|
||||
m_dropTarget = new GHOST_DropTargetWin32(this, m_system);
|
||||
|
@ -368,6 +385,11 @@ GHOST_WindowWin32::~GHOST_WindowWin32()
|
|||
::DestroyWindow(m_hWnd);
|
||||
m_hWnd = 0;
|
||||
}
|
||||
|
||||
if (m_user32) {
|
||||
FreeLibrary(m_user32);
|
||||
m_user32 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool GHOST_WindowWin32::getValid() const
|
||||
|
@ -998,10 +1020,6 @@ void GHOST_WindowWin32::bringTabletContextToFront()
|
|||
|
||||
GHOST_TUns16 GHOST_WindowWin32::getDPIHint()
|
||||
{
|
||||
if (!m_user32) {
|
||||
m_user32 = ::LoadLibrary("user32.dll");
|
||||
}
|
||||
|
||||
if (m_user32) {
|
||||
GHOST_WIN32_GetDpiForWindow fpGetDpiForWindow = (GHOST_WIN32_GetDpiForWindow) ::GetProcAddress(m_user32, "GetDpiForWindow");
|
||||
|
||||
|
|
|
@ -59,6 +59,9 @@ typedef BOOL (API * GHOST_WIN32_WTPacket)(HCTX, UINT, LPVOID);
|
|||
typedef BOOL (API * GHOST_WIN32_WTEnable)(HCTX, BOOL);
|
||||
typedef BOOL (API * GHOST_WIN32_WTOverlap)(HCTX, BOOL);
|
||||
|
||||
// typedef to user32 functions to disable gestures on windows
|
||||
typedef BOOL(API * GHOST_WIN32_RegisterTouchWindow)(HWND hwnd, ULONG ulFlags);
|
||||
|
||||
// typedefs for user32 functions to allow dynamic loading of Windows 10 DPI scaling functions
|
||||
typedef UINT(API * GHOST_WIN32_GetDpiForWindow)(HWND);
|
||||
#ifndef USER_DEFAULT_SCREEN_DPI
|
||||
|
|
Loading…
Reference in New Issue