virtual void handle_key_event(g_key_event& e) { waitingInputLock.lock(); waitingInput.push_back(g_keyboard::fullKeyInfo(e.info)); lastInput = g_millis(); noInputAvailable = false; waitingInputLock.unlock(); }
g_component* g_component_registry::get(g_ui_component_id id) { if (components.count(id) > 0) { components_lock.lock(); g_component* component = components[id]; components_lock.unlock(); return component; } return 0; }
g_key_info gui_screen_t::readInput() { if (waitingInput.size() == 0) { g_atomic_block(&noInputAvailable); } waitingInputLock.lock(); g_key_info result = waitingInput.front(); waitingInput.pop_front(); if (waitingInput.size() == 0) { noInputAvailable = true; } waitingInputLock.unlock(); return result; }
void poll() { static g_lock pollLock; pollLock.lock(); uint8_t status; while (((status = g_utils::inportByte(0x64)) & 1) != 0) { uint8_t value = g_utils::inportByte(0x60); bool fromKeyboard = ((status & (1 << 5)) == 0); if (fromKeyboard) { handle_keyboard_data(value); } else { handle_mouse_data(value); } ++packets_count; } pollLock.unlock(); }
void g_component_registry::add(g_component* component) { components_lock.lock(); components[component->getId()] = component; components_lock.unlock(); }