//----------------------------------------------------------------------------- // name: main_motion() // desc: ... //----------------------------------------------------------------------------- void AudicleWindow::main_motion( int x, int y ) { assert( this == AudicleWindow::main() ); set_mouse_coords(x,y); //XXX #ifdef MACOSX if ( 0 < x && x < m_cur_vp[2] && 0 < y && y < m_cur_vp[3] ) { if ( cursorOn ) { HideCursor(); cursorOn = false; } } else { if ( !cursorOn ) { ShowCursor(); cursorOn = true; } } #endif InputEvent * ev = new InputEvent ( ae_input_MOTION, m_cur_pt ); ev->time = get_current_time(); AudicleEvent event; event.type = ae_event_INPUT; event.message = 2; event.data = (void *) ev; Audicle::instance()->face()->on_event( event ); delete ev; //XXX assumes unqueued... }
Input InputManager::get_input(){ static bool exit = false; frame_text.resize(0); SDL_Event evnt; SDL_StartTextInput(); //Will keep looping until there are no more events to process while (SDL_PollEvent(&evnt)) { switch (evnt.type) { case SDL_QUIT: return Input::EXIT_REQUEST; break; case SDL_MOUSEMOTION: set_mouse_coords((F32)evnt.motion.x, (F32)evnt.motion.y); break; case SDL_TEXTINPUT: frame_text += evnt.text.text; break; case SDL_KEYDOWN: key_press(evnt.key.keysym.sym , KEYBOARD); break; case SDL_KEYUP: key_release(evnt.key.keysym.sym , KEYBOARD); break; case SDL_MOUSEBUTTONDOWN: key_press(evnt.button.button , MOUSE); break; case SDL_MOUSEBUTTONUP: key_release(evnt.button.button , MOUSE); break; case SDL_JOYBUTTONDOWN: /* Handle Joystick Button Presses */ key_press(evnt.jbutton.button , CONTROLLER); break; case SDL_JOYBUTTONUP: /* Handle Joystick Button Presses */ key_release(evnt.jbutton.button , CONTROLLER); break; case SDL_JOYAXISMOTION: switch (evnt.jaxis.axis){ case 0: set_controller_axis_coord(&m_controller_LX_coords.x, evnt.jaxis.value); break; case 1: set_controller_axis_coord(&m_controller_LX_coords.y, evnt.jaxis.value); break; case 2: set_controller_axis_coord(&m_controller_RX_coords.x, evnt.jaxis.value); break; case 3: set_controller_axis_coord(&m_controller_RX_coords.y, evnt.jaxis.value); break; } } } SDL_StopTextInput(); if (is_key_pressed(SDLK_ESCAPE,KEYBOARD))exit = !exit; if(!exit)SDL_WarpMouseInWindow(m_window, WINDOW_WIDTH / 2.0f, WINDOW_HEIGHT / 2.0f); return Input::OK; }
//----------------------------------------------------------------------------- // name: main_mouse() // desc: ... //----------------------------------------------------------------------------- void AudicleWindow::main_mouse( int button, int state, int x, int y) { assert( this == AudicleWindow::main() ); set_mouse_coords( x, y ); //fetch pick stack main_pick(); t_CKUINT * temp_stack = (t_CKUINT*) malloc ( m_pick_size * sizeof(t_CKUINT) ); memcpy ( (void*)temp_stack, (void*)m_pick_top, m_pick_size * sizeof(t_CKUINT) ); // create mouse input event InputEvent* ev = new InputEvent ( ae_input_MOUSE, m_cur_pt, button, state ); ev->setMods( glutGetModifiers() ); ev->setStack( temp_stack , m_pick_size ); ev->time = get_current_time(); InputEvent sub = *ev; //START AN AUDICLE EVENT //make_mouse_event( m_cur_pt, button, state ); AudicleEvent event; event.type = ae_event_INPUT; event.message = 2; event.param1 = button; event.param2 = state; event.data = (void *) ev; Audicle::instance()->face()->on_event( event ); sub.popStack(); // if( m_console ) // { // m_console->handleMouse( sub ); // m_console->handleMouseAlerts( sub ); // } free (temp_stack); delete ev; //XXX assumes unqueued... // if ( wm ) wm->handleMouse(button, state, cur_pt); // if ( DragManager::instance()->object() ) { } }
//----------------------------------------------------------------------------- // name: main_depressed_motion() // desc: ... //----------------------------------------------------------------------------- void AudicleWindow::main_depressed_motion( int x, int y ) { assert( this == AudicleWindow::main() ); set_mouse_coords(x,y); // if ( wm ) wm->handleMotion(cur_pt); InputEvent * ev = new InputEvent ( ae_input_MOTION, m_cur_pt ); ev->time = get_current_time(); AudicleEvent event; event.type = ae_event_INPUT; event.message = 2; event.data = (void *) ev; Audicle::instance()->face()->on_event( event ); delete ev; //XXX assumes unqueued... }
//----------------------------------------------------------------------------- // name: main_special_keys() // desc: ... //----------------------------------------------------------------------------- void AudicleWindow::main_special_keys( int key, int x, int y ) { assert( this == AudicleWindow::main() ); set_mouse_coords(x,y); InputEvent * ev = new InputEvent ( ae_input_SPEC, m_cur_pt, key ); ev->setMods( glutGetModifiers() ); ev->time = get_current_time(); AudicleEvent event; event.type = ae_event_INPUT; event.message = 2; event.data = (void *) ev; bool handled = false; if ( ev->mods & ae_input_CTRL ) { handled = true; switch ( key ) { case KEY_LEFTARROW: Audicle::instance()->move( Audicle::LEFT ); // if( m_console ) m_console->setCubes(); break; case KEY_RIGHTARROW: Audicle::instance()->move( Audicle::RIGHT ); // if( m_console ) m_console->setCubes(); break; case KEY_UPARROW: Audicle::instance()->move( Audicle::UP ); // if( m_console ) m_console->setCubes(); break; case KEY_DOWNARROW: Audicle::instance()->move( Audicle::DOWN ); // if( m_console ) m_console->setCubes(); break; default: handled = false; break; } } else { static float volume = 1.0f; handled = true; switch ( key ) { case KEY_LEFTARROW: break; case KEY_RIGHTARROW: break; case KEY_UPARROW: volume *= 1.05f; AudioCentral::instance()->set_gain( volume ); fprintf( stderr, "[volume]: %f\n", AudioCentral::instance()->get_gain() ); break; case KEY_DOWNARROW: volume *= 1.0f/1.1f; AudioCentral::instance()->set_gain( volume ); fprintf( stderr, "[volume]: %f\n", AudioCentral::instance()->get_gain() ); break; default: handled = false; break; } } if ( !handled ) { // if ( m_console && m_console->active() && m_console->selected() ) // { // m_console->handleSpec ( *ev ) ; // } // else // { Audicle::instance()->face()->on_event( event ); // } } delete ev; //XXX assumes unqueued... // if ( wm ) wm->handleSpec( key, cur_pt); }
//----------------------------------------------------------------------------- // name: main_keyboard() // desc: ... //----------------------------------------------------------------------------- void AudicleWindow::main_keyboard( unsigned char c, int x, int y ) { assert( this == AudicleWindow::main() ); set_mouse_coords(x,y); static int w = 1024, h = 768; InputEvent * ev = new InputEvent ( ae_input_KEY, m_cur_pt, c ); ev->setMods( glutGetModifiers() ); ev->time = get_current_time(); AudicleEvent event; event.type = ae_event_INPUT; event.message = 2; event.data = (void *) ev; bool handled = false; if( ev->mods & ae_input_CTRL ) { switch( c ) { case KEY_CTRL_G: our_fullscreen = !our_fullscreen; if( our_fullscreen ) { w = m_w; h = m_h; glutFullScreen(); } else glutReshapeWindow( w, h ); handled = true; break; case KEY_CTRL_Q: handled = true; exit( 0 ); break; } } else { switch ( c ) { case '`': if ( ev->mods & ae_input_ALT ) { m_antialiased = !m_antialiased; } // else if( m_console ) { // if ( m_console->active() ) m_console->deactivate(); // else m_console->activate(); // } handled = true; break; } } if ( !handled ) { // if ( m_console && m_console->active() && m_console->selected() ) { // m_console->handleKey( *ev ); // } // else { Audicle::instance()->face()->on_event( event ); // } } delete ev; //XXX assumes unqueued... // if ( wm ) wm->handleKey( c, cur_pt ); }