mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 11:48:55 +01:00
internal/glfwwin: remove GetProp and SetProp
GetProp and SetProp forced a risky usage of pointers.
This commit is contained in:
parent
ec2df98c70
commit
0d7062335e
@ -799,7 +799,6 @@ var (
|
|||||||
procGetLayeredWindowAttributes = user32.NewProc("GetLayeredWindowAttributes")
|
procGetLayeredWindowAttributes = user32.NewProc("GetLayeredWindowAttributes")
|
||||||
procGetMessageTime = user32.NewProc("GetMessageTime")
|
procGetMessageTime = user32.NewProc("GetMessageTime")
|
||||||
procGetMonitorInfoW = user32.NewProc("GetMonitorInfoW")
|
procGetMonitorInfoW = user32.NewProc("GetMonitorInfoW")
|
||||||
procGetPropW = user32.NewProc("GetPropW")
|
|
||||||
procGetRawInputData = user32.NewProc("GetRawInputData")
|
procGetRawInputData = user32.NewProc("GetRawInputData")
|
||||||
procGetSystemMetrics = user32.NewProc("GetSystemMetrics")
|
procGetSystemMetrics = user32.NewProc("GetSystemMetrics")
|
||||||
procGetSystemMetricsForDpi = user32.NewProc("GetSystemMetricsForDpi")
|
procGetSystemMetricsForDpi = user32.NewProc("GetSystemMetricsForDpi")
|
||||||
@ -835,7 +834,6 @@ var (
|
|||||||
procSetLayeredWindowAttributes = user32.NewProc("procSetLayeredWindowAttributes")
|
procSetLayeredWindowAttributes = user32.NewProc("procSetLayeredWindowAttributes")
|
||||||
procSetProcessDPIAware = user32.NewProc("SetProcessDPIAware")
|
procSetProcessDPIAware = user32.NewProc("SetProcessDPIAware")
|
||||||
procSetProcessDpiAwarenessContext = user32.NewProc("SetProcessDpiAwarenessContext")
|
procSetProcessDpiAwarenessContext = user32.NewProc("SetProcessDpiAwarenessContext")
|
||||||
procSetPropW = user32.NewProc("SetPropW")
|
|
||||||
procSetWindowLongW = user32.NewProc("SetWindowLongW")
|
procSetWindowLongW = user32.NewProc("SetWindowLongW")
|
||||||
procSetWindowPlacement = user32.NewProc("SetWindowPlacement")
|
procSetWindowPlacement = user32.NewProc("SetWindowPlacement")
|
||||||
procSetWindowPos = user32.NewProc("SetWindowPos")
|
procSetWindowPos = user32.NewProc("SetWindowPos")
|
||||||
@ -1358,22 +1356,6 @@ func _GetDpiForMonitor(hmonitor _HMONITOR, dpiType _MONITOR_DPI_TYPE) (dpiX, dpi
|
|||||||
return dpiX, dpiY, nil
|
return dpiX, dpiY, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func _GetPropW(hWnd windows.HWND, str string) windows.Handle {
|
|
||||||
var lpString *uint16
|
|
||||||
if str != "" {
|
|
||||||
var err error
|
|
||||||
lpString, err = windows.UTF16PtrFromString(str)
|
|
||||||
if err != nil {
|
|
||||||
panic("glfwwin: str must not include a NUL character")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
r, _, _ := procGetPropW.Call(uintptr(hWnd), uintptr(unsafe.Pointer(lpString)))
|
|
||||||
runtime.KeepAlive(lpString)
|
|
||||||
|
|
||||||
return windows.Handle(r)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _GetRawInputData(hRawInput _HRAWINPUT, uiCommand uint32, pData unsafe.Pointer, pcbSize *uint32) (uint32, error) {
|
func _GetRawInputData(hRawInput _HRAWINPUT, uiCommand uint32, pData unsafe.Pointer, pcbSize *uint32) (uint32, error) {
|
||||||
r, _, e := procGetRawInputData.Call(uintptr(hRawInput), uintptr(uiCommand), uintptr(pData), uintptr(unsafe.Pointer(pcbSize)), unsafe.Sizeof(_RAWINPUTHEADER{}))
|
r, _, e := procGetRawInputData.Call(uintptr(hRawInput), uintptr(uiCommand), uintptr(pData), uintptr(unsafe.Pointer(pcbSize)), unsafe.Sizeof(_RAWINPUTHEADER{}))
|
||||||
if uint32(r) == (1<<32)-1 {
|
if uint32(r) == (1<<32)-1 {
|
||||||
@ -1691,25 +1673,6 @@ func _SetProcessDpiAwarenessContext_Available() bool {
|
|||||||
return procSetProcessDpiAwarenessContext.Find() == nil
|
return procSetProcessDpiAwarenessContext.Find() == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func _SetPropW(hWnd windows.HWND, str string, hData windows.Handle) error {
|
|
||||||
var lpString *uint16
|
|
||||||
if str != "" {
|
|
||||||
var err error
|
|
||||||
lpString, err = windows.UTF16PtrFromString(str)
|
|
||||||
if err != nil {
|
|
||||||
panic("glfwwin: str must not include a NUL character")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
r, _, e := procSetPropW.Call(uintptr(hWnd), uintptr(unsafe.Pointer(lpString)), uintptr(hData))
|
|
||||||
runtime.KeepAlive(lpString)
|
|
||||||
|
|
||||||
if int32(r) == 0 {
|
|
||||||
return fmt.Errorf("glfwwin: SetPropW failed: %w", e)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func _SetThreadExecutionState(esFlags _EXECUTION_STATE) _EXECUTION_STATE {
|
func _SetThreadExecutionState(esFlags _EXECUTION_STATE) _EXECUTION_STATE {
|
||||||
r, _, _ := procSetThreadExecutionState.Call(uintptr(esFlags))
|
r, _, _ := procSetThreadExecutionState.Call(uintptr(esFlags))
|
||||||
return _EXECUTION_STATE(r)
|
return _EXECUTION_STATE(r)
|
||||||
|
@ -580,7 +580,7 @@ func (w *Window) maximizeWindowManually() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func windowProc(hWnd windows.HWND, uMsg uint32, wParam _WPARAM, lParam _LPARAM) uintptr /*_LRESULT*/ {
|
func windowProc(hWnd windows.HWND, uMsg uint32, wParam _WPARAM, lParam _LPARAM) uintptr /*_LRESULT*/ {
|
||||||
window := (*Window)(unsafe.Pointer(_GetPropW(hWnd, "GLFW")))
|
window := handleToWindow[hWnd]
|
||||||
if window == nil {
|
if window == nil {
|
||||||
// This is the message handling for the hidden helper window
|
// This is the message handling for the hidden helper window
|
||||||
// and for a regular window during its initial creation
|
// and for a regular window during its initial creation
|
||||||
@ -1180,6 +1180,8 @@ func windowProc(hWnd windows.HWND, uMsg uint32, wParam _WPARAM, lParam _LPARAM)
|
|||||||
|
|
||||||
var windowProcPtr = windows.NewCallbackCDecl(windowProc)
|
var windowProcPtr = windows.NewCallbackCDecl(windowProc)
|
||||||
|
|
||||||
|
var handleToWindow = map[windows.HWND]*Window{}
|
||||||
|
|
||||||
func (w *Window) createNativeWindow(wndconfig *wndconfig, fbconfig *fbconfig) error {
|
func (w *Window) createNativeWindow(wndconfig *wndconfig, fbconfig *fbconfig) error {
|
||||||
style := w.getWindowStyle()
|
style := w.getWindowStyle()
|
||||||
exStyle := w.getWindowExStyle()
|
exStyle := w.getWindowExStyle()
|
||||||
@ -1225,9 +1227,7 @@ func (w *Window) createNativeWindow(wndconfig *wndconfig, fbconfig *fbconfig) er
|
|||||||
}
|
}
|
||||||
w.win32.handle = h
|
w.win32.handle = h
|
||||||
|
|
||||||
if err := _SetPropW(w.win32.handle, "GLFW", windows.Handle(unsafe.Pointer(w))); err != nil {
|
handleToWindow[w.win32.handle] = w
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if _IsWindows7OrGreater() {
|
if _IsWindows7OrGreater() {
|
||||||
if err := _ChangeWindowMessageFilterEx(w.win32.handle, _WM_DROPFILES, _MSGFLT_ALLOW, nil); err != nil {
|
if err := _ChangeWindowMessageFilterEx(w.win32.handle, _WM_DROPFILES, _MSGFLT_ALLOW, nil); err != nil {
|
||||||
@ -1432,6 +1432,7 @@ func (w *Window) platformDestroyWindow() error {
|
|||||||
if err := _DestroyWindow(w.win32.handle); err != nil {
|
if err := _DestroyWindow(w.win32.handle); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
delete(handleToWindow, w.win32.handle)
|
||||||
w.win32.handle = 0
|
w.win32.handle = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1998,7 +1999,7 @@ func platformPollEvents() error {
|
|||||||
// because they change the input focus
|
// because they change the input focus
|
||||||
// NOTE: The other half of this is in the WM_*KEY* handler in windowProc
|
// NOTE: The other half of this is in the WM_*KEY* handler in windowProc
|
||||||
if handle := _GetActiveWindow(); handle != 0 {
|
if handle := _GetActiveWindow(); handle != 0 {
|
||||||
if window := (*Window)(unsafe.Pointer(_GetPropW(handle, "GLFW"))); window != nil {
|
if window := handleToWindow[handle]; window != nil {
|
||||||
keys := [...]struct {
|
keys := [...]struct {
|
||||||
VK int
|
VK int
|
||||||
Key Key
|
Key Key
|
||||||
|
Loading…
Reference in New Issue
Block a user