void RocketModule::keyEvent( int key, bool pressed ) { KeyConverter keyconv; int mod; // DEBUG #if 0 if( key >= 32 && key <= 126 ) Com_Printf("**KEYEVENT CHAR %c\n", key & 0xff ); else Com_Printf("**KEYEVENT KEY %d\n", key ); #endif mod = keyconv.getModifiers(); // warsow sends mousebuttons as keys if( key >= K_MOUSE1 && key <= K_MOUSE8 ) { if( pressed ) context->ProcessMouseButtonDown( key-K_MOUSE1, mod ); else context->ProcessMouseButtonUp( key-K_MOUSE1, mod ); } // and ditto for wheel else if( key == K_MWHEELDOWN ) { context->ProcessMouseWheel( KI_MWHEELDOWN, mod ); } else if( key == K_MWHEELUP ) { context->ProcessMouseWheel( KI_MWHEELUP, mod ); } else { // send the blur event, to the current focused element, // when ESC key is pressed if( key == K_ESCAPE ) { Element* element = context->GetFocusElement(); if( element ) element->Blur(); } int rkey = keyconv.toRocketKey( key ); if( rkey != 0 ) { if( pressed ) context->ProcessKeyDown( Rocket::Core::Input::KeyIdentifier( rkey ), keyconv.getModifiers() ); else context->ProcessKeyUp( Rocket::Core::Input::KeyIdentifier( rkey ), keyconv.getModifiers() ); } } }
void RocketModule::keyEvent( int contextId, int key, bool pressed ) { // DEBUG #if 0 if( key >= 32 && key <= 126 ) Com_Printf("**KEYEVENT CHAR %c\n", key & 0xff ); else Com_Printf("**KEYEVENT KEY %d\n", key ); #endif if( key == K_MOUSE1DBLCLK ) return; // Rocket handles double click internally auto *context = contextForId( contextId ); Element *element = context->GetFocusElement(); int mod = KeyConverter::getModifiers(); // send the blur event, to the current focused element, when ESC key is pressed if( ( key == K_ESCAPE ) && element ) element->Blur(); if( element && ( element->GetTagName() == "keyselect" ) ) { if( pressed ) { Rocket::Core::Dictionary parameters; parameters.Set( "key", key ); element->DispatchEvent( "keyselect", parameters ); } } else if( key >= K_MOUSE1 && key <= K_MOUSE8 ) // warsow sends mousebuttons as keys { if( pressed ) context->ProcessMouseButtonDown( key-K_MOUSE1, mod ); else context->ProcessMouseButtonUp( key-K_MOUSE1, mod ); } else if( key == K_MWHEELDOWN ) // and ditto for wheel { context->ProcessMouseWheel( 1, mod ); } else if( key == K_MWHEELUP ) { context->ProcessMouseWheel( -1, mod ); } else { if( ( key == K_A_BUTTON ) || ( key == K_DPAD_CENTER ) ) { if( pressed ) context->ProcessMouseButtonDown( 0, mod ); else context->ProcessMouseButtonUp( 0, mod ); } else { int rkey = KeyConverter::toRocketKey( key ); if( key == K_B_BUTTON ) { rkey = Rocket::Core::Input::KI_ESCAPE; if( element ) element->Blur(); } if( rkey != 0 ) { if( pressed ) context->ProcessKeyDown( Rocket::Core::Input::KeyIdentifier( rkey ), mod ); else context->ProcessKeyUp( Rocket::Core::Input::KeyIdentifier( rkey ), mod ); } } } }