bool TestStage::onMouse( MouseMsg const& msg ) { if ( !BaseClass::onMouse( msg ) ) return false; GameWindow& window = Global::getDrawEngine()->getWindow(); if ( msg.onLeftDown() ) { Light light; light.pos = Vec2f( msg.getPos().x , window.getHeight() - msg.getPos().y ); light.color = Color( float( ::Global::Random() ) / RAND_MAX , float( ::Global::Random() ) / RAND_MAX , float( ::Global::Random() ) / RAND_MAX ); lights.push_back( light ); } else if ( msg.onRightDown() ) { Block block; block.setBox( Vec2f( msg.getPos().x , window.getHeight() - msg.getPos().y ) , Vec2f( 50 , 50 ) ); blocks.push_back( block ); } else if ( msg.onMoving() ) { if ( !lights.empty() ) { lights.back().pos = Vec2f( msg.getPos().x , window.getHeight() - msg.getPos().y ); } } return true; }
bool Game::onMouse( MouseMsg const& msg ) { mMousePos = msg.getPos(); if ( !GUISystem::getInstance().mManager.procMouseMsg( msg ) ) { if ( !msg.onMoving() ) return true; } mStageStack.back()->onMouse( msg ); return true; }
bool TUIManager<T>::procMouseMsg( MouseMsg const& msg ) { PROFILE_ENTRY("UI System"); bool result = true; mProcessingMsg = true; mMouseMsg = msg; TUICore<T>* ui; if ( mUICapture ) { ui = mUICapture; } else if ( mUIModal ) { if ( mUIModal->hitTest( mMouseMsg.getPos() ) ) ui = mUIModal->hitTestChildren( mMouseMsg.getPos() - mUIModal->getPos() ); else ui = NULL; } else { ui = hitTest( mMouseMsg.getPos() ); } mUILastMouseMsg = ui; { PROFILE_ENTRY("Msg Process"); if ( msg.onLeftDown() ) { if ( mUIFocus != ui ) { if ( mUIFocus ) mUIFocus->focus( false ); mUIFocus = ui; if ( ui ) ui->focus( true ); } } else if ( msg.onMoving() ) { if ( mUIMouse != ui ) { if ( mUIMouse ) mUIMouse->mouseOverlap( false ); mUIMouse = ui; if ( ui ) ui->mouseOverlap( true ); } } if ( ui ) { if ( msg.isDraging() && ui != mUIFocus ) { result = ( mUIFocus == NULL ) ; } else { result = ui->onMouseMsg( mMouseMsg ); while ( result && ui->checkFlag( UF_PARENT_MOUSE_EVENT ) ) { if ( ui->getParent() == &mRoot ) break; ui->_removeFlag( UF_PARENT_MOUSE_EVENT ); ui = static_cast< T* >( ui->getParent() ); result = ui->onMouseMsg( mMouseMsg ); mUILastMouseMsg = ui; } } //while ( bool still = ui->onMouseMsg( mMouseMsg ) ) //{ // ui = ui->getParent(); // if ( !still || ui == getRoot() ) // return still; //} } } mProcessingMsg = false; cleanupDestroyUI(); return result; }