Update to v094r24 release.

byuu says:

Finally!! Compilation works once again on Windows.

However, it's pretty buggy. Modality isn't really working right, you can
still poke at other windows, but when you select ListView items, they
redraw as empty boxes (need to process WM_DRAWITEM before checking
modality.)

The program crashes when you close it (probably a ruby driver's term()
function, that's what it usually is.)

The Layout::setEnabled(false) call isn't working right, so you get that
annoying chiming sound and cursor movement when mapping keyboard keys to
game inputs.

The column sizing seems off a bit on first display for the Hotkeys tab.

And probably lots more.
This commit is contained in:
Tim Allen
2015-06-12 23:14:38 +10:00
parent 314aee8c5c
commit f0c17ffc0d
188 changed files with 5474 additions and 3834 deletions

View File

@@ -1,144 +1,99 @@
namespace phoenix {
#if defined(Hiro_Keyboard)
void pKeyboard::initialize() {
auto append = [](Keyboard::Scancode scancode, unsigned keysym) {
settings->keymap.insert(scancode, keysym);
};
namespace hiro {
append(Keyboard::Scancode::Escape, VK_ESCAPE);
append(Keyboard::Scancode::F1, VK_F1);
append(Keyboard::Scancode::F2, VK_F2);
append(Keyboard::Scancode::F3, VK_F3);
append(Keyboard::Scancode::F4, VK_F4);
append(Keyboard::Scancode::F5, VK_F5);
append(Keyboard::Scancode::F6, VK_F6);
append(Keyboard::Scancode::F7, VK_F7);
append(Keyboard::Scancode::F8, VK_F8);
append(Keyboard::Scancode::F9, VK_F9);
append(Keyboard::Scancode::F10, VK_F10);
append(Keyboard::Scancode::F11, VK_F11);
append(Keyboard::Scancode::F12, VK_F12);
vector<uint16_t> pKeyboard::keycodes;
append(Keyboard::Scancode::PrintScreen, VK_SNAPSHOT);
append(Keyboard::Scancode::ScrollLock, VK_SCROLL);
append(Keyboard::Scancode::Pause, VK_PAUSE);
append(Keyboard::Scancode::Insert, VK_INSERT);
append(Keyboard::Scancode::Delete, VK_DELETE);
append(Keyboard::Scancode::Home, VK_HOME);
append(Keyboard::Scancode::End, VK_END);
append(Keyboard::Scancode::PageUp, VK_PRIOR);
append(Keyboard::Scancode::PageDown, VK_NEXT);
append(Keyboard::Scancode::Up, VK_UP);
append(Keyboard::Scancode::Down, VK_DOWN);
append(Keyboard::Scancode::Left, VK_LEFT);
append(Keyboard::Scancode::Right, VK_RIGHT);
append(Keyboard::Scancode::Grave, VK_OEM_3);
append(Keyboard::Scancode::Number1, '1');
append(Keyboard::Scancode::Number2, '2');
append(Keyboard::Scancode::Number3, '3');
append(Keyboard::Scancode::Number4, '4');
append(Keyboard::Scancode::Number5, '5');
append(Keyboard::Scancode::Number6, '6');
append(Keyboard::Scancode::Number7, '7');
append(Keyboard::Scancode::Number8, '8');
append(Keyboard::Scancode::Number9, '9');
append(Keyboard::Scancode::Number0, '0');
append(Keyboard::Scancode::Minus, VK_OEM_MINUS);
append(Keyboard::Scancode::Equal, VK_OEM_PLUS);
append(Keyboard::Scancode::Backspace, VK_BACK);
append(Keyboard::Scancode::BracketLeft, VK_OEM_4);
append(Keyboard::Scancode::BracketRight, VK_OEM_6);
append(Keyboard::Scancode::Backslash, VK_OEM_5);
append(Keyboard::Scancode::Semicolon, VK_OEM_1);
append(Keyboard::Scancode::Apostrophe, VK_OEM_7);
append(Keyboard::Scancode::Comma, VK_OEM_COMMA);
append(Keyboard::Scancode::Period, VK_OEM_PERIOD);
append(Keyboard::Scancode::Slash, VK_OEM_2);
append(Keyboard::Scancode::Tab, VK_TAB);
append(Keyboard::Scancode::CapsLock, VK_CAPITAL);
append(Keyboard::Scancode::Return, VK_RETURN);
append(Keyboard::Scancode::ShiftLeft, VK_LSHIFT);
append(Keyboard::Scancode::ShiftRight, VK_RSHIFT);
append(Keyboard::Scancode::ControlLeft, VK_LCONTROL);
append(Keyboard::Scancode::ControlRight, VK_RCONTROL);
append(Keyboard::Scancode::SuperLeft, VK_LWIN);
append(Keyboard::Scancode::SuperRight, VK_RWIN);
append(Keyboard::Scancode::AltLeft, VK_LMENU);
append(Keyboard::Scancode::AltRight, VK_RMENU);
append(Keyboard::Scancode::Space, VK_SPACE);
append(Keyboard::Scancode::Menu, VK_APPS);
append(Keyboard::Scancode::A, 'A');
append(Keyboard::Scancode::B, 'B');
append(Keyboard::Scancode::C, 'C');
append(Keyboard::Scancode::D, 'D');
append(Keyboard::Scancode::E, 'E');
append(Keyboard::Scancode::F, 'F');
append(Keyboard::Scancode::G, 'G');
append(Keyboard::Scancode::H, 'H');
append(Keyboard::Scancode::I, 'I');
append(Keyboard::Scancode::J, 'J');
append(Keyboard::Scancode::K, 'K');
append(Keyboard::Scancode::L, 'L');
append(Keyboard::Scancode::M, 'M');
append(Keyboard::Scancode::N, 'N');
append(Keyboard::Scancode::O, 'O');
append(Keyboard::Scancode::P, 'P');
append(Keyboard::Scancode::Q, 'Q');
append(Keyboard::Scancode::R, 'R');
append(Keyboard::Scancode::S, 'S');
append(Keyboard::Scancode::T, 'T');
append(Keyboard::Scancode::U, 'U');
append(Keyboard::Scancode::V, 'V');
append(Keyboard::Scancode::W, 'W');
append(Keyboard::Scancode::X, 'X');
append(Keyboard::Scancode::Y, 'Y');
append(Keyboard::Scancode::Z, 'Z');
append(Keyboard::Scancode::NumLock, VK_NUMLOCK);
append(Keyboard::Scancode::Divide, VK_DIVIDE);
append(Keyboard::Scancode::Multiply, VK_MULTIPLY);
append(Keyboard::Scancode::Subtract, VK_SUBTRACT);
append(Keyboard::Scancode::Add, VK_ADD);
//append(Keyboard::Scancode::Enter, ...);
append(Keyboard::Scancode::Point, VK_DECIMAL);
append(Keyboard::Scancode::Keypad1, VK_NUMPAD1);
append(Keyboard::Scancode::Keypad2, VK_NUMPAD2);
append(Keyboard::Scancode::Keypad3, VK_NUMPAD3);
append(Keyboard::Scancode::Keypad4, VK_NUMPAD4);
append(Keyboard::Scancode::Keypad5, VK_NUMPAD5);
append(Keyboard::Scancode::Keypad6, VK_NUMPAD6);
append(Keyboard::Scancode::Keypad7, VK_NUMPAD7);
append(Keyboard::Scancode::Keypad8, VK_NUMPAD8);
append(Keyboard::Scancode::Keypad9, VK_NUMPAD9);
append(Keyboard::Scancode::Keypad0, VK_NUMPAD0);
auto pKeyboard::poll() -> vector<bool> {
vector<bool> result;
for(auto& code : keycodes) result.append(pressed(code));
return result;
}
bool pKeyboard::pressed(Keyboard::Scancode scancode) {
if(auto result = settings->keymap.find(scancode)) {
return GetAsyncKeyState(result()) & 0x8000;
}
auto pKeyboard::pressed(unsigned code) -> bool {
uint8_t lo = code >> 0;
uint8_t hi = code >> 8;
if(lo && GetAsyncKeyState(lo) & 0x8000) return true;
if(hi && GetAsyncKeyState(hi) & 0x8000) return true;
return false;
}
vector<bool> pKeyboard::state() {
vector<bool> output;
output.resize((unsigned)Keyboard::Scancode::Limit);
for(auto& n : output) n = false;
auto pKeyboard::initialize() -> void {
auto append = [](unsigned lo, unsigned hi = 0) {
keycodes.append(lo << 0 | hi << 8);
};
for(auto node : settings->keymap) {
if(GetAsyncKeyState(node.value) & 0x8000) {
output[(unsigned)node.key] = true;
}
#define map(name, ...) if(key == name) { append(__VA_ARGS__); continue; }
for(auto& key : Keyboard::keys) {
#include <hiro/platform/windows/keyboard.hpp>
//print("[hiro/windows] warning: unhandled key: ", key, "\n");
append(0);
}
#undef map
}
auto pKeyboard::_translate(unsigned code, unsigned flags) -> signed {
bool numLock = GetKeyState(VK_NUMLOCK);
bool capsLock = GetKeyState(VK_CAPITAL);
bool shifted = (GetAsyncKeyState(VK_LSHIFT) & 0x8000) || (GetAsyncKeyState(VK_RSHIFT) & 0x8000);
bool pressed = GetAsyncKeyState(code) & 0x8000;
bool extended = flags & (1 << 24);
switch(code) {
case VK_OEM_3: return !shifted ? '`' : '~';
case '1': return !shifted ? '1' : '!';
case '2': return !shifted ? '2' : '@';
case '3': return !shifted ? '3' : '#';
case '4': return !shifted ? '4' : '$';
case '5': return !shifted ? '5' : '%';
case '6': return !shifted ? '6' : '^';
case '7': return !shifted ? '7' : '&';
case '8': return !shifted ? '8' : '*';
case '9': return !shifted ? '9' : '(';
case '0': return !shifted ? '0' : ')';
case VK_OEM_MINUS: return !shifted ? '-' : '_';
case VK_OEM_PLUS: return !shifted ? '=' : '+';
case VK_BACK: return '\b';
case VK_TAB: return '\t';
case VK_RETURN: return '\n';
case VK_SPACE: return ' ';
case VK_OEM_4: return !shifted ? '[' : '{';
case VK_OEM_6: return !shifted ? ']' : '}';
case VK_OEM_5: return !shifted ? '\\' : '|';
case VK_OEM_1: return !shifted ? ';' : ':';
case VK_OEM_7: return !shifted ? '\'' : '\"';
case VK_OEM_COMMA: return !shifted ? ',' : '<';
case VK_OEM_PERIOD: return !shifted ? '.' : '>';
case VK_OEM_2: return !shifted ? '/' : '?';
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M':
case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
if(capsLock) return !shifted ? code : code + 32;
else return !shifted ? code + 32 : code;
case VK_DIVIDE: return '/';
case VK_MULTIPLY: return '*';
case VK_SUBTRACT: return '-';
case VK_ADD: return '+';
case VK_DECIMAL: return '.';
case VK_NUMPAD1: return numLock ? '1' : 0;
case VK_NUMPAD2: return numLock ? '2' : 0;
case VK_NUMPAD3: return numLock ? '3' : 0;
case VK_NUMPAD4: return numLock ? '4' : 0;
case VK_NUMPAD5: return numLock ? '5' : 0;
case VK_NUMPAD6: return numLock ? '6' : 0;
case VK_NUMPAD7: return numLock ? '7' : 0;
case VK_NUMPAD8: return numLock ? '8' : 0;
case VK_NUMPAD9: return numLock ? '9' : 0;
case VK_NUMPAD0: return numLock ? '0' : 0;
}
return output;
return 0;
}
}
#endif