1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00
Beef/BeefySysLib/BFWindow.cpp
2020-05-16 10:11:04 -07:00

175 lines
3.9 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;
mMouseClickCount[i] = 0;
mMouseDownTicks[i] = 0;
mMouseDownCoords[i] = { -1, -1 };
}
}
BFWindow::~BFWindow()
{
delete mRenderWindow;
delete mMenu;
}