Changeset 236427 in webkit


Ignore:
Timestamp:
Sep 24, 2018 1:47:39 PM (6 years ago)
Author:
dbates@webkit.org
Message:

Separate Mac and iOS implementation of windowsKeyCodeForCharCode()
https://bugs.webkit.org/show_bug.cgi?id=189898

Reviewed by Tim Horton.

Extract the Mac and iOS implementations into a windowsKeyCodeForCharCode() defined in file
KeyEventMac.mm and file KeyEventIOS, respectively.

Mac and iOS have significant differences in how they represent function keys. It is not worthwhile
to share windowsKeyCodeForCharCode() between them given these differences. On Mac function keys
are represented by a char code in the range 0xF700-0xF8FF. On iOS these keys may not have a unique
char code (e.g. F1 = 0x10 = F10) and must be identified either by special string (e.g. UIKeyInputUpArrow)
or key code.

  • platform/cocoa/KeyEventCocoa.mm:

(WebCore::windowsKeyCodeForCharCode): Deleted.

  • platform/ios/KeyEventIOS.mm:

(WebCore::windowsKeyCodeForCharCode): Added. Remove the handling of NS*FunctionKey char codes
as function keys are not represented using them as of iOS 12.

  • platform/mac/KeyEventMac.mm:

(WebCore::windowsKeyCodeForCharCode): Added.

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r236424 r236427  
     12018-09-24  Daniel Bates  <dabates@apple.com>
     2
     3        Separate Mac and iOS implementation of windowsKeyCodeForCharCode()
     4        https://bugs.webkit.org/show_bug.cgi?id=189898
     5
     6        Reviewed by Tim Horton.
     7
     8        Extract the Mac and iOS implementations into a windowsKeyCodeForCharCode() defined in file
     9        KeyEventMac.mm and file KeyEventIOS, respectively.
     10
     11        Mac and iOS have significant differences in how they represent function keys. It is not worthwhile
     12        to share windowsKeyCodeForCharCode() between them given these differences. On Mac function keys
     13        are represented by a char code in the range 0xF700-0xF8FF. On iOS these keys may not have a unique
     14        char code (e.g. F1 = 0x10 = F10) and must be identified either by special string (e.g. UIKeyInputUpArrow)
     15        or key code.
     16
     17        * platform/cocoa/KeyEventCocoa.mm:
     18        (WebCore::windowsKeyCodeForCharCode): Deleted.
     19        * platform/ios/KeyEventIOS.mm:
     20        (WebCore::windowsKeyCodeForCharCode): Added. Remove the handling of NS*FunctionKey char codes
     21        as function keys are not represented using them as of iOS 12.
     22        * platform/mac/KeyEventMac.mm:
     23        (WebCore::windowsKeyCodeForCharCode): Added.
     24
    1252018-09-21  Simon Fraser  <simon.fraser@apple.com>
    226
  • trunk/Source/WebCore/platform/cocoa/KeyEventCocoa.mm

    r236417 r236427  
    485485}
    486486
    487 int windowsKeyCodeForCharCode(unichar charCode)
    488 {
    489     switch (charCode) {
    490 #if PLATFORM(IOS)
    491         case 8: case 0x7F: return VK_BACK;
    492         case 9: return VK_TAB;
    493         case 0xD: case 3: return VK_RETURN;
    494         case 0x1B: return VK_ESCAPE;
    495         case ' ': return VK_SPACE;
    496         case NSHomeFunctionKey: return VK_HOME;
    497         case NSEndFunctionKey: return VK_END;
    498         case NSPageUpFunctionKey: return VK_PRIOR;
    499         case NSPageDownFunctionKey: return VK_NEXT;
    500         case NSUpArrowFunctionKey: return VK_UP;
    501         case NSDownArrowFunctionKey: return VK_DOWN;
    502         case NSLeftArrowFunctionKey: return VK_LEFT;
    503         case NSRightArrowFunctionKey: return VK_RIGHT;
    504         case NSDeleteFunctionKey: return VK_DELETE;
    505 
    506         case '0': case ')': return VK_0;
    507         case '1': case '!': return VK_1;
    508         case '2': case '@': return VK_2;
    509         case '3': case '#': return VK_3;
    510         case '4': case '$': return VK_4;
    511         case '5': case '%': return VK_5;
    512         case '6': case '^': return VK_6;
    513         case '7': case '&': return VK_7;
    514         case '8': case '*': return VK_8;
    515         case '9': case '(': return VK_9;
    516 #endif
    517         case 'a': case 'A': return VK_A;
    518         case 'b': case 'B': return VK_B;
    519         case 'c': case 'C': return VK_C;
    520         case 'd': case 'D': return VK_D;
    521         case 'e': case 'E': return VK_E;
    522         case 'f': case 'F': return VK_F;
    523         case 'g': case 'G': return VK_G;
    524         case 'h': case 'H': return VK_H;
    525         case 'i': case 'I': return VK_I;
    526         case 'j': case 'J': return VK_J;
    527         case 'k': case 'K': return VK_K;
    528         case 'l': case 'L': return VK_L;
    529         case 'm': case 'M': return VK_M;
    530         case 'n': case 'N': return VK_N;
    531         case 'o': case 'O': return VK_O;
    532         case 'p': case 'P': return VK_P;
    533         case 'q': case 'Q': return VK_Q;
    534         case 'r': case 'R': return VK_R;
    535         case 's': case 'S': return VK_S;
    536         case 't': case 'T': return VK_T;
    537         case 'u': case 'U': return VK_U;
    538         case 'v': case 'V': return VK_V;
    539         case 'w': case 'W': return VK_W;
    540         case 'x': case 'X': return VK_X;
    541         case 'y': case 'Y': return VK_Y;
    542         case 'z': case 'Z': return VK_Z;
    543 
    544         // AppKit generates Unicode PUA character codes for some function keys; using these when key code is not known.
    545         case NSPauseFunctionKey: return VK_PAUSE;
    546         case NSSelectFunctionKey: return VK_SELECT;
    547         case NSPrintFunctionKey: return VK_PRINT;
    548         case NSExecuteFunctionKey: return VK_EXECUTE;
    549         case NSPrintScreenFunctionKey: return VK_SNAPSHOT;
    550 #if PLATFORM(IOS)
    551         case NSInsertFunctionKey: case NSHelpFunctionKey: return VK_INSERT;
    552 
    553         case NSF1FunctionKey: return VK_F1;
    554         case NSF2FunctionKey: return VK_F2;
    555         case NSF3FunctionKey: return VK_F3;
    556         case NSF4FunctionKey: return VK_F4;
    557         case NSF5FunctionKey: return VK_F5;
    558         case NSF6FunctionKey: return VK_F6;
    559         case NSF7FunctionKey: return VK_F7;
    560         case NSF8FunctionKey: return VK_F8;
    561         case NSF9FunctionKey: return VK_F9;
    562         case NSF10FunctionKey: return VK_F10;
    563         case NSF11FunctionKey: return VK_F11;
    564         case NSF12FunctionKey: return VK_F12;
    565         case NSF13FunctionKey: return VK_F13;
    566         case NSF14FunctionKey: return VK_F14;
    567         case NSF15FunctionKey: return VK_F15;
    568         case NSF16FunctionKey: return VK_F16;
    569         case NSF17FunctionKey: return VK_F17;
    570         case NSF18FunctionKey: return VK_F18;
    571         case NSF19FunctionKey: return VK_F19;
    572         case NSF20FunctionKey: return VK_F20;
    573 #else
    574         case NSInsertFunctionKey: return VK_INSERT;
    575 #endif
    576         case NSF21FunctionKey: return VK_F21;
    577         case NSF22FunctionKey: return VK_F22;
    578         case NSF23FunctionKey: return VK_F23;
    579         case NSF24FunctionKey: return VK_F24;
    580         case NSScrollLockFunctionKey: return VK_SCROLL;
    581 
    582         // This is for U.S. keyboard mapping, and doesn't necessarily make sense for different keyboard layouts.
    583         // For example, '"' on Windows Russian layout is VK_2, not VK_OEM_7.
    584         case ';': case ':': return VK_OEM_1;
    585         case '=': case '+': return VK_OEM_PLUS;
    586         case ',': case '<': return VK_OEM_COMMA;
    587         case '-': case '_': return VK_OEM_MINUS;
    588         case '.': case '>': return VK_OEM_PERIOD;
    589         case '/': case '?': return VK_OEM_2;
    590         case '`': case '~': return VK_OEM_3;
    591         case '[': case '{': return VK_OEM_4;
    592         case '\\': case '|': return VK_OEM_5;
    593         case ']': case '}': return VK_OEM_6;
    594         case '\'': case '"': return VK_OEM_7;
    595 
    596     }
    597 
    598     return 0;
    599487}
    600 
    601 }
  • trunk/Source/WebCore/platform/ios/KeyEventIOS.mm

    r236417 r236427  
    197197}
    198198
     199int windowsKeyCodeForCharCode(unichar charCode)
     200{
     201    switch (charCode) {
     202    case 8: case 0x7F: return VK_BACK;
     203    case 9: return VK_TAB;
     204    case 0xD: case 3: return VK_RETURN;
     205    case 0x1B: return VK_ESCAPE;
     206    case ' ': return VK_SPACE;
     207
     208    case '0': case ')': return VK_0;
     209    case '1': case '!': return VK_1;
     210    case '2': case '@': return VK_2;
     211    case '3': case '#': return VK_3;
     212    case '4': case '$': return VK_4;
     213    case '5': case '%': return VK_5;
     214    case '6': case '^': return VK_6;
     215    case '7': case '&': return VK_7;
     216    case '8': case '*': return VK_8;
     217    case '9': case '(': return VK_9;
     218    case 'a': case 'A': return VK_A;
     219    case 'b': case 'B': return VK_B;
     220    case 'c': case 'C': return VK_C;
     221    case 'd': case 'D': return VK_D;
     222    case 'e': case 'E': return VK_E;
     223    case 'f': case 'F': return VK_F;
     224    case 'g': case 'G': return VK_G;
     225    case 'h': case 'H': return VK_H;
     226    case 'i': case 'I': return VK_I;
     227    case 'j': case 'J': return VK_J;
     228    case 'k': case 'K': return VK_K;
     229    case 'l': case 'L': return VK_L;
     230    case 'm': case 'M': return VK_M;
     231    case 'n': case 'N': return VK_N;
     232    case 'o': case 'O': return VK_O;
     233    case 'p': case 'P': return VK_P;
     234    case 'q': case 'Q': return VK_Q;
     235    case 'r': case 'R': return VK_R;
     236    case 's': case 'S': return VK_S;
     237    case 't': case 'T': return VK_T;
     238    case 'u': case 'U': return VK_U;
     239    case 'v': case 'V': return VK_V;
     240    case 'w': case 'W': return VK_W;
     241    case 'x': case 'X': return VK_X;
     242    case 'y': case 'Y': return VK_Y;
     243    case 'z': case 'Z': return VK_Z;
     244
     245    // This is for U.S. keyboard mapping, and doesn't necessarily make sense for different keyboard layouts.
     246    // For example, '"' on Windows Russian layout is VK_2, not VK_OEM_7.
     247    case ';': case ':': return VK_OEM_1;
     248    case '=': case '+': return VK_OEM_PLUS;
     249    case ',': case '<': return VK_OEM_COMMA;
     250    case '-': case '_': return VK_OEM_MINUS;
     251    case '.': case '>': return VK_OEM_PERIOD;
     252    case '/': case '?': return VK_OEM_2;
     253    case '`': case '~': return VK_OEM_3;
     254    case '[': case '{': return VK_OEM_4;
     255    case '\\': case '|': return VK_OEM_5;
     256    case ']': case '}': return VK_OEM_6;
     257    case '\'': case '"': return VK_OEM_7;
     258    }
     259    return 0;
     260}
     261
    199262void PlatformKeyboardEvent::disambiguateKeyDownEvent(Type type, bool backwardCompatibilityMode)
    200263{
  • trunk/Source/WebCore/platform/mac/KeyEventMac.mm

    r236417 r236427  
    173173}
    174174
     175int windowsKeyCodeForCharCode(unichar charCode)
     176{
     177    switch (charCode) {
     178    case 'a': case 'A': return VK_A;
     179    case 'b': case 'B': return VK_B;
     180    case 'c': case 'C': return VK_C;
     181    case 'd': case 'D': return VK_D;
     182    case 'e': case 'E': return VK_E;
     183    case 'f': case 'F': return VK_F;
     184    case 'g': case 'G': return VK_G;
     185    case 'h': case 'H': return VK_H;
     186    case 'i': case 'I': return VK_I;
     187    case 'j': case 'J': return VK_J;
     188    case 'k': case 'K': return VK_K;
     189    case 'l': case 'L': return VK_L;
     190    case 'm': case 'M': return VK_M;
     191    case 'n': case 'N': return VK_N;
     192    case 'o': case 'O': return VK_O;
     193    case 'p': case 'P': return VK_P;
     194    case 'q': case 'Q': return VK_Q;
     195    case 'r': case 'R': return VK_R;
     196    case 's': case 'S': return VK_S;
     197    case 't': case 'T': return VK_T;
     198    case 'u': case 'U': return VK_U;
     199    case 'v': case 'V': return VK_V;
     200    case 'w': case 'W': return VK_W;
     201    case 'x': case 'X': return VK_X;
     202    case 'y': case 'Y': return VK_Y;
     203    case 'z': case 'Z': return VK_Z;
     204
     205    // AppKit generates Unicode PUA character codes for some function keys; using these when key code is not known.
     206    case NSPauseFunctionKey: return VK_PAUSE;
     207    case NSSelectFunctionKey: return VK_SELECT;
     208    case NSPrintFunctionKey: return VK_PRINT;
     209    case NSExecuteFunctionKey: return VK_EXECUTE;
     210    case NSPrintScreenFunctionKey: return VK_SNAPSHOT;
     211    case NSInsertFunctionKey: return VK_INSERT;
     212    case NSF21FunctionKey: return VK_F21;
     213    case NSF22FunctionKey: return VK_F22;
     214    case NSF23FunctionKey: return VK_F23;
     215    case NSF24FunctionKey: return VK_F24;
     216    case NSScrollLockFunctionKey: return VK_SCROLL;
     217
     218    // This is for U.S. keyboard mapping, and doesn't necessarily make sense for different keyboard layouts.
     219    // For example, '"' on Windows Russian layout is VK_2, not VK_OEM_7.
     220    case ';': case ':': return VK_OEM_1;
     221    case '=': case '+': return VK_OEM_PLUS;
     222    case ',': case '<': return VK_OEM_COMMA;
     223    case '-': case '_': return VK_OEM_MINUS;
     224    case '.': case '>': return VK_OEM_PERIOD;
     225    case '/': case '?': return VK_OEM_2;
     226    case '`': case '~': return VK_OEM_3;
     227    case '[': case '{': return VK_OEM_4;
     228    case '\\': case '|': return VK_OEM_5;
     229    case ']': case '}': return VK_OEM_6;
     230    case '\'': case '"': return VK_OEM_7;
     231    }
     232    return 0;
     233}
     234
    175235void PlatformKeyboardEvent::disambiguateKeyDownEvent(Type type, bool backwardCompatibilityMode)
    176236{
Note: See TracChangeset for help on using the changeset viewer.