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
+}