touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y) { IGUIElement* rootguielement = m_guienv->getRootGUIElement(); if (rootguielement != NULL) { gui::IGUIElement *element = rootguielement->getElementFromPoint(core::position2d<s32>(x,y)); if (element) { for (unsigned int i = 0; i < after_last_element_id; i++) { if (element == m_buttons[i].guibutton) { return (touch_gui_button_id) i; } } } } return after_last_element_id; }
bool AutoHideButtonBar::isButton(const SEvent &event) { IGUIElement* rootguielement = m_guienv->getRootGUIElement(); if (rootguielement == NULL) { return false; } gui::IGUIElement *element = rootguielement->getElementFromPoint( core::position2d<s32>(event.TouchInput.X, event.TouchInput.Y)); if (element == NULL) { return false; } if (m_active) { /* check for all buttons in vector */ std::vector<button_info*>::iterator iter = m_buttons.begin(); while (iter != m_buttons.end()) { if ((*iter)->guibutton == element) { SEvent* translated = new SEvent(); memset(translated, 0, sizeof(SEvent)); translated->EventType = irr::EET_KEY_INPUT_EVENT; translated->KeyInput.Key = (*iter)->keycode; translated->KeyInput.Control = false; translated->KeyInput.Shift = false; translated->KeyInput.Char = 0; /* add this event */ translated->KeyInput.PressedDown = true; m_receiver->OnEvent(*translated); /* remove this event */ translated->KeyInput.PressedDown = false; m_receiver->OnEvent(*translated); delete translated; (*iter)->ids.push_back(event.TouchInput.ID); m_timeout = 0; return true; } ++iter; } } else { /* check for starter button only */ if (element == m_starter.guibutton) { m_starter.ids.push_back(event.TouchInput.ID); m_starter.guibutton->setVisible(false); m_starter.guibutton->setEnabled(false); m_active = true; m_timeout = 0; std::vector<button_info*>::iterator iter = m_buttons.begin(); while (iter != m_buttons.end()) { (*iter)->guibutton->setVisible(true); (*iter)->guibutton->setEnabled(true); ++iter; } return true; } } return false; }