diff options
| author | trustable-code <krauter.simon@arcor.de> | 2020-05-02 19:31:43 +0200 |
|---|---|---|
| committer | trustable-code <krauter.simon@arcor.de> | 2020-05-02 19:31:43 +0200 |
| commit | 3cd60917d261942dff845b3fd7c6fe81ccb82c48 (patch) | |
| tree | 6f10927d4169e5dcfd8ecbecafa898ac7b79c400 | |
| parent | 4480cd6b13edd9fa6e8f270ebd2ffd6cab8296c7 (diff) | |
| download | NiGui-3cd60917d261942dff845b3fd7c6fe81ccb82c48.tar.gz NiGui-3cd60917d261942dff845b3fd7c6fe81ccb82c48.zip | |
Add methods to get mouse position
| -rwxr-xr-x | src/nigui.nim | 6 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/gtk3.nim | 1 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/platform_impl.nim | 12 | ||||
| -rwxr-xr-x | src/nigui/private/windows/platform_impl.nim | 27 | ||||
| -rwxr-xr-x | src/nigui/private/windows/windows.nim | 1 |
5 files changed, 47 insertions, 0 deletions
diff --git a/src/nigui.nim b/src/nigui.nim index 96af6f4..82e6282 100755 --- a/src/nigui.nim +++ b/src/nigui.nim @@ -689,6 +689,9 @@ method clientHeight*(window: Window): int {.base.} method iconPath*(window: Window): string {.base.} method `iconPath=`*(window: Window, iconPath: string) {.base, locks: "unknown".} +method mousePosition*(window: Window): tuple[x, y: int] +## Returns the mouse pointer position relative to the given window + method closeClick*(window: Window) {.base.} method handleResizeEvent*(window: Window, event: ResizeEvent) {.base.} @@ -778,6 +781,9 @@ method wantedWidth*(control: Control): int {.base.} method wantedHeight*(control: Control): int {.base.} +method mousePosition*(control: Control): tuple[x, y: int] +## Returns the mouse pointer position relative to the given control + method focus*(control: Control) {.base.} method getTextLineWidth*(control: Control, text: string): int {.base, locks: "unknown".} diff --git a/src/nigui/private/gtk3/gtk3.nim b/src/nigui/private/gtk3/gtk3.nim index 67a0e23..5db784b 100755 --- a/src/nigui/private/gtk3/gtk3.nim +++ b/src/nigui/private/gtk3/gtk3.nim @@ -294,6 +294,7 @@ proc gtk_widget_is_focus*(widget: pointer): bool {.importc, libgtk3.} proc gtk_widget_realize*(widget: pointer) {.importc, libgtk3.} proc gtk_widget_draw*(widget, cr: pointer) {.importc, libgtk3.} proc gtk_widget_set_sensitive*(widget: pointer, sensitive: bool) {.importc, libgtk3.} +proc gtk_widget_get_pointer*(widget: pointer, x, y: var cint) {.importc, libgtk3.} proc gtk_container_add*(container, widget: pointer) {.importc, libgtk3.} proc gtk_container_remove*(container, widget: pointer) {.importc, libgtk3.} diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim index e2e23d5..cb15f2f 100755 --- a/src/nigui/private/gtk3/platform_impl.nim +++ b/src/nigui/private/gtk3/platform_impl.nim @@ -889,6 +889,12 @@ method `control=`(window: WindowImpl, control: Control) = procCall window.Window.`control=`(control) gtk_container_add(window.fInnerHandle, cast[ControlImpl](control).fHandle) +method mousePosition(window: Window): tuple[x, y: int] = + var x, y: cint + gtk_widget_get_pointer(cast[WindowImpl](window).fHandle, x, y) + result.x = x + result.y = y + method `iconPath=`(window: WindowImpl, iconPath: string) = procCall window.Window.`iconPath=`(iconPath) if not gtk_window_set_icon_from_file(window.fHandle, iconPath, nil): @@ -1258,6 +1264,12 @@ method pUpdateScrollBar(container: ContainerImpl) = yPolicy = GTK_POLICY_AUTOMATIC gtk_scrolled_window_set_policy(container.fScrollWndHandle, xPolicy, yPolicy) +method mousePosition(control: Control): tuple[x, y: int] = + var x, y: cint + gtk_widget_get_pointer(cast[ControlImpl](control).fHandle, x, y) + result.x = x + result.y = y + # ---------------------------------------------------------------------------------------- # Frame diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim index b0e23c4..c52d908 100755 --- a/src/nigui/private/windows/platform_impl.nim +++ b/src/nigui/private/windows/platform_impl.nim @@ -947,6 +947,20 @@ method `control=`(window: WindowImpl, control: Control) = procCall window.Window.`control=`(control) pSetParent(cast[ControlImpl](control).fHandle, window.fHandle) +method mousePosition(window: Window): tuple[x, y: int] = + var p: Point + if not GetCursorPos(p): + result.x = -1 + result.y = -1 + return + if not ScreenToClient(cast[WindowImpl](window).fHandle, p): + result.x = -1 + result.y = -1 + return + result.x = p.x + result.y = p.y + + method `iconPath=`(window: WindowImpl, iconPath: string) = procCall window.Window.`iconPath=`(iconPath) var bitmap: pointer @@ -1298,6 +1312,19 @@ proc pCustomControlWndProc(hWnd: pointer, uMsg: int32, wParam, lParam: pointer): return cast[pointer](true) result = CallWindowProcW(pCommonWndProc, hWnd, uMsg, wParam, lParam) +method mousePosition(control: Control): tuple[x, y: int] = + var p: Point + if not GetCursorPos(p): + result.x = -1 + result.y = -1 + return + if not ScreenToClient(cast[ControlImpl](control).fHandle, p): + result.x = -1 + result.y = -1 + return + result.x = p.x + result.y = p.y + # ---------------------------------------------------------------------------------------- # Container diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim index 26324f8..2c4e09c 100755 --- a/src/nigui/private/windows/windows.nim +++ b/src/nigui/private/windows/windows.nim @@ -467,6 +467,7 @@ proc SetClipboardData*(uFormat: int32, hMem: pointer): pointer {.importc, libUse proc EmptyClipboard*(): bool {.importc, libUser32.} proc MapVirtualKeyW*(uCode, uMapType: int32): int32 {.importc, libUser32.} proc GetCursorPos*(lpPoint: var Point): bool {.importc, libUser32.} +proc ScreenToClient*(hWnd: pointer, lpPoint: var Point): bool {.importc, libUser32.} proc MonitorFromPoint*(pt: Point, dwFlags: int32): pointer {.importc, libUser32.} type GetDpiForWindowType* = proc(hWnd: pointer): int32 {.gcsafe, stdcall.} # not available on Windows 7 |
