void GUI::handleEvent(const SDL_Event &event) { auto k = event.key.keysym.sym; switch (event.type) { case SDL_MOUSEBUTTONDOWN: mouseDown(event.button.button); break; case SDL_MOUSEBUTTONUP: mouseUp(event.button.button); break; case SDL_MOUSEMOTION: mouseMovement(event.motion.x, event.motion.y); break; case SDL_KEYDOWN: context->injectKeyDown(key(event.key.keysym.sym)); if (key(event.key.keysym.sym) < 95) // REALLY UGLY FIX, 95 IS A RANDOM NUMBER NO GUARANTY IT WILL ALWAYS WORK context->injectChar(key(event.key.keysym.sym)); break; case SDL_KEYUP: context->injectKeyUp(key(event.key.keysym.sym)); break; } }
/* GENERAL */ void Scrollbar::tick() { io::IMouse* mouse(CONTROLS->getMouse(GRAPHICS->getActiveWindow())); const vec2 mousePos(mouse->getPosition()); const vec2 hitrectPos(m_Hitregion->getPosition()); if (mouse->isButtonDown(io::MouseButton_Left)) { if (m_Hitregion->hitTest(mousePos)) { m_Dragging = true; } } else { m_Dragging = false; m_PreviousMousePos = mousePos; } if (m_Dragging) { vec2 mouseMovement(0.0f,0.0f); if (mousePos.y >= m_Pos.y && mousePos.y <= m_Pos.y + m_Size.y) mouseMovement = mousePos - m_PreviousMousePos; m_PreviousMousePos = mousePos; m_Hitregion->move(vec2(0, mouseMovement.y)); if (hitrectPos.y - (m_ScrollbarHeight/2) < m_Pos.y) m_Hitregion->setPosition(vec2(hitrectPos.x, m_Pos.y + (m_ScrollbarHeight/2))); else if (hitrectPos.y + (m_ScrollbarHeight/2) > m_Pos.y + m_Size.y) m_Hitregion->setPosition(vec2(hitrectPos.x, m_Pos.y + m_Size.y - (m_ScrollbarHeight/2))); m_BarPos = (hitrectPos.y - m_Pos.y - (m_ScrollbarHeight/2)) / (m_Size.y - m_ScrollbarHeight); } if (m_BarPos < 0) m_BarPos = 0; else if (m_BarPos > 1.0f) m_BarPos = 1.0f; }