// 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_
