mirror of
https://github.com/go-vgo/robotgo.git
synced 2025-06-01 14:43:55 +00:00
update key code style
This commit is contained in:
parent
4ac4864a61
commit
50f8df44b3
108
key/keycode_c.h
108
key/keycode_c.h
@ -62,74 +62,74 @@ struct XSpecialCharacterMapping XSpecialCharacterTable[] = {
|
||||
|
||||
#endif
|
||||
|
||||
MMKeyCode keyCodeForChar(const char c)
|
||||
{
|
||||
#if defined(IS_MACOSX)
|
||||
/* OS X does not appear to have a built-in function for this, so instead we
|
||||
* have to write our own. */
|
||||
static CFMutableDictionaryRef charToCodeDict = NULL;
|
||||
CGKeyCode code;
|
||||
UniChar character = c;
|
||||
CFStringRef charStr = NULL;
|
||||
MMKeyCode keyCodeForChar(const char c){
|
||||
#if defined(IS_MACOSX)
|
||||
/* OS X does not appear to have a built-in function for this, so instead we
|
||||
* have to write our own. */
|
||||
static CFMutableDictionaryRef charToCodeDict = NULL;
|
||||
CGKeyCode code;
|
||||
UniChar character = c;
|
||||
CFStringRef charStr = NULL;
|
||||
|
||||
/* Generate table of keycodes and characters. */
|
||||
if (charToCodeDict == NULL) {
|
||||
size_t i;
|
||||
charToCodeDict = CFDictionaryCreateMutable(kCFAllocatorDefault,
|
||||
128,
|
||||
&kCFCopyStringDictionaryKeyCallBacks,
|
||||
NULL);
|
||||
if (charToCodeDict == NULL) return UINT16_MAX;
|
||||
/* Generate table of keycodes and characters. */
|
||||
if (charToCodeDict == NULL) {
|
||||
size_t i;
|
||||
charToCodeDict = CFDictionaryCreateMutable(kCFAllocatorDefault,
|
||||
128,
|
||||
&kCFCopyStringDictionaryKeyCallBacks,
|
||||
NULL);
|
||||
if (charToCodeDict == NULL) return UINT16_MAX;
|
||||
|
||||
/* Loop through every keycode (0 - 127) to find its current mapping. */
|
||||
for (i = 0; i < 128; ++i) {
|
||||
CFStringRef string = createStringForKey((CGKeyCode)i);
|
||||
if (string != NULL) {
|
||||
CFDictionaryAddValue(charToCodeDict, string, (const void *)i);
|
||||
CFRelease(string);
|
||||
/* Loop through every keycode (0 - 127) to find its current mapping. */
|
||||
for (i = 0; i < 128; ++i) {
|
||||
CFStringRef string = createStringForKey((CGKeyCode)i);
|
||||
if (string != NULL) {
|
||||
CFDictionaryAddValue(charToCodeDict, string, (const void *)i);
|
||||
CFRelease(string);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
charStr = CFStringCreateWithCharacters(kCFAllocatorDefault, &character, 1);
|
||||
charStr = CFStringCreateWithCharacters(kCFAllocatorDefault, &character, 1);
|
||||
|
||||
/* Our values may be NULL (0), so we need to use this function. */
|
||||
if (!CFDictionaryGetValueIfPresent(charToCodeDict, charStr,
|
||||
(const void **)&code)) {
|
||||
code = UINT16_MAX; /* Error */
|
||||
}
|
||||
/* Our values may be NULL (0), so we need to use this function. */
|
||||
if (!CFDictionaryGetValueIfPresent(charToCodeDict, charStr,
|
||||
(const void **)&code)) {
|
||||
code = UINT16_MAX; /* Error */
|
||||
}
|
||||
|
||||
CFRelease(charStr);
|
||||
return (MMKeyCode)code;
|
||||
#elif defined(IS_WINDOWS)
|
||||
return VkKeyScan(c);
|
||||
#elif defined(USE_X11)
|
||||
MMKeyCode code;
|
||||
CFRelease(charStr);
|
||||
return (MMKeyCode)code;
|
||||
#elif defined(IS_WINDOWS)
|
||||
return VkKeyScan(c);
|
||||
#elif defined(USE_X11)
|
||||
MMKeyCode code;
|
||||
|
||||
char buf[2];
|
||||
buf[0] = c;
|
||||
buf[1] = '\0';
|
||||
char buf[2];
|
||||
buf[0] = c;
|
||||
buf[1] = '\0';
|
||||
|
||||
code = XStringToKeysym(buf);
|
||||
if (code == NoSymbol) {
|
||||
/* Some special keys are apparently not handled properly by
|
||||
* XStringToKeysym() on some systems, so search for them instead in our
|
||||
* mapping table. */
|
||||
size_t i;
|
||||
const size_t specialCharacterCount =
|
||||
sizeof(XSpecialCharacterTable) / sizeof(XSpecialCharacterTable[0]);
|
||||
for (i = 0; i < specialCharacterCount; ++i) {
|
||||
if (c == XSpecialCharacterTable[i].name) {
|
||||
code = XSpecialCharacterTable[i].code;
|
||||
break;
|
||||
code = XStringToKeysym(buf);
|
||||
if (code == NoSymbol) {
|
||||
/* Some special keys are apparently not handled properly by
|
||||
* XStringToKeysym() on some systems, so search for them instead in our
|
||||
* mapping table. */
|
||||
size_t i;
|
||||
const size_t specialCharacterCount =
|
||||
sizeof(XSpecialCharacterTable) / sizeof(XSpecialCharacterTable[0]);
|
||||
for (i = 0; i < specialCharacterCount; ++i) {
|
||||
if (c == XSpecialCharacterTable[i].name) {
|
||||
code = XSpecialCharacterTable[i].code;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return code;
|
||||
#endif
|
||||
return code;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#if defined(IS_MACOSX)
|
||||
|
||||
CFStringRef createStringForKey(CGKeyCode keyCode){
|
||||
|
@ -29,8 +29,7 @@
|
||||
#endif
|
||||
|
||||
#if defined(IS_MACOSX)
|
||||
static io_connect_t _getAuxiliaryKeyDriver(void)
|
||||
{
|
||||
static io_connect_t _getAuxiliaryKeyDriver(void){
|
||||
static mach_port_t sEventDrvrRef = 0;
|
||||
mach_port_t masterPort, service, iter;
|
||||
kern_return_t kr;
|
||||
@ -52,13 +51,11 @@ static io_connect_t _getAuxiliaryKeyDriver(void)
|
||||
#endif
|
||||
|
||||
#if defined(IS_WINDOWS)
|
||||
void win32KeyEvent(int key, MMKeyFlags flags)
|
||||
{
|
||||
void win32KeyEvent(int key, MMKeyFlags flags){
|
||||
int scan = MapVirtualKey(key & 0xff, MAPVK_VK_TO_VSC);
|
||||
|
||||
/* Set the scan code for extended keys */
|
||||
switch (key)
|
||||
{
|
||||
switch (key){
|
||||
case VK_RCONTROL:
|
||||
case VK_SNAPSHOT: /* Print Screen */
|
||||
case VK_RMENU: /* Right Alt / Alt Gr */
|
||||
@ -106,8 +103,7 @@ void win32KeyEvent(int key, MMKeyFlags flags)
|
||||
}
|
||||
#endif
|
||||
|
||||
void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags)
|
||||
{
|
||||
void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags){
|
||||
#if defined(IS_MACOSX)
|
||||
/* The media keys all have 1000 added to them to help us detect them. */
|
||||
if (code >= 1000) {
|
||||
@ -156,14 +152,12 @@ void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags)
|
||||
#endif
|
||||
}
|
||||
|
||||
void tapKeyCode(MMKeyCode code, MMKeyFlags flags)
|
||||
{
|
||||
void tapKeyCode(MMKeyCode code, MMKeyFlags flags){
|
||||
toggleKeyCode(code, true, flags);
|
||||
toggleKeyCode(code, false, flags);
|
||||
}
|
||||
|
||||
void toggleKey(char c, const bool down, MMKeyFlags flags)
|
||||
{
|
||||
void toggleKey(char c, const bool down, MMKeyFlags flags){
|
||||
MMKeyCode keyCode = keyCodeForChar(c);
|
||||
|
||||
//Prevent unused variable warning for Mac and Linux.
|
||||
@ -185,15 +179,13 @@ void toggleKey(char c, const bool down, MMKeyFlags flags)
|
||||
toggleKeyCode(keyCode, down, flags);
|
||||
}
|
||||
|
||||
void tapKey(char c, MMKeyFlags flags)
|
||||
{
|
||||
void tapKey(char c, MMKeyFlags flags){
|
||||
toggleKey(c, true, flags);
|
||||
toggleKey(c, false, flags);
|
||||
}
|
||||
|
||||
#if defined(IS_MACOSX)
|
||||
void toggleUnicode(UniChar ch, const bool down)
|
||||
{
|
||||
void toggleUnicode(UniChar ch, const bool down){
|
||||
/* This function relies on the convenient
|
||||
* CGEventKeyboardSetUnicodeString(), which allows us to not have to
|
||||
* convert characters to a keycode, but does not support adding modifier
|
||||
|
Loading…
Reference in New Issue
Block a user