void Form::gamepadEventInternal(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex) { for (size_t i = 0; i < __forms.size(); ++i) { Form* form = __forms[i]; GP_ASSERT(form); if (form->isEnabled() && form->isVisible() && form->hasFocus()) { if (form->gamepadEvent(evt, gamepad, analogIndex)) return; } } }
void Form::updateInternal(float elapsedTime) { size_t size = __forms.size(); for (size_t i = 0; i < size; ++i) { Form* form = __forms[i]; GP_ASSERT(form); if (form->isEnabled() && form->isVisible()) { form->update(elapsedTime); } } }
bool Form::keyEventInternal(Keyboard::KeyEvent evt, int key) { size_t size = __forms.size(); for (size_t i = 0; i < size; ++i) { Form* form = __forms[i]; GP_ASSERT(form); if (form->isEnabled() && form->isVisible() && form->hasFocus() && !form->_isGamepad) { if (form->keyEvent(evt, key)) return true; } } return false; }
bool Form::touchEventInternal(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex) { // Check for a collision with each Form in __forms. // Pass the event on. size_t size = __forms.size(); for (size_t i = 0; i < size; ++i) { Form* form = __forms[i]; GP_ASSERT(form); if (form->isEnabled() && form->isVisible()) { if (form->_node) { Vector3 point; if (form->projectPoint(x, y, &point)) { const Rectangle& bounds = form->getBounds(); if (shouldPropagateTouchEvent(form->getState(), evt, bounds, point.x, point.y)) { if (form->touchEvent(evt, point.x - bounds.x, bounds.height - point.y - bounds.y, contactIndex)) return true; } } } else { // Simply compare with the form's bounds. const Rectangle& bounds = form->getBounds(); if (shouldPropagateTouchEvent(form->getState(), evt, bounds, x, y)) { // Pass on the event's position relative to the form. if (form->touchEvent(evt, x - bounds.x, y - bounds.y, contactIndex)) return true; } } } } return false; }
bool Form::mouseEventInternal(Mouse::MouseEvent evt, int x, int y, int wheelDelta) { for (size_t i = 0; i < __forms.size(); ++i) { Form* form = __forms[i]; GP_ASSERT(form); if (form->isEnabled() && form->isVisible()) { if (form->_node) { Vector3 point; if (form->projectPoint(x, y, &point)) { const Rectangle& bounds = form->getBounds(); if (shouldPropagateMouseEvent(form->getState(), evt, bounds, point.x, point.y)) { if (form->mouseEvent(evt, point.x - bounds.x, bounds.height - point.y - bounds.y, wheelDelta)) return true; } } } else { // Simply compare with the form's bounds. const Rectangle& bounds = form->getBounds(); if (shouldPropagateMouseEvent(form->getState(), evt, bounds, x, y)) { // Pass on the event's position relative to the form. if (form->mouseEvent(evt, x - bounds.x, y - bounds.y, wheelDelta)) return true; } } } } return false; }