Exemple #1
0
void Glut2DView::ExecCommand(Command &command)
{
    switch (command.GetId()) {
        case TRANSLATE_COMMAND: {
            TranslateBy(((TranslateCommand*)(&command))->trans.x, 
                        ((TranslateCommand*)(&command))->trans.y);    
            RedisplayCommand redisplay;
            GlutView::ExecCommand(redisplay);
            } break;

        case ZOOM_COMMAND: {
            ZoomBy(((ZoomCommand*) &command)->zoom.x,
                   ((ZoomCommand*) &command)->zoom.y);
            RedisplayCommand redisplay;
            GlutView::ExecCommand(redisplay);
            } break;

        case ZOOM_X_COMMAND: {
            ZoomBy(((ZoomCommand*) &command)->zoom.x, 1.0);
            RedisplayCommand redisplay;
            GlutView::ExecCommand(redisplay);
            } break;

        case ZOOM_Y_COMMAND: {
            ZoomBy(1.0, ((ZoomCommand*) &command)->zoom.y);
            RedisplayCommand redisplay;
            GlutView::ExecCommand(redisplay);
            } break;

        case FOCUS_COMMAND: {
            FocusCommand* cmd = (FocusCommand*) &command;
            Vertex2d focus = WindowToWorld(cmd->focus.x, cmd->focus.y);
            SetFocus(focus.x, focus.y);
            } break;
        default:
            GlutView::ExecCommand(command);
    }
}
Exemple #2
0
void SummonController::ExecCommand(Command &command)
{
    // route view commands to connected view
    if (g_viewAttr.Has(&command))
    {
        m_view->ExecCommand(command);
        return;
    }

    // send SUMMON commands that are not for controller to global
    // NOTE: why did I have this greater than GLUT_COMMANDS_BEGIN
    //    To prevent an infinite loop (GLUT commands are processed here)    
    if (command.GetId() > GLUT_COMMANDS_END &&
        !g_controllerAttr.Has(&command))
    {
        m_global->ExecCommand(command);
        return;
    }
    
    // controller commands
    switch (command.GetId()) {
        case SET_BINDING_COMMAND:
            m_binding->AddBinding(((SetBindingCommand*)&command)->input,
                                  ((SetBindingCommand*)&command)->command);
            break;
        
        case CLEAR_BINDING_COMMAND: {
            Input *input = ((ClearBindingCommand*)&command)->input;
            m_binding->ClearBinding(*input);
            delete input;
            } break;
        
        case CLEAR_ALL_BINDINGS_COMMAND: {
            m_binding->Clear();
            } break;
        
        case HOTSPOT_CLICK_COMMAND:
            HotspotClick(((HotspotClickCommand*) &command)->pos, 
                         Hotspot::CLICK);
            break;
            
        case HOTSPOT_DRAG_COMMAND:
            HotspotClick(((HotspotClickCommand*) &command)->pos, 
                         Hotspot::DRAG);
            break;
            
        case HOTSPOT_DRAG_START_COMMAND:
            HotspotClick(((HotspotClickCommand*) &command)->pos,
                         Hotspot::DRAG_START);
            break;
            
        case HOTSPOT_DRAG_STOP_COMMAND:
            HotspotClick(((HotspotClickCommand*) &command)->pos,
                         Hotspot::DRAG_STOP);
            break;
        
                
        case GET_MOUSE_POS_COMMAND: {
            Vertex2i pos = GetMousePos();
            Vertex2f pos2(-1,-1);
            GetMousePosCommand* cmd = (GetMousePosCommand*) &command;
            
            if (cmd->kind == "world") {
                pos2 = m_view->WindowToWorld(pos.x, pos.y);
            } else if (cmd->kind == "screen") {
                pos2 = m_view->WindowToScreen(pos.x, pos.y);
            } else if (cmd->kind == "window") {
                pos2 = pos;
            } else {
                Error("Unknown coordinate system '%s'", cmd->kind.c_str());
            }
            
            cmd->SetReturn(BuildScm("ff", pos2.x, pos2.y));
            } break;
        
                
        case SET_WINDOW_ON_RESIZE_COMMAND: {
            SetWindowOnResizeCommand *resize = (SetWindowOnResizeCommand*) &command;
            m_resizeProc = resize->proc;
            } break;
        
        case SET_WINDOW_ON_MOVE_COMMAND: {
            SetWindowOnMoveCommand *move = (SetWindowOnMoveCommand*) &command;
            m_moveProc = move->proc;
            } break;
        
        default:
            // execute default commands
            Glut2DController::ExecCommand(command);
    }
}