Ejemplo n.º 1
0
	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;
	}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}