mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
170 lines
3.8 KiB
C++
170 lines
3.8 KiB
C++
#include "BFWindow.h"
|
|
#include "gfx/RenderDevice.h"
|
|
|
|
USING_NS_BF;
|
|
|
|
BFMenu::BFMenu()
|
|
{
|
|
mParent = NULL;
|
|
mKeyCode = 0;
|
|
mKeyCtrl = 0;
|
|
mKeyAlt = 0;
|
|
mKeyShift = 0;
|
|
}
|
|
|
|
struct BFNamedVirtKey
|
|
{
|
|
public:
|
|
const char* mName;
|
|
int mKeyCode;
|
|
};
|
|
|
|
#define VK_SPACE 0x20
|
|
#define VK_PRIOR 0x21
|
|
#define VK_NEXT 0x22
|
|
#define VK_END 0x23
|
|
#define VK_HOME 0x24
|
|
#define VK_LEFT 0x25
|
|
#define VK_UP 0x26
|
|
#define VK_RIGHT 0x27
|
|
#define VK_DOWN 0x28
|
|
#define VK_SELECT 0x29
|
|
#define VK_PRINT 0x2A
|
|
#define VK_EXECUTE 0x2B
|
|
#define VK_SNAPSHOT 0x2C
|
|
#define VK_INSERT 0x2D
|
|
#define VK_DELETE 0x2E
|
|
#define VK_HELP 0x2F
|
|
#define VK_F1 0x70
|
|
#define VK_F2 0x71
|
|
#define VK_F3 0x72
|
|
#define VK_F4 0x73
|
|
#define VK_F5 0x74
|
|
#define VK_F6 0x75
|
|
#define VK_F7 0x76
|
|
#define VK_F8 0x77
|
|
#define VK_F9 0x78
|
|
#define VK_F10 0x79
|
|
#define VK_F11 0x7A
|
|
#define VK_F12 0x7B
|
|
#define VK_SEMICOLON 0xBA
|
|
#define VK_EQUALS 0xBB
|
|
#define VK_COMMA 0xBC
|
|
#define VK_MINUS 0xBD
|
|
#define VK_PERIOD 0xBE
|
|
#define VK_SLASH 0xBF
|
|
#define VK_GRAVE 0xC0
|
|
#define VK_LBRACKET 0xDB
|
|
#define VK_BACKSLASH 0xDC
|
|
#define VK_RBRACKET 0xDD
|
|
#define VK_APOSTROPHE 0xDE
|
|
#define VK_BACKTICK 0xDF
|
|
#define VK_PAUSE 0x13
|
|
#define VK_CANCEL 0x03
|
|
|
|
static BFNamedVirtKey gNamedKeys[] =
|
|
{{"F1", VK_F1}, {"F2", VK_F2}, {"F3", VK_F3}, {"F4", VK_F4}, {"F5", VK_F5}, {"F6", VK_F6},
|
|
{"F7", VK_F7}, {"F8", VK_F8}, {"F9", VK_F9}, {"F10", VK_F10}, {"F11", VK_F11}, {"F12", VK_F12},
|
|
{"INSERT", VK_INSERT}, {"INSERT", VK_INSERT}, {"DE", VK_DELETE}, {"DELETE", VK_DELETE},
|
|
{"BREAK", VK_PAUSE},
|
|
{"HOME", VK_HOME}, {"END", VK_END}, {"PGUP", VK_PRIOR}, {"PAGEUP", VK_PRIOR}, {"PGDN", VK_NEXT}, {"PAGEDN", VK_NEXT}, {"PAGEDOWN", VK_NEXT},
|
|
{"UP", VK_UP}, {"LEFT", VK_LEFT}, {"RIGHT", VK_RIGHT}, {"DOWN", VK_DOWN}
|
|
};
|
|
|
|
bool BFMenu::ParseHotKey(const StringImpl& hotKey)
|
|
{
|
|
String aHotKey = ToUpper(hotKey);
|
|
if (aHotKey.StartsWith("#"))
|
|
return false;
|
|
|
|
while (true)
|
|
{
|
|
int idx = (int)aHotKey.IndexOf('+');
|
|
if (idx == -1)
|
|
idx = (int)aHotKey.IndexOf('-');
|
|
if (idx == -1)
|
|
break;
|
|
|
|
String aModifier = Trim(aHotKey.Substring(0, idx));
|
|
aHotKey = Trim(aHotKey.Substring(idx + 1));
|
|
|
|
if (aModifier == "SHIFT")
|
|
mKeyShift = true;
|
|
else if (aModifier == "CTRL")
|
|
mKeyCtrl = true;
|
|
else if (aModifier == "ALT")
|
|
mKeyAlt = true;
|
|
else
|
|
{
|
|
BF_FATAL("Unknown hotkey modifier");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (aHotKey.length() == 1)
|
|
{
|
|
if (aHotKey == ",")
|
|
mKeyCode = /*VK_COMMA*/0xBC;
|
|
else
|
|
mKeyCode = (int) aHotKey[0];
|
|
return true;
|
|
}
|
|
|
|
int count = sizeof(gNamedKeys) / sizeof(BFNamedVirtKey);
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
if (aHotKey == gNamedKeys[i].mName)
|
|
{
|
|
mKeyCode = gNamedKeys[i].mKeyCode;
|
|
if ((mKeyCode == VK_PAUSE) && (mKeyCtrl))
|
|
{
|
|
// Ctrl-Pause is really "Cancel"
|
|
mKeyCode = VK_CANCEL;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
BF_FATAL("Unknown hotkey key name");
|
|
return false;
|
|
}
|
|
|
|
///
|
|
|
|
BFWindow::BFWindow()
|
|
{
|
|
mParent = NULL;
|
|
mMenu = NULL;
|
|
mRenderWindow = NULL;
|
|
mNonExclusiveMouseCapture = false;
|
|
|
|
mParent = NULL;
|
|
mMovedFunc = NULL;
|
|
mCloseQueryFunc = NULL;
|
|
mClosedFunc = NULL;
|
|
mGotFocusFunc = NULL;
|
|
mLostFocusFunc = NULL;
|
|
mKeyCharFunc = NULL;
|
|
mKeyDownFunc = NULL;
|
|
mKeyUpFunc = NULL;
|
|
mMouseMoveFunc = NULL;
|
|
mMouseProxyMoveFunc = NULL;
|
|
mMouseDownFunc = NULL;
|
|
mMouseUpFunc = NULL;
|
|
mMouseWheelFunc = NULL;
|
|
mMouseLeaveFunc = NULL;
|
|
mMenuItemSelectedFunc = NULL;
|
|
mHitTestFunc = NULL;
|
|
mFlags = 0;
|
|
|
|
for (int i = 0; i < KEYCODE_MAX; i++)
|
|
mIsKeyDown[i] = false;
|
|
for (int i = 0; i < MOUSEBUTTON_MAX; i++)
|
|
mIsMouseDown[i] = false;
|
|
}
|
|
|
|
BFWindow::~BFWindow()
|
|
{
|
|
delete mRenderWindow;
|
|
delete mMenu;
|
|
}
|