1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ui/events/keycodes/keyboard_code_conversion_win.h"
6 #include "ui/events/keycodes/dom/keycode_converter.h"
7 
8 namespace ui {
9 
10 namespace {
11 
12 const WORD kAltPrintScreenScanCode = 0x0054;
13 const WORD kPrintScreenScanCode = 0xe037;
14 const WORD kCtrlPauseScanCode = 0xe046;
15 const WORD kPauseScanCode = 0x0045;
16 const WORD kHanjaKeyKoreanLayoutScanCode = 0xe0f1;
17 const WORD kHanjaKeyScanCode = 0x0071;
18 const WORD kHanYeongKeyKoreanLayoutScanCode = 0xe0f2;
19 const WORD kHanYeongKeyScanCode = 0x0072;
20 
21 }  // namespace
22 
WindowsKeyCodeForKeyboardCode(KeyboardCode keycode)23 WORD WindowsKeyCodeForKeyboardCode(KeyboardCode keycode) {
24   return static_cast<WORD>(keycode);
25 }
26 
KeyboardCodeForWindowsKeyCode(WORD keycode)27 KeyboardCode KeyboardCodeForWindowsKeyCode(WORD keycode) {
28   return static_cast<KeyboardCode>(keycode);
29 }
30 
CodeForWindowsScanCode(WORD scan_code)31 DomCode CodeForWindowsScanCode(WORD scan_code) {
32   // There are a few instances where multiple scancodes map to the same
33   // physical key. Instead of teaching the NativeKeyCode table to support
34   // multiple values; we do this simple translation before calling it.
35   switch (scan_code) {
36     case kAltPrintScreenScanCode:
37       scan_code = kPrintScreenScanCode;
38       break;
39     case kCtrlPauseScanCode:
40       scan_code = kPauseScanCode;
41       break;
42     case kHanjaKeyKoreanLayoutScanCode:
43       scan_code = kHanjaKeyScanCode;
44       break;
45     case kHanYeongKeyKoreanLayoutScanCode:
46       scan_code = kHanYeongKeyScanCode;
47       break;
48   }
49 
50   return ui::KeycodeConverter::NativeKeycodeToDomCode(scan_code);
51 }
52 
53 }  // namespace ui
54