Home | History | Annotate | Download | only in runner
      1 /*
      2  * Copyright (C) 2012 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #include "KeyCodeMapping.h"
     32 
     33 #include "TestCommon.h"
     34 
     35 namespace WebTestRunner {
     36 
     37 int NativeKeyCodeForWindowsKeyCode(int keysym)
     38 {
     39 #if defined(__linux__) && defined(TOOLKIT_GTK)
     40     // See /usr/share/X11/xkb/keycodes/*
     41     static const int asciiToKeyCode[] = {
     42         0,
     43         0,
     44         0,
     45         0,
     46         0,
     47         0,
     48         0,
     49         0,
     50         22,
     51         23,
     52         0,
     53         0,
     54         0,
     55         36,
     56         0,
     57         0,
     58         50,
     59         37,
     60         64,
     61         127,
     62         66,
     63         0,
     64         0,
     65         0,
     66         0,
     67         131,
     68         0,
     69         9,
     70         100,
     71         102,
     72         0,
     73         0,
     74         65, // ' '
     75         112, // '!'
     76         117, // '"'
     77         115, // '#'
     78         110, // '$'
     79         113, // '%'
     80         111, // '&'
     81         114, // '''
     82         116, // '('
     83         0, // ')'
     84         107, // '*'
     85         0, // '+'
     86         0, // ','
     87         118, // '-'
     88         119, // '.'
     89         146, // '/'
     90         19, // '0'
     91         10, // '1'
     92         11, // '2'
     93         12, // '3'
     94         13, // '4'
     95         14, // '5'
     96         15, // '6'
     97         16, // '7'
     98         17, // '8'
     99         18, // '9'
    100         0, // ':'
    101         0, // ';'
    102         0, // '<'
    103         0, // '='
    104         0, // '>'
    105         0, // '?'
    106         0, // '@'
    107         38, // 'A'
    108         56, // 'B'
    109         54, // 'C'
    110         40, // 'D'
    111         26, // 'E'
    112         41, // 'F'
    113         42, // 'G'
    114         43, // 'H'
    115         31, // 'I'
    116         44, // 'J'
    117         45, // 'K'
    118         46, // 'L'
    119         58, // 'M'
    120         57, // 'N'
    121         32, // 'O'
    122         33, // 'P'
    123         24, // 'Q'
    124         27, // 'R'
    125         39, // 'S'
    126         28, // 'T'
    127         30, // 'U'
    128         55, // 'V'
    129         25, // 'W'
    130         53, // 'X'
    131         29, // 'Y'
    132         52, // 'Z'
    133         133, // '['
    134         134, // '\'
    135         135, // ']'
    136         0, // '^'
    137         0, // '_'
    138         90, // '`'
    139         38, // 'a'
    140         56, // 'b'
    141         54, // 'c'
    142         40, // 'd'
    143         26, // 'e'
    144         41, // 'f'
    145         42, // 'g'
    146         43, // 'h'
    147         31, // 'i'
    148         44, // 'j'
    149         45, // 'k'
    150         46, // 'l'
    151         58, // 'm'
    152         57, // 'n'
    153         32, // 'o'
    154         33, // 'p'
    155         24, // 'q'
    156         27, // 'r'
    157         39, // 's'
    158         28, // 't'
    159         30, // 'u'
    160         55, // 'v'
    161         25, // 'w'
    162         53, // 'x'
    163         29, // 'y'
    164         52, // 'z'
    165         96, // '{'
    166         0, // '|'
    167         0, // '}'
    168         0, // '~'
    169         0, // DEL
    170     };
    171 
    172     if (keysym <= 127)
    173         return asciiToKeyCode[keysym];
    174 
    175     switch (keysym) {
    176     case VKEY_PRIOR:
    177         return 112;
    178     case VKEY_NEXT:
    179         return 117;
    180     case VKEY_END:
    181         return 115;
    182     case VKEY_HOME:
    183         return 110;
    184     case VKEY_LEFT:
    185         return 113;
    186     case VKEY_UP:
    187         return 111;
    188     case VKEY_RIGHT:
    189         return 114;
    190     case VKEY_DOWN:
    191         return 116;
    192     case VKEY_SNAPSHOT:
    193         return 107;
    194     case VKEY_INSERT:
    195         return 118;
    196     case VKEY_DELETE:
    197         return 119;
    198     case VKEY_APPS:
    199         return 135;
    200     case VKEY_F1:
    201     case VKEY_F1 + 1:
    202     case VKEY_F1 + 2:
    203     case VKEY_F1 + 3:
    204     case VKEY_F1 + 4:
    205     case VKEY_F1 + 5:
    206     case VKEY_F1 + 6:
    207     case VKEY_F1 + 7:
    208     case VKEY_F1 + 8:
    209     case VKEY_F1 + 9:
    210     case VKEY_F1 + 10:
    211     case VKEY_F1 + 11:
    212     case VKEY_F1 + 12:
    213     case VKEY_F1 + 13:
    214     case VKEY_F1 + 14:
    215     case VKEY_F1 + 15:
    216     case VKEY_F1 + 16:
    217     case VKEY_F1 + 17:
    218     case VKEY_F1 + 18:
    219     case VKEY_F1 + 19:
    220     case VKEY_F1 + 20:
    221     case VKEY_F1 + 21:
    222     case VKEY_F1 + 22:
    223     case VKEY_F1 + 23:
    224         return 67 + (keysym - VKEY_F1);
    225     case VKEY_LSHIFT:
    226         return 50;
    227     case VKEY_RSHIFT:
    228         return 62;
    229     case VKEY_LCONTROL:
    230         return 37;
    231     case VKEY_RCONTROL:
    232         return 105;
    233     case VKEY_LMENU:
    234         return 64;
    235     case VKEY_RMENU:
    236         return 108;
    237 
    238     default:
    239         return 0;
    240     }
    241 #else
    242     return keysym - keysym;
    243 #endif
    244 }
    245 
    246 }
    247