int main (int argc, const char * argv []) { MQUEUE_p_t *front = (MQUEUE_p_t *)malloc(MAX * sizeof(MQUEUE_p_t)); MQUEUE_p_t *rear = (MQUEUE_p_t *)malloc(MAX * sizeof(MQUEUE_p_t)); initQueue(front, rear); inputProcess(front, rear, 11, 1, 10); inputProcess(front, rear, 12, 1, 10); inputProcess(front, rear, 13, 1, 10); inputProcess(front, rear, 21, 2, 20); inputProcess(front, rear, 22, 2, 20); inputProcess(front, rear, 23, 2, 20); inputProcess(front, rear, 24, 2, 20); inputProcess(front, rear, 25, 2, 20); inputProcess(front, rear, 31, 3, 30); inputProcess(front, rear, 32, 3, 30); scheduleProcess(front); }
bool processWindowEvents(WindowState& _state, uint32_t& _debug, uint32_t& _reset) { s_debug = _debug; s_reset = _reset; WindowHandle handle = { UINT16_MAX }; bool mouseLock = inputIsMouseLocked(); const Event* ev; do { struct SE { SE(WindowHandle _handle) : m_ev(poll(_handle) ) { } ~SE() { if (NULL != m_ev) { release(m_ev); } } const Event* m_ev; } scopeEvent(handle); ev = scopeEvent.m_ev; if (NULL != ev) { handle = ev->m_handle; WindowState& win = s_window[handle.idx]; switch (ev->m_type) { case Event::Axis: { const AxisEvent* axis = static_cast<const AxisEvent*>(ev); inputSetGamepadAxis(axis->m_gamepad, axis->m_axis, axis->m_value); } break; case Event::Char: { const CharEvent* chev = static_cast<const CharEvent*>(ev); win.m_handle = chev->m_handle; inputChar(chev->m_len, chev->m_char); } break; case Event::Exit: return true; case Event::Gamepad: { const GamepadEvent* gev = static_cast<const GamepadEvent*>(ev); DBG("gamepad %d, %d", gev->m_gamepad.idx, gev->m_connected); } break; case Event::Mouse: { const MouseEvent* mouse = static_cast<const MouseEvent*>(ev); win.m_handle = mouse->m_handle; if (mouse->m_move) { inputSetMousePos(mouse->m_mx, mouse->m_my, mouse->m_mz); } else { inputSetMouseButtonState(mouse->m_button, mouse->m_down); } if (!mouseLock) { if (mouse->m_move) { win.m_mouse.m_mx = mouse->m_mx; win.m_mouse.m_my = mouse->m_my; win.m_mouse.m_mz = mouse->m_mz; } else { win.m_mouse.m_buttons[mouse->m_button] = mouse->m_down; } } } break; case Event::Key: { const KeyEvent* key = static_cast<const KeyEvent*>(ev); win.m_handle = key->m_handle; inputSetKeyState(key->m_key, key->m_modifiers, key->m_down); } break; case Event::Size: { const SizeEvent* size = static_cast<const SizeEvent*>(ev); win.m_handle = size->m_handle; win.m_width = size->m_width; win.m_height = size->m_height; _reset = win.m_handle.idx == 0 ? !s_reset : _reset ; // force reset } break; case Event::Window: { const WindowEvent* window = static_cast<const WindowEvent*>(ev); win.m_handle = window->m_handle; win.m_nwh = window->m_nwh; ev = NULL; } break; default: break; } } inputProcess(); } while (NULL != ev); if (isValid(handle) ) { const WindowState& win = s_window[handle.idx]; _state = win; if (handle.idx == 0) { inputSetMouseResolution(win.m_width, win.m_height); } } if (_reset != s_reset) { _reset = s_reset; bgfx::reset(s_window[0].m_width, s_window[0].m_height, _reset); inputSetMouseResolution(s_window[0].m_width, s_window[0].m_height); } _debug = s_debug; return s_exit; }
bool processEvents(uint32_t& _width, uint32_t& _height, uint32_t& _debug, uint32_t& _reset, MouseState* _mouse) { s_debug = _debug; s_reset = _reset; WindowHandle handle = { UINT16_MAX }; bool mouseLock = inputIsMouseLocked(); const Event* ev; do { struct SE { const Event* m_ev; SE() : m_ev(poll() ) {} ~SE() { if (NULL != m_ev) { release(m_ev); } } } scopeEvent; ev = scopeEvent.m_ev; if (NULL != ev) { switch (ev->m_type) { case Event::Axis: { const AxisEvent* axis = static_cast<const AxisEvent*>(ev); inputSetGamepadAxis(axis->m_gamepad, axis->m_axis, axis->m_value); } break; case Event::Char: { const CharEvent* chev = static_cast<const CharEvent*>(ev); inputChar(chev->m_len, chev->m_char); } break; case Event::Exit: return true; case Event::Gamepad: { const GamepadEvent* gev = static_cast<const GamepadEvent*>(ev); DBG("gamepad %d, %d", gev->m_gamepad.idx, gev->m_connected); } break; case Event::Mouse: { const MouseEvent* mouse = static_cast<const MouseEvent*>(ev); handle = mouse->m_handle; if (mouse->m_move) { inputSetMousePos(mouse->m_mx, mouse->m_my, mouse->m_mz); } else { inputSetMouseButtonState(mouse->m_button, mouse->m_down); } if (NULL != _mouse && !mouseLock) { if (mouse->m_move) { _mouse->m_mx = mouse->m_mx; _mouse->m_my = mouse->m_my; _mouse->m_mz = mouse->m_mz; } else { _mouse->m_buttons[mouse->m_button] = mouse->m_down; } } } break; case Event::Key: { const KeyEvent* key = static_cast<const KeyEvent*>(ev); handle = key->m_handle; inputSetKeyState(key->m_key, key->m_modifiers, key->m_down); } break; case Event::Size: { const SizeEvent* size = static_cast<const SizeEvent*>(ev); handle = size->m_handle; _width = size->m_width; _height = size->m_height; _reset = !s_reset; // force reset } break; case Event::Window: break; default: break; } } inputProcess(); } while (NULL != ev); if (handle.idx == 0 && _reset != s_reset) { _reset = s_reset; bgfx::reset(_width, _height, _reset); inputSetMouseResolution(_width, _height); } _debug = s_debug; return s_exit; }