void MouseToolHandler::onGLCapturedMouseMove(int x, int y, unsigned int mouseState)
{
    sendMoveEventToInactiveTools(x, y);

    for (ActiveMouseTools::const_iterator i = _activeMouseTools.begin(); i != _activeMouseTools.end();)
    {
        ui::MouseToolPtr tool = (i++)->second;

        switch (processMouseMoveEvent(tool, x, y))
        {
        case ui::MouseTool::Result::Finished:
            // Tool is done
            clearActiveMouseTool(tool);
            handleViewRefresh(tool->getRefreshMode());
            break;

        case ui::MouseTool::Result::Activated:
        case ui::MouseTool::Result::Continued:
            handleViewRefresh(tool->getRefreshMode());
            break;

        case ui::MouseTool::Result::Ignored:
            break;
        };
    }
}
void MouseToolHandler::sendMoveEventToInactiveTools(int x, int y)
{
    // Send mouse move events to all tools that want them
    GlobalMouseToolManager().getGroup(_type).foreachMouseTool([&] (const ui::MouseToolPtr& tool)
    {
        if (!tool->alwaysReceivesMoveEvents()) return;
        
        // The active tools don't receive this event a second time
        if (toolIsActive(tool)) return;

        processMouseMoveEvent(tool, x, y);
    });
}
void MouseToolHandler::onGLMouseMove(wxMouseEvent& ev)
{
    // Skip this event if any of the active mouse tools is in capture mode
    // the call here still arrives on OSX even during capture
    for (const ActiveMouseTools::value_type& pair : _activeMouseTools)
    {
        if (pair.second->getPointerMode() & ui::MouseTool::PointerMode::Capture)
        {
            return; // skip
        }
    }
    
    Vector2 position(ev.GetX(), ev.GetY());

    sendMoveEventToInactiveTools(ev.GetX(), ev.GetY());

    // Pass the move event to all active tools and clear the ones that are done
    for (ActiveMouseTools::const_iterator i = _activeMouseTools.begin();
         i != _activeMouseTools.end();)
    {
        ui::MouseToolPtr tool = (i++)->second;

        // Ask the active mousetool to handle this event
        switch (processMouseMoveEvent(tool, ev.GetX(), ev.GetY()))
        {
        case ui::MouseTool::Result::Finished:
            // Tool is done
            clearActiveMouseTool(tool);
            handleViewRefresh(tool->getRefreshMode());
            break;

        case ui::MouseTool::Result::Activated:
        case ui::MouseTool::Result::Continued:
            handleViewRefresh(tool->getRefreshMode());
            break;

        case ui::MouseTool::Result::Ignored:
            break;
        };
    }
}
Esempio n. 4
0
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;
    }
}