blob: 8626ffbe1d04f6d372f1fa9db116d28f9aa33859 [file] [log] [blame]
// Copyright 2015 The Cobalt Authors. 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.
// Module Overview: Starboard Key module
//
// Defines the canonical set of Starboard key codes.
#ifndef STARBOARD_KEY_H_
#define STARBOARD_KEY_H_
#include "starboard/configuration.h"
#ifdef __cplusplus
extern "C" {
#endif
// A standard set of key codes, ordered by value, that represent each possible
// input key across all kinds of devices. Starboard uses the semi-standard
// Windows virtual key codes documented at:
// https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx
typedef enum SbKey {
kSbKeyUnknown = 0,
kSbKeyCancel = 0x03,
kSbKeyBackspace = 0x08,
kSbKeyBack = kSbKeyBackspace, // You probably want kSbKeyEscape for a
// semantic "back".
kSbKeyTab = 0x09,
kSbKeyBacktab = 0x0A,
kSbKeyClear = 0x0C,
kSbKeyReturn = 0x0D, // Return/Enter key
kSbKeyShift = 0x10,
kSbKeyControl = 0x11,
kSbKeyMenu = 0x12, // Alt key
kSbKeyPause = 0x13,
kSbKeyCapital = 0x14,
kSbKeyKana = 0x15,
kSbKeyHangul = 0x15,
kSbKeyJunja = 0x17,
kSbKeyFinal = 0x18,
kSbKeyHanja = 0x19,
kSbKeyKanji = 0x19,
kSbKeyEscape = 0x1B,
kSbKeyConvert = 0x1C,
kSbKeyNonconvert = 0x1D,
kSbKeyAccept = 0x1E,
kSbKeyModechange = 0x1F,
kSbKeySpace = 0x20,
kSbKeyPrior = 0x21,
kSbKeyNext = 0x22,
kSbKeyEnd = 0x23,
kSbKeyHome = 0x24,
kSbKeyLeft = 0x25,
kSbKeyUp = 0x26,
kSbKeyRight = 0x27,
kSbKeyDown = 0x28,
kSbKeySelect = 0x29,
kSbKeyPrint = 0x2A,
kSbKeyExecute = 0x2B,
kSbKeySnapshot = 0x2C,
kSbKeyInsert = 0x2D,
kSbKeyDelete = 0x2E,
kSbKeyHelp = 0x2F,
kSbKey0 = 0x30,
kSbKey1 = 0x31,
kSbKey2 = 0x32,
kSbKey3 = 0x33,
kSbKey4 = 0x34,
kSbKey5 = 0x35,
kSbKey6 = 0x36,
kSbKey7 = 0x37,
kSbKey8 = 0x38,
kSbKey9 = 0x39,
kSbKeyA = 0x41,
kSbKeyB = 0x42,
kSbKeyC = 0x43,
kSbKeyD = 0x44,
kSbKeyE = 0x45,
kSbKeyF = 0x46,
kSbKeyG = 0x47,
kSbKeyH = 0x48,
kSbKeyI = 0x49,
kSbKeyJ = 0x4A,
kSbKeyK = 0x4B,
kSbKeyL = 0x4C,
kSbKeyM = 0x4D,
kSbKeyN = 0x4E,
kSbKeyO = 0x4F,
kSbKeyP = 0x50,
kSbKeyQ = 0x51,
kSbKeyR = 0x52,
kSbKeyS = 0x53,
kSbKeyT = 0x54,
kSbKeyU = 0x55,
kSbKeyV = 0x56,
kSbKeyW = 0x57,
kSbKeyX = 0x58,
kSbKeyY = 0x59,
kSbKeyZ = 0x5A,
kSbKeyLwin = 0x5B,
kSbKeyCommand = kSbKeyLwin, // Provide the Mac name for convenience.
kSbKeyRwin = 0x5C,
kSbKeyApps = 0x5D,
kSbKeySleep = 0x5F,
kSbKeyNumpad0 = 0x60,
kSbKeyNumpad1 = 0x61,
kSbKeyNumpad2 = 0x62,
kSbKeyNumpad3 = 0x63,
kSbKeyNumpad4 = 0x64,
kSbKeyNumpad5 = 0x65,
kSbKeyNumpad6 = 0x66,
kSbKeyNumpad7 = 0x67,
kSbKeyNumpad8 = 0x68,
kSbKeyNumpad9 = 0x69,
kSbKeyMultiply = 0x6A,
kSbKeyAdd = 0x6B,
kSbKeySeparator = 0x6C,
kSbKeySubtract = 0x6D,
kSbKeyDecimal = 0x6E,
kSbKeyDivide = 0x6F,
kSbKeyF1 = 0x70,
kSbKeyF2 = 0x71,
kSbKeyF3 = 0x72,
kSbKeyF4 = 0x73,
kSbKeyF5 = 0x74,
kSbKeyF6 = 0x75,
kSbKeyF7 = 0x76,
kSbKeyF8 = 0x77,
kSbKeyF9 = 0x78,
kSbKeyF10 = 0x79,
kSbKeyF11 = 0x7A,
kSbKeyF12 = 0x7B,
kSbKeyF13 = 0x7C,
kSbKeyF14 = 0x7D,
kSbKeyF15 = 0x7E,
kSbKeyF16 = 0x7F,
kSbKeyF17 = 0x80,
kSbKeyF18 = 0x81,
kSbKeyF19 = 0x82,
kSbKeyF20 = 0x83,
kSbKeyF21 = 0x84,
kSbKeyF22 = 0x85,
kSbKeyF23 = 0x86,
kSbKeyF24 = 0x87,
kSbKeyNumlock = 0x90,
kSbKeyScroll = 0x91,
kSbKeyWlan = 0x97,
kSbKeyPower = 0x98,
kSbKeyLshift = 0xA0,
kSbKeyRshift = 0xA1,
kSbKeyLcontrol = 0xA2,
kSbKeyRcontrol = 0xA3,
kSbKeyLmenu = 0xA4,
kSbKeyRmenu = 0xA5,
kSbKeyBrowserBack = 0xA6,
kSbKeyBrowserForward = 0xA7,
kSbKeyBrowserRefresh = 0xA8,
kSbKeyBrowserStop = 0xA9,
kSbKeyBrowserSearch = 0xAA,
kSbKeyBrowserFavorites = 0xAB,
kSbKeyBrowserHome = 0xAC,
kSbKeyVolumeMute = 0xAD,
kSbKeyVolumeDown = 0xAE,
kSbKeyVolumeUp = 0xAF,
kSbKeyMediaNextTrack = 0xB0,
kSbKeyMediaPrevTrack = 0xB1,
kSbKeyMediaStop = 0xB2,
kSbKeyMediaPlayPause = 0xB3,
kSbKeyMediaLaunchMail = 0xB4,
kSbKeyMediaLaunchMediaSelect = 0xB5,
kSbKeyMediaLaunchApp1 = 0xB6,
kSbKeyMediaLaunchApp2 = 0xB7,
kSbKeyOem1 = 0xBA,
kSbKeyOemPlus = 0xBB,
kSbKeyOemComma = 0xBC,
kSbKeyOemMinus = 0xBD,
kSbKeyOemPeriod = 0xBE,
kSbKeyOem2 = 0xBF,
kSbKeyOem3 = 0xC0,
kSbKeyBrightnessDown = 0xD8,
kSbKeyBrightnessUp = 0xD9,
kSbKeyKbdBrightnessDown = 0xDA,
kSbKeyOem4 = 0xDB,
kSbKeyOem5 = 0xDC,
kSbKeyOem6 = 0xDD,
kSbKeyOem7 = 0xDE,
kSbKeyOem8 = 0xDF,
kSbKeyOem102 = 0xE2,
kSbKeyKbdBrightnessUp = 0xE8,
kSbKeyDbeSbcschar = 0xF3,
kSbKeyDbeDbcschar = 0xF4,
kSbKeyPlay = 0xFA,
// Beyond this point are non-Windows key codes that are provided as
// extensions, as they otherwise have no analogs.
// Other supported CEA 2014 keys.
kSbKeyMediaRewind = 0xE3,
kSbKeyMediaFastForward = 0xE4,
// Key codes from the DTV Application Software Environment,
// http://www.atsc.org/wp-content/uploads/2015/03/a_100_4.pdf
kSbKeyRed = 0x193,
kSbKeyGreen = 0x194,
kSbKeyYellow = 0x195,
kSbKeyBlue = 0x196,
kSbKeyChannelUp = 0x1AB,
kSbKeyChannelDown = 0x1AC,
kSbKeySubtitle = 0x1CC,
kSbKeyClosedCaption = kSbKeySubtitle,
kSbKeyInfo = 0x1C9,
kSbKeyGuide = 0x1CA,
// Key codes from OCAP,
// https://apps.cablelabs.com/specification/opencable-application-platform-ocap/
kSbKeyLast = 0x25f,
kSbKeyPreviousChannel = kSbKeyLast,
#if SB_API_VERSION >= 9
// Also from OCAP
kSbKeyInstantReplay = 0x273,
#endif // SB_API_VERSION >= 9
// Custom Starboard-defined keycodes.
// A button that will directly launch the current application.
kSbKeyLaunchThisApplication = 0x3000,
// A button that will switch between different available audio tracks.
kSbKeyMediaAudioTrack = 0x3001,
// A button that will trigger voice input.
kSbKeyMicrophone = 0x3002,
// Mouse buttons, starting with the left mouse button.
kSbKeyMouse1 = 0x7000,
kSbKeyMouse2 = 0x7001,
kSbKeyMouse3 = 0x7002,
kSbKeyMouse4 = 0x7003,
kSbKeyMouse5 = 0x7004,
// Gamepad extensions to windows virtual key codes.
// http://www.w3.org/TR/gamepad/
// Xbox A, PS O or X (depending on region), Switch A
kSbKeyGamepad1 = 0x8000,
// Xbox B, PS X or O (depending on region), Switch B
kSbKeyGamepad2 = 0x8001,
// Xbox X, PS square, Switch X
kSbKeyGamepad3 = 0x8002,
// Xbox Y, PS triangle, Switch Y
kSbKeyGamepad4 = 0x8003,
// Pretty much every gamepad has bumpers at the top front of the controller,
// and triggers at the bottom front of the controller.
kSbKeyGamepadLeftBumper = 0x8004,
kSbKeyGamepadRightBumper = 0x8005,
kSbKeyGamepadLeftTrigger = 0x8006,
kSbKeyGamepadRightTrigger = 0x8007,
// Xbox 360 Back, XB1 minimize, PS and WiiU Select
kSbKeyGamepad5 = 0x8008,
// Xbox 360 Play, XB1 Menu, PS and WiiU Start
kSbKeyGamepad6 = 0x8009,
// This refers to pressing the left stick like a button.
kSbKeyGamepadLeftStick = 0x800A,
// This refers to pressing the right stick like a button.
kSbKeyGamepadRightStick = 0x800B,
kSbKeyGamepadDPadUp = 0x800C,
kSbKeyGamepadDPadDown = 0x800D,
kSbKeyGamepadDPadLeft = 0x800E,
kSbKeyGamepadDPadRight = 0x800F,
// The system key in the middle of the gamepad, if it exists.
kSbKeyGamepadSystem = 0x8010,
// Codes for thumbstick to virtual dpad conversions.
kSbKeyGamepadLeftStickUp = 0x8011,
kSbKeyGamepadLeftStickDown = 0x8012,
kSbKeyGamepadLeftStickLeft = 0x8013,
kSbKeyGamepadLeftStickRight = 0x8014,
kSbKeyGamepadRightStickUp = 0x8015,
kSbKeyGamepadRightStickDown = 0x8016,
kSbKeyGamepadRightStickLeft = 0x8017,
kSbKeyGamepadRightStickRight = 0x8018,
} SbKey;
typedef enum SbKeyLocation {
kSbKeyLocationUnspecified = 0,
kSbKeyLocationLeft,
kSbKeyLocationRight,
} SbKeyLocation;
// Bit-mask of key modifiers.
typedef enum SbKeyModifiers {
kSbKeyModifiersNone = 0,
kSbKeyModifiersAlt = 1 << 0,
kSbKeyModifiersCtrl = 1 << 1,
kSbKeyModifiersMeta = 1 << 2,
kSbKeyModifiersShift = 1 << 3,
kSbKeyModifiersPointerButtonLeft = 1 << 4,
kSbKeyModifiersPointerButtonRight = 1 << 5,
kSbKeyModifiersPointerButtonMiddle = 1 << 6,
kSbKeyModifiersPointerButtonBack = 1 << 7,
kSbKeyModifiersPointerButtonForward = 1 << 8,
} SbKeyModifiers;
#ifdef __cplusplus
} // extern "C"
#endif
#endif // STARBOARD_KEY_H_