void MouseToolHandler::onGLMouseButtonRelease(wxMouseEvent& ev)
{
    if (_activeMouseTools.empty()) return;

    // Determine the button that has been released
    unsigned int state = wxutil::MouseButton::GetButtonStateChangeForMouseEvent(ev) & wxutil::MouseButton::ALL_BUTTON_MASK;

    ActiveMouseTools::const_iterator i = _activeMouseTools.find(state);

    if (i != _activeMouseTools.end())
    {
        // Ask the active mousetool to handle this event
        ui::MouseTool::Result result = processMouseUpEvent(i->second, Vector2(ev.GetX(), ev.GetY()));

        if (result == ui::MouseTool::Result::Finished)
        {
            clearActiveMouseTool(i->second);
        }
    }
}
void InputWrapper::processEvent(SDL_Event *event){
    switch(event->type){
    case SDL_KEYDOWN:
        processKeyDownEvent(event);
        break;

    case SDL_KEYUP:
        processKeyUpEvent(event);
        break;

    case SDL_MOUSEMOTION:
        processMouseMoveEvent(event);
        break;

    case SDL_MOUSEBUTTONDOWN:
        processMouseDownEvent(event);
        break;

    case SDL_MOUSEBUTTONUP:
        processMouseUpEvent(event);
        break;
    }
}