161 lines
3.6 KiB
C++
161 lines
3.6 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Project : SDK Core
|
|
//
|
|
// Category : SDK Core Interfaces
|
|
// Filename : pluginterfaces/base/keycodes.h
|
|
// Created by : Steinberg, 01/2004
|
|
// Description : Key Code Definitions
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// This file is part of a Steinberg SDK. It is subject to the license terms
|
|
// in the LICENSE file found in the top-level directory of this distribution
|
|
// and at www.steinberg.net/sdklicenses.
|
|
// No part of the SDK, including this file, may be copied, modified, propagated,
|
|
// or distributed except according to the terms contained in the LICENSE file.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "pluginterfaces/base/ftypes.h"
|
|
|
|
namespace Steinberg {
|
|
//------------------------------------------------------------------------------
|
|
/** Virtual Key Codes.
|
|
OS-independent enumeration of virtual keycodes.
|
|
*/
|
|
//------------------------------------------------------------------------------
|
|
enum VirtualKeyCodes
|
|
{
|
|
KEY_BACK = 1,
|
|
KEY_TAB,
|
|
KEY_CLEAR,
|
|
KEY_RETURN,
|
|
KEY_PAUSE,
|
|
KEY_ESCAPE,
|
|
KEY_SPACE,
|
|
KEY_NEXT,
|
|
KEY_END,
|
|
KEY_HOME,
|
|
|
|
KEY_LEFT,
|
|
KEY_UP,
|
|
KEY_RIGHT,
|
|
KEY_DOWN,
|
|
KEY_PAGEUP,
|
|
KEY_PAGEDOWN,
|
|
|
|
KEY_SELECT,
|
|
KEY_PRINT,
|
|
KEY_ENTER,
|
|
KEY_SNAPSHOT,
|
|
KEY_INSERT,
|
|
KEY_DELETE,
|
|
KEY_HELP,
|
|
KEY_NUMPAD0,
|
|
KEY_NUMPAD1,
|
|
KEY_NUMPAD2,
|
|
KEY_NUMPAD3,
|
|
KEY_NUMPAD4,
|
|
KEY_NUMPAD5,
|
|
KEY_NUMPAD6,
|
|
KEY_NUMPAD7,
|
|
KEY_NUMPAD8,
|
|
KEY_NUMPAD9,
|
|
KEY_MULTIPLY,
|
|
KEY_ADD,
|
|
KEY_SEPARATOR,
|
|
KEY_SUBTRACT,
|
|
KEY_DECIMAL,
|
|
KEY_DIVIDE,
|
|
KEY_F1,
|
|
KEY_F2,
|
|
KEY_F3,
|
|
KEY_F4,
|
|
KEY_F5,
|
|
KEY_F6,
|
|
KEY_F7,
|
|
KEY_F8,
|
|
KEY_F9,
|
|
KEY_F10,
|
|
KEY_F11,
|
|
KEY_F12,
|
|
KEY_NUMLOCK,
|
|
KEY_SCROLL,
|
|
|
|
KEY_SHIFT,
|
|
KEY_CONTROL,
|
|
KEY_ALT,
|
|
|
|
KEY_EQUALS, // only occurs on a Mac
|
|
KEY_CONTEXTMENU, // Windows only
|
|
|
|
// multimedia keys
|
|
KEY_MEDIA_PLAY,
|
|
KEY_MEDIA_STOP,
|
|
KEY_MEDIA_PREV,
|
|
KEY_MEDIA_NEXT,
|
|
KEY_VOLUME_UP,
|
|
KEY_VOLUME_DOWN,
|
|
|
|
KEY_F13,
|
|
KEY_F14,
|
|
KEY_F15,
|
|
KEY_F16,
|
|
KEY_F17,
|
|
KEY_F18,
|
|
KEY_F19,
|
|
|
|
VKEY_FIRST_CODE = KEY_BACK,
|
|
VKEY_LAST_CODE = KEY_F19,
|
|
|
|
VKEY_FIRST_ASCII = 128
|
|
/*
|
|
KEY_0 - KEY_9 are the same as ASCII '0' - '9' (0x30 - 0x39) + FIRST_ASCII
|
|
KEY_A - KEY_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) + FIRST_ASCII
|
|
*/
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
inline tchar VirtualKeyCodeToChar (uint8 vKey)
|
|
{
|
|
if (vKey >= VKEY_FIRST_ASCII)
|
|
return (tchar)(vKey - VKEY_FIRST_ASCII + 0x30);
|
|
else if (vKey == KEY_SPACE)
|
|
return ' ';
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
inline uint8 CharToVirtualKeyCode (tchar character)
|
|
{
|
|
if ((character >= 0x30 && character <= 0x39) || (character >= 0x41 && character <= 0x5A))
|
|
return (uint8)(character - 0x30 + VKEY_FIRST_ASCII);
|
|
if (character == ' ')
|
|
return (uint8)KEY_SPACE;
|
|
return 0;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
enum KeyModifier
|
|
{
|
|
kShiftKey = 1 << 0, ///< same on both PC and Mac
|
|
kAlternateKey = 1 << 1, ///< same on both PC and Mac
|
|
kCommandKey = 1 << 2, ///< windows ctrl key; mac cmd key (apple button)
|
|
kControlKey = 1 << 3 ///< windows: not assigned, mac: ctrl key
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
struct KeyCode
|
|
{
|
|
tchar character;
|
|
uint8 virt;
|
|
uint8 modifier;
|
|
|
|
explicit KeyCode (tchar character = 0, uint8 virt = 0, uint8 modifier = 0)
|
|
: character (character), virt (virt), modifier (modifier)
|
|
{
|
|
}
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
} // namespace Steinberg
|