예제 #1
0
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;
    }
}
예제 #2
0
/* 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;
}