Ajout du GUI
This commit is contained in:
162
kivy/input/providers/wm_common.py
Normal file
162
kivy/input/providers/wm_common.py
Normal file
@@ -0,0 +1,162 @@
|
||||
'''
|
||||
Common definitions for a Windows provider
|
||||
=========================================
|
||||
|
||||
This file provides common definitions for constants used by WM_Touch / WM_Pen.
|
||||
'''
|
||||
import os
|
||||
|
||||
WM_MOUSEFIRST = 512
|
||||
WM_MOUSEMOVE = 512
|
||||
WM_LBUTTONDOWN = 513
|
||||
WM_LBUTTONUP = 514
|
||||
WM_LBUTTONDBLCLK = 515
|
||||
WM_RBUTTONDOWN = 516
|
||||
WM_RBUTTONUP = 517
|
||||
WM_RBUTTONDBLCLK = 518
|
||||
WM_MBUTTONDOWN = 519
|
||||
WM_MBUTTONUP = 520
|
||||
WM_MBUTTONDBLCLK = 521
|
||||
WM_MOUSEWHEEL = 522
|
||||
WM_MOUSELAST = 522
|
||||
WM_DPICHANGED = 736
|
||||
WM_GETDPISCALEDSIZE = 740
|
||||
WM_NCCALCSIZE = 131
|
||||
|
||||
WM_TOUCH = 576
|
||||
TOUCHEVENTF_MOVE = 1
|
||||
TOUCHEVENTF_DOWN = 2
|
||||
TOUCHEVENTF_UP = 4
|
||||
|
||||
PEN_OR_TOUCH_SIGNATURE = 0xFF515700
|
||||
PEN_OR_TOUCH_MASK = 0xFFFFFF00
|
||||
PEN_EVENT_TOUCH_MASK = 0x80
|
||||
|
||||
SM_CYCAPTION = 4
|
||||
|
||||
WM_TABLET_QUERYSYSTEMGESTURE = 0x000002CC
|
||||
TABLET_DISABLE_PRESSANDHOLD = 0x00000001
|
||||
TABLET_DISABLE_PENTAPFEEDBACK = 0x00000008
|
||||
TABLET_DISABLE_PENBARRELFEEDBACK = 0x00000010
|
||||
TABLET_DISABLE_TOUCHUIFORCEON = 0x00000100
|
||||
TABLET_DISABLE_TOUCHUIFORCEOFF = 0x00000200
|
||||
TABLET_DISABLE_TOUCHSWITCH = 0x00008000
|
||||
TABLET_DISABLE_FLICKS = 0x00010000
|
||||
TABLET_ENABLE_FLICKSONCONTEXT = 0x00020000
|
||||
TABLET_ENABLE_FLICKLEARNINGMODE = 0x00040000
|
||||
TABLET_DISABLE_SMOOTHSCROLLING = 0x00080000
|
||||
TABLET_DISABLE_FLICKFALLBACKKEYS = 0x00100000
|
||||
GWL_WNDPROC = -4
|
||||
|
||||
|
||||
QUERYSYSTEMGESTURE_WNDPROC = (
|
||||
TABLET_DISABLE_PRESSANDHOLD |
|
||||
TABLET_DISABLE_PENTAPFEEDBACK |
|
||||
TABLET_DISABLE_PENBARRELFEEDBACK |
|
||||
TABLET_DISABLE_SMOOTHSCROLLING |
|
||||
TABLET_DISABLE_FLICKFALLBACKKEYS |
|
||||
TABLET_DISABLE_TOUCHSWITCH |
|
||||
TABLET_DISABLE_FLICKS)
|
||||
|
||||
if 'KIVY_DOC' not in os.environ:
|
||||
from ctypes.wintypes import (ULONG, HANDLE, DWORD, LONG, UINT,
|
||||
WPARAM, LPARAM, BOOL, HWND, POINT,
|
||||
RECT as RECT_BASE)
|
||||
from ctypes import (windll, WINFUNCTYPE, POINTER,
|
||||
c_int, c_longlong, c_void_p, Structure,
|
||||
sizeof, byref, cast)
|
||||
|
||||
class RECT(RECT_BASE):
|
||||
x = property(lambda self: self.left)
|
||||
y = property(lambda self: self.top)
|
||||
w = property(lambda self: self.right - self.left)
|
||||
h = property(lambda self: self.bottom - self.top)
|
||||
|
||||
# check availability of RegisterTouchWindow
|
||||
if not hasattr(windll.user32, 'RegisterTouchWindow'):
|
||||
raise Exception('Unsupported Window version')
|
||||
|
||||
LRESULT = LPARAM
|
||||
WNDPROC = WINFUNCTYPE(LRESULT, HWND, UINT, WPARAM, LPARAM)
|
||||
|
||||
class TOUCHINPUT(Structure):
|
||||
_fields_ = [
|
||||
('x', LONG),
|
||||
('y', LONG),
|
||||
('pSource', HANDLE),
|
||||
('id', DWORD),
|
||||
('flags', DWORD),
|
||||
('mask', DWORD),
|
||||
('time', DWORD),
|
||||
('extraInfo', POINTER(ULONG)),
|
||||
('size_x', DWORD),
|
||||
('size_y', DWORD)]
|
||||
|
||||
def size(self):
|
||||
return (self.size_x, self.size_y)
|
||||
|
||||
def screen_x(self):
|
||||
return self.x / 100.0
|
||||
|
||||
def screen_y(self):
|
||||
return self.y / 100.0
|
||||
|
||||
def _event_type(self):
|
||||
if self.flags & TOUCHEVENTF_MOVE:
|
||||
return 'update'
|
||||
if self.flags & TOUCHEVENTF_DOWN:
|
||||
return 'begin'
|
||||
if self.flags & TOUCHEVENTF_UP:
|
||||
return 'end'
|
||||
event_type = property(_event_type)
|
||||
|
||||
def SetWindowLong_WndProc_wrapper_generator(func):
|
||||
def _closure(hWnd, wndProc):
|
||||
oldAddr = func(hWnd, GWL_WNDPROC, cast(wndProc, c_void_p).value)
|
||||
return cast(c_void_p(oldAddr), WNDPROC)
|
||||
|
||||
return _closure
|
||||
|
||||
try:
|
||||
LONG_PTR = c_longlong
|
||||
windll.user32.SetWindowLongPtrW.restype = LONG_PTR
|
||||
windll.user32.SetWindowLongPtrW.argtypes = [HWND, c_int, LONG_PTR]
|
||||
SetWindowLong_WndProc_wrapper = \
|
||||
SetWindowLong_WndProc_wrapper_generator(
|
||||
windll.user32.SetWindowLongPtrW)
|
||||
except AttributeError:
|
||||
windll.user32.SetWindowLongW.restype = LONG
|
||||
windll.user32.SetWindowLongW.argtypes = [HWND, c_int, LONG]
|
||||
SetWindowLong_WndProc_wrapper = \
|
||||
SetWindowLong_WndProc_wrapper_generator(
|
||||
windll.user32.SetWindowLongW)
|
||||
|
||||
windll.user32.GetMessageExtraInfo.restype = LPARAM
|
||||
windll.user32.GetMessageExtraInfo.argtypes = []
|
||||
windll.user32.GetClientRect.restype = BOOL
|
||||
windll.user32.GetClientRect.argtypes = [HANDLE, POINTER(RECT_BASE)]
|
||||
windll.user32.GetWindowRect.restype = BOOL
|
||||
windll.user32.GetWindowRect.argtypes = [HANDLE, POINTER(RECT_BASE)]
|
||||
windll.user32.CallWindowProcW.restype = LRESULT
|
||||
windll.user32.CallWindowProcW.argtypes = [WNDPROC, HWND, UINT, WPARAM,
|
||||
LPARAM]
|
||||
windll.user32.GetActiveWindow.restype = HWND
|
||||
windll.user32.GetActiveWindow.argtypes = []
|
||||
windll.user32.RegisterTouchWindow.restype = BOOL
|
||||
windll.user32.RegisterTouchWindow.argtypes = [HWND, ULONG]
|
||||
windll.user32.UnregisterTouchWindow.restype = BOOL
|
||||
windll.user32.UnregisterTouchWindow.argtypes = [HWND]
|
||||
windll.user32.GetTouchInputInfo.restype = BOOL
|
||||
windll.user32.GetTouchInputInfo.argtypes = [HANDLE, UINT,
|
||||
POINTER(TOUCHINPUT), c_int]
|
||||
windll.user32.GetSystemMetrics.restype = c_int
|
||||
windll.user32.GetSystemMetrics.argtypes = [c_int]
|
||||
|
||||
windll.user32.ClientToScreen.restype = BOOL
|
||||
windll.user32.ClientToScreen.argtypes = [HWND, POINTER(POINT)]
|
||||
|
||||
try:
|
||||
windll.user32.GetDpiForWindow.restype = UINT
|
||||
windll.user32.GetDpiForWindow.argtypes = [HWND]
|
||||
except AttributeError:
|
||||
pass
|
||||
Reference in New Issue
Block a user