energy/cef/misc-functions_windows.go
2023-06-20 16:56:24 +08:00

143 lines
4.4 KiB
Go

//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
// Licensed under Apache License Version 2.0, January 2004
//
// https://www.apache.org/licenses/LICENSE-2.0
//
//----------------------------------------
//go:build windows
// 函数工具 - windows
package cef
import (
"github.com/energye/energy/v2/cef/winapi"
"github.com/energye/energy/v2/consts"
"github.com/energye/energy/v2/types"
)
func CefIsKeyDown(wparam types.WPARAM) bool {
return winapi.WinGetKeyState(types.Int32(wparam)) < 0
}
func CefIsKeyToggled(wparam types.WPARAM) bool {
return (int16(winapi.WinGetKeyState(types.Int32(wparam))) & 0x1) != 0
}
func GetCefMouseModifiersByWPARAM(wparam types.WPARAM) (result consts.TCefEventFlags) {
result = consts.EVENTFLAG_NONE
if (wparam & winapi.MK_CONTROL) != 0 {
result = result | consts.EVENTFLAG_CONTROL_DOWN
}
if (wparam & winapi.MK_SHIFT) != 0 {
result = result | consts.EVENTFLAG_SHIFT_DOWN
}
if (wparam & winapi.MK_LBUTTON) != 0 {
result = result | consts.EVENTFLAG_LEFT_MOUSE_BUTTON
}
if (wparam & winapi.MK_MBUTTON) != 0 {
result = result | consts.EVENTFLAG_MIDDLE_MOUSE_BUTTON
}
if (wparam & winapi.MK_RBUTTON) != 0 {
result = result | consts.EVENTFLAG_RIGHT_MOUSE_BUTTON
}
if CefIsKeyDown(winapi.VK_MENU) {
result = result | consts.EVENTFLAG_ALT_DOWN
}
if CefIsKeyToggled(winapi.VK_NUMLOCK) {
result = result | consts.EVENTFLAG_NUM_LOCK_ON
}
if CefIsKeyToggled(winapi.VK_CAPITAL) {
result = result | consts.EVENTFLAG_CAPS_LOCK_ON
}
return
}
func GetCefMouseModifiers() (result consts.TCefEventFlags) {
result = consts.EVENTFLAG_NONE
if CefIsKeyDown(winapi.MK_CONTROL) {
result = result | consts.EVENTFLAG_CONTROL_DOWN
}
if CefIsKeyDown(winapi.MK_SHIFT) {
result = result | consts.EVENTFLAG_SHIFT_DOWN
}
if CefIsKeyDown(winapi.MK_LBUTTON) {
result = result | consts.EVENTFLAG_LEFT_MOUSE_BUTTON
}
if CefIsKeyDown(winapi.MK_MBUTTON) {
result = result | consts.EVENTFLAG_MIDDLE_MOUSE_BUTTON
}
if CefIsKeyDown(winapi.MK_RBUTTON) {
result = result | consts.EVENTFLAG_RIGHT_MOUSE_BUTTON
}
if CefIsKeyDown(winapi.VK_MENU) {
result = result | consts.EVENTFLAG_ALT_DOWN
}
if CefIsKeyToggled(winapi.VK_NUMLOCK) {
result = result | consts.EVENTFLAG_NUM_LOCK_ON
}
if CefIsKeyToggled(winapi.VK_CAPITAL) {
result = result | consts.EVENTFLAG_CAPS_LOCK_ON
}
return
}
func GetCefKeyboardModifiers(aWparam types.WPARAM, aLparam types.LPARAM) (result consts.TCefEventFlags) {
result = consts.EVENTFLAG_NONE
if CefIsKeyDown(winapi.VK_SHIFT) {
result = result | consts.EVENTFLAG_SHIFT_DOWN
}
if CefIsKeyDown(winapi.VK_CONTROL) {
result = result | consts.EVENTFLAG_CONTROL_DOWN
}
if CefIsKeyDown(winapi.VK_MENU) {
result = result | consts.EVENTFLAG_ALT_DOWN
}
if CefIsKeyToggled(winapi.VK_NUMLOCK) {
result = result | consts.EVENTFLAG_NUM_LOCK_ON
}
if CefIsKeyToggled(winapi.VK_CAPITAL) {
result = result | consts.EVENTFLAG_CAPS_LOCK_ON
}
switch aWparam {
case winapi.VK_RETURN:
if ((aLparam >> 16) & winapi.KF_EXTENDED) != 0 {
result = result | consts.EVENTFLAG_IS_KEY_PAD
}
case winapi.VK_INSERT, winapi.VK_DELETE, winapi.VK_HOME, winapi.VK_END, winapi.VK_PRIOR, winapi.VK_NEXT, winapi.VK_UP, winapi.VK_DOWN, winapi.VK_LEFT, winapi.VK_RIGHT:
if ((aLparam >> 16) & winapi.KF_EXTENDED) == 0 {
result = result | consts.EVENTFLAG_IS_KEY_PAD
}
case winapi.VK_NUMLOCK, winapi.VK_NUMPAD0, winapi.VK_NUMPAD1, winapi.VK_NUMPAD2, winapi.VK_NUMPAD3, winapi.VK_NUMPAD4, winapi.VK_NUMPAD5, winapi.VK_NUMPAD6, winapi.VK_NUMPAD7,
winapi.VK_NUMPAD8, winapi.VK_NUMPAD9, winapi.VK_DIVIDE, winapi.VK_MULTIPLY, winapi.VK_SUBTRACT, winapi.VK_ADD, winapi.VK_DECIMAL, winapi.VK_CLEAR:
result = result | consts.EVENTFLAG_IS_KEY_PAD
case winapi.VK_SHIFT:
if CefIsKeyDown(winapi.VK_LSHIFT) {
result = result | consts.EVENTFLAG_IS_LEFT
} else if CefIsKeyDown(winapi.VK_RSHIFT) {
result = result | consts.EVENTFLAG_IS_RIGHT
}
case winapi.VK_CONTROL:
if CefIsKeyDown(winapi.VK_LCONTROL) {
result = result | consts.EVENTFLAG_IS_LEFT
} else if CefIsKeyDown(winapi.VK_RCONTROL) {
result = result | consts.EVENTFLAG_IS_RIGHT
}
case winapi.VK_MENU:
if CefIsKeyDown(winapi.VK_LMENU) {
result = result | consts.EVENTFLAG_IS_LEFT
} else if CefIsKeyDown(winapi.VK_RMENU) {
result = result | consts.EVENTFLAG_IS_RIGHT
}
case winapi.VK_LWIN:
result = result | consts.EVENTFLAG_IS_LEFT
case winapi.VK_RWIN:
result = result | consts.EVENTFLAG_IS_RIGHT
}
return
}