/*
 * Copyright 2015 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef COBALT_DOM_KEYCODE_H_
#define COBALT_DOM_KEYCODE_H_

namespace cobalt {
namespace dom {
namespace keycode {

// A standard set of key codes is needed to represent each possible input key,
// so for the sake of compatibility, we have to choose to adopt Chrome's
// implementation for the non-standardized platform-dependent
// KeyboardEvent.keyCode WebAPI, which happens to be the Windows virtual key
// codes.
// Windows virtual key codes doc:
//   https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx
// Order by the value.
enum {
  kUnknown = 0,
  kCancel = 0x03,
  kBack = 0x08,
  kTab = 0x09,
  kBacktab = 0x0A,
  kClear = 0x0C,
  kReturn = 0x0D,  // Return/Enter key
  kShift = 0x10,
  kControl = 0x11,
  kMenu = 0x12,
  kPause = 0x13,
  kCapital = 0x14,
  kKana = 0x15,
  kHangul = 0x15,
  kJunja = 0x17,
  kFinal = 0x18,
  kHanja = 0x19,
  kKanji = 0x19,
  kEscape = 0x1B,
  kConvert = 0x1C,
  kNonconvert = 0x1D,
  kAccept = 0x1E,
  kModechange = 0x1F,
  kSpace = 0x20,
  kPrior = 0x21,
  kNext = 0x22,
  kEnd = 0x23,
  kHome = 0x24,
  kLeft = 0x25,
  kUp = 0x26,
  kRight = 0x27,
  kDown = 0x28,
  kSelect = 0x29,
  kPrint = 0x2A,
  kExecute = 0x2B,
  kSnapshot = 0x2C,
  kInsert = 0x2D,
  kDelete = 0x2E,
  kHelp = 0x2F,
  k0 = 0x30,
  k1 = 0x31,
  k2 = 0x32,
  k3 = 0x33,
  k4 = 0x34,
  k5 = 0x35,
  k6 = 0x36,
  k7 = 0x37,
  k8 = 0x38,
  k9 = 0x39,
  kA = 0x41,
  kB = 0x42,
  kC = 0x43,
  kD = 0x44,
  kE = 0x45,
  kF = 0x46,
  kG = 0x47,
  kH = 0x48,
  kI = 0x49,
  kJ = 0x4A,
  kK = 0x4B,
  kL = 0x4C,
  kM = 0x4D,
  kN = 0x4E,
  kO = 0x4F,
  kP = 0x50,
  kQ = 0x51,
  kR = 0x52,
  kS = 0x53,
  kT = 0x54,
  kU = 0x55,
  kV = 0x56,
  kW = 0x57,
  kX = 0x58,
  kY = 0x59,
  kZ = 0x5A,
  kLwin = 0x5B,
  kCommand = kLwin,  // Provide the Mac name for convenience.
  kRwin = 0x5C,
  kApps = 0x5D,
  kSleep = 0x5F,
  kNumpad0 = 0x60,
  kNumpad1 = 0x61,
  kNumpad2 = 0x62,
  kNumpad3 = 0x63,
  kNumpad4 = 0x64,
  kNumpad5 = 0x65,
  kNumpad6 = 0x66,
  kNumpad7 = 0x67,
  kNumpad8 = 0x68,
  kNumpad9 = 0x69,
  kMultiply = 0x6A,
  kAdd = 0x6B,
  kSeparator = 0x6C,
  kSubtract = 0x6D,
  kDecimal = 0x6E,
  kDivide = 0x6F,
  kF1 = 0x70,
  kF2 = 0x71,
  kF3 = 0x72,
  kF4 = 0x73,
  kF5 = 0x74,
  kF6 = 0x75,
  kF7 = 0x76,
  kF8 = 0x77,
  kF9 = 0x78,
  kF10 = 0x79,
  kF11 = 0x7A,
  kF12 = 0x7B,
  kF13 = 0x7C,
  kF14 = 0x7D,
  kF15 = 0x7E,
  kF16 = 0x7F,
  kF17 = 0x80,
  kF18 = 0x81,
  kF19 = 0x82,
  kF20 = 0x83,
  kF21 = 0x84,
  kF22 = 0x85,
  kF23 = 0x86,
  kF24 = 0x87,
  kNumlock = 0x90,
  kScroll = 0x91,
  kWlan = 0x97,
  kPower = 0x98,
  kLshift = 0xA0,
  kRshift = 0xA1,
  kLcontrol = 0xA2,
  kRcontrol = 0xA3,
  kLmenu = 0xA4,
  kRmenu = 0xA5,
  kBrowserBack = 0xA6,
  kBrowserForward = 0xA7,
  kBrowserRefresh = 0xA8,
  kBrowserStop = 0xA9,
  kBrowserSearch = 0xAA,
  kBrowserFavorites = 0xAB,
  kBrowserHome = 0xAC,
  kVolumeMute = 0xAD,
  kVolumeDown = 0xAE,
  kVolumeUp = 0xAF,
  kMediaNextTrack = 0xB0,
  kMediaPrevTrack = 0xB1,
  kMediaStop = 0xB2,
  kMediaPlayPause = 0xB3,
  kMediaLaunchMail = 0xB4,
  kMediaLaunchMediaSelect = 0xB5,
  kMediaLaunchApp1 = 0xB6,
  kMediaLaunchApp2 = 0xB7,
  kOem1 = 0xBA,
  kOemPlus = 0xBB,
  kOemComma = 0xBC,
  kOemMinus = 0xBD,
  kOemPeriod = 0xBE,
  kOem2 = 0xBF,
  kOem3 = 0xC0,
  kBrightnessDown = 0xD8,
  kBrightnessUp = 0xD9,
  kKbdBrightnessDown = 0xDA,
  kOem4 = 0xDB,
  kOem5 = 0xDC,
  kOem6 = 0xDD,
  kOem7 = 0xDE,
  kOem8 = 0xDF,
  kOem102 = 0xE2,
  kKbdBrightnessUp = 0xE8,
  kDbeSbcschar = 0xF3,
  kDbeDbcschar = 0xF4,
  kPlay = 0xFA,

  // Not present in Windows virtual key codes, but would be used by the client.
  kMediaRewind = 0xE3,
  kMediaFastForward = 0xE4,
};

}  // namespace keycode
}  // namespace dom
}  // namespace cobalt

#endif  // COBALT_DOM_KEYCODE_H_
