shiny/driver/windriver: convert remaining C into Go
Change-Id: I3f5ba4205f27dfde685fd36c35398a5ed6d146a5
Reviewed-on: https://go-review.googlesource.com/14573
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/shiny/driver/windriver/syscall_windows.go b/shiny/driver/windriver/syscall_windows.go
index 5c50fd3..aabb60a 100644
--- a/shiny/driver/windriver/syscall_windows.go
+++ b/shiny/driver/windriver/syscall_windows.go
@@ -127,6 +127,14 @@
)
const (
+ _VK_SHIFT = 16
+ _VK_CONTROL = 17
+ _VK_MENU = 18
+ _VK_LWIN = 0x5B
+ _VK_RWIN = 0x5C
+)
+
+const (
_COLOR_BTNFACE = 15
)
@@ -196,3 +204,4 @@
//sys _CreateSolidBrush(color _COLORREF) (brush syscall.Handle, err error) = gdi32.CreateSolidBrush
//sys _FillRect(dc syscall.Handle, rc *_RECT, brush syscall.Handle) (err error) = user32.FillRect
//sys _DeleteObject(object syscall.Handle) (err error) = gdi32.DeleteObject
+//sys _GetKeyState(virtkey int32) (keystatus int16) = user32.GetKeyState
diff --git a/shiny/driver/windriver/window.go b/shiny/driver/windriver/window.go
index 9406d0e..438bad9 100644
--- a/shiny/driver/windriver/window.go
+++ b/shiny/driver/windriver/window.go
@@ -6,9 +6,6 @@
package windriver
-// #include "windriver.h"
-import "C"
-
import (
"image"
"image/color"
@@ -161,24 +158,24 @@
windowsLock.Unlock()
switch uMsg {
- case C.WM_MOUSEMOVE:
+ case _WM_MOUSEMOVE:
dir = mouse.DirNone
- case C.WM_LBUTTONDOWN, C.WM_MBUTTONDOWN, C.WM_RBUTTONDOWN:
+ case _WM_LBUTTONDOWN, _WM_MBUTTONDOWN, _WM_RBUTTONDOWN:
dir = mouse.DirPress
- case C.WM_LBUTTONUP, C.WM_MBUTTONUP, C.WM_RBUTTONUP:
+ case _WM_LBUTTONUP, _WM_MBUTTONUP, _WM_RBUTTONUP:
dir = mouse.DirRelease
default:
panic("sendMouseEvent() called on non-mouse message")
}
switch uMsg {
- case C.WM_MOUSEMOVE:
+ case _WM_MOUSEMOVE:
button = mouse.ButtonNone
- case C.WM_LBUTTONDOWN, C.WM_LBUTTONUP:
+ case _WM_LBUTTONDOWN, _WM_LBUTTONUP:
button = mouse.ButtonLeft
- case C.WM_MBUTTONDOWN, C.WM_MBUTTONUP:
+ case _WM_MBUTTONDOWN, _WM_MBUTTONUP:
button = mouse.ButtonMiddle
- case C.WM_RBUTTONDOWN, C.WM_RBUTTONUP:
+ case _WM_RBUTTONDOWN, _WM_RBUTTONUP:
button = mouse.ButtonRight
}
// TODO(andlabs): mouse wheel
@@ -194,21 +191,21 @@
// Precondition: this is called in immediate response to the message that triggered the event (so not after w.Send).
func keyModifiers() (m key.Modifiers) {
- down := func(x C.int) bool {
+ down := func(x int32) bool {
// GetKeyState gets the key state at the time of the message, so this is what we want.
- return C.GetKeyState(x)&0x80 != 0
+ return _GetKeyState(x)&0x80 != 0
}
- if down(C.VK_CONTROL) {
+ if down(_VK_CONTROL) {
m |= key.ModControl
}
- if down(C.VK_MENU) {
+ if down(_VK_MENU) {
m |= key.ModAlt
}
- if down(C.VK_SHIFT) {
+ if down(_VK_SHIFT) {
m |= key.ModShift
}
- if down(C.VK_LWIN) || down(C.VK_RWIN) {
+ if down(_VK_LWIN) || down(_VK_RWIN) {
m |= key.ModMeta
}
return m
diff --git a/shiny/driver/windriver/windriver.go b/shiny/driver/windriver/windriver.go
index 4d1942b..f488950 100644
--- a/shiny/driver/windriver/windriver.go
+++ b/shiny/driver/windriver/windriver.go
@@ -6,10 +6,6 @@
package windriver
-// #cgo LDFLAGS: -lgdi32 -lmsimg32
-// #include "windriver.h"
-import "C"
-
import (
"runtime"
"syscall"
diff --git a/shiny/driver/windriver/windriver.h b/shiny/driver/windriver/windriver.h
deleted file mode 100644
index b0057a7..0000000
--- a/shiny/driver/windriver/windriver.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build windows
-
-#ifndef __SHINY_WINDRIVER_H__
-#define __SHINY_WINDRIVER_H__
-
-#define UNICODE
-#define _UNICODE
-#define STRICT
-#define STRICT_TYPED_ITEMIDS
-#define CINTERFACE
-#define COBJMACROS
-// see https://github.com/golang/go/issues/9916#issuecomment-74812211
-#define INITGUID
-// get Windows version right; right now Windows XP
-#define WINVER 0x0501
-#define _WIN32_WINNT 0x0501
-#define _WIN32_WINDOWS 0x0501 /* according to Microsoft's winperf.h */
-#define _WIN32_IE 0x0600 /* according to Microsoft's sdkddkver.h */
-#define NTDDI_VERSION 0x05010000 /* according to Microsoft's sdkddkver.h */
-#include <windows.h>
-#include <windowsx.h>
-#include <stdint.h>
-
-// see http://blogs.msdn.com/b/oldnewthing/archive/2004/10/25/247180.aspx
-// this will work on MinGW too
-EXTERN_C IMAGE_DOS_HEADER __ImageBase;
-#define thishInstance ((HINSTANCE) (&__ImageBase))
-
-#define firstClassMessage (WM_USER + 0x40)
-
-#endif
diff --git a/shiny/driver/windriver/zsyscall_windows.go b/shiny/driver/windriver/zsyscall_windows.go
index abbf3a1..fee0750 100755
--- a/shiny/driver/windriver/zsyscall_windows.go
+++ b/shiny/driver/windriver/zsyscall_windows.go
@@ -34,6 +34,7 @@
procCreateSolidBrush = modgdi32.NewProc("CreateSolidBrush")
procFillRect = moduser32.NewProc("FillRect")
procDeleteObject = modgdi32.NewProc("DeleteObject")
+ procGetKeyState = moduser32.NewProc("GetKeyState")
)
func _GetMessage(msg *_MSG, hwnd syscall.Handle, msgfiltermin uint32, msgfiltermax uint32) (ret int32, err error) {
@@ -279,3 +280,9 @@
}
return
}
+
+func _GetKeyState(virtkey int32) (keystatus int16) {
+ r0, _, _ := syscall.Syscall(procGetKeyState.Addr(), 1, uintptr(virtkey), 0, 0)
+ keystatus = int16(r0)
+ return
+}