Ejemplo n.º 1
0
Rectf Control::getBounds( bool bIncludeSubviews )
{
    Rectf bounds = Rectf( 0.0f, 0.0f, getWidth(), getHeight() );
    Rectf hitRect = mHitRect;
    hitRect.x1-=mPadding.mLeft;     hitRect.y1-=mPadding.mTop;
    hitRect.x2+=mPadding.mRight;    hitRect.y2+=mPadding.mBottom;
    bounds.include( hitRect );
    if( bIncludeSubviews )
    {
        for ( auto &it : mSubViews )
        {
            bounds.include( it->getBounds( bIncludeSubviews ) );
        }
        bounds.offset( getOrigin( false ) );
    }
    else
    {
        bounds.offset( getOrigin() );
    }
    return bounds;
}
Ejemplo n.º 2
0
Rectf View::getBounds( bool bIncludeSubviews )
{
    Rectf bounds = Rectf( 0.0f, 0.0f, getWidth(), getHeight() );
    if( bIncludeSubviews )
    {
        for ( auto &it : mSubViews )
        {
            bounds.include( it->getBounds( bIncludeSubviews ) );
        }
        bounds.offset( getOrigin( false ) );
    }
    else
    {
        bounds.offset( getOrigin() );
    }
    return bounds;
}
Ejemplo n.º 3
0
void Grove::createMenuModal( const std::string &name, ci::Rectf *rect, ci::vec2 *offset, const WidgetRef &menu, const std::function<void()> &cancel, const std::function<void()> &confirm, bool adaptBackgroundColor )
{
	// create the layout
	Rectf fullRect	= *rect;
	fullRect.include( vec2( fullRect.getCenter().x, fullRect.getLowerRight().y + 180 ) );
	fullRect = fullRect.getCenteredFit( getWindowBounds(), false );
	
	// get the window bounds
#if defined( CINDER_COCOA_TOUCH )
	Rectf windowBounds = toPixels( Rectf( vec2( 0.0f ), vec2( getWindowHeight(), getWindowWidth() ) ) );
#else
	Rectf windowBounds = toPixels( getWindowBounds() );
#endif
	
	// if the screen is really small, add some extra margins
	if( abs( fullRect.getWidth() - windowBounds.getWidth() ) < 300 )
		fullRect.scaleCentered( (float) ( windowBounds.getWidth() - 300 ) / (float) fullRect.getWidth() );
	if( abs( fullRect.getHeight() - windowBounds.getHeight() ) < 300 )
		fullRect.scaleCentered( (float) ( windowBounds.getHeight() - 300 ) / (float) fullRect.getHeight() );
	
	*rect = (*rect).getCenteredFit( fullRect, false );
	(*rect).offset( vec2( 0.0f, -( fullRect.getHeight() - (*rect).getHeight() ) / 2.0f ) );
	*offset = vec2( 0.0f, -fullRect.getLowerLeft().y );
	
	auto fadeIn = [this](){
		timeline().applyPtr( &mFogDensity, 1.0f, 2.0f, EaseInAtan() );
		timeline().applyPtr( &mSunIntensity, 0.0f, 2.0f, EaseInAtan() )
		.updateFn( [this](){
			mTerrain->setFogDensity( mFogDensity );
			mTerrain->setSunIntensity( mSunIntensity );
		} );
	};
	auto fadeOut = [this](){
		timeline().applyPtr( &mFogDensity, 0.129f, 6.0f, EaseOutAtan() );
		timeline().applyPtr( &mSunIntensity, 0.166f, 6.0f, EaseOutAtan() )
		
		.updateFn( [this](){
			mTerrain->setFogDensity( mFogDensity );
			mTerrain->setSunIntensity( mSunIntensity );
		} );
	};
	
	// add events
	if( menu ){
		
		menu->onPressed( name, [=]( WidgetEvent event ) {
			if( adaptBackgroundColor ) fadeIn();
			
			mModal = true;
			event.getWidget()->close( true, event.getItem() );
			
			// wait for the menu to close
			timeline().add( [=](){
				timeline().applyPtr( offset, vec2(0), 1.0f, EaseInQuad() )
				.finishFn( [=]() {
					
					vector<string> items;
					if( confirm ) items = { "ConfirmWire", "QuitWire" };
					else items = { "QuitWire" };
					
					mWidget = Widget::create( Widget::Format()
											 .items( items )
											 .position( (*rect).getLowerLeft() + vec2( (*rect).getWidth() / 2 + ( confirm ? 69 : 0 ), ( fullRect.getHeight() - (*rect).getHeight() ) / 2 ) )
											 .autoClose( false ) );
					mWidget->onClose( [=]( WidgetEvent event ){
						timeline().applyPtr( offset, vec2( 0, -fullRect.getLowerLeft().y ), 1.0f, EaseOutQuad() );
						if( adaptBackgroundColor ) fadeOut();
					} );
					mWidget->onCloseEnded( [=]( WidgetEvent event ){
						mOpenMenuButton->open();
					} );
					if( confirm ){
						mWidget->onPressed( "ConfirmWire", [=]( WidgetEvent event ) {
							event.getWidget()->close();
							timeline().add( [=](){ mModal = false; }, timeline().getCurrentTime() + 1.5f );
							confirm();
						} );
					}
					mWidget->onPressed( "QuitWire", [=]( WidgetEvent event ) {
						event.getWidget()->close();
						timeline().add( [=](){ mModal = false; }, timeline().getCurrentTime() + 1.5f );
						if( cancel )
							cancel();
					} );
				} );
			}, timeline().getCurrentTime() + 1.0f );
		} );
	}
	else {
		
		vector<string> items;
		if( confirm ) items = { "ConfirmWire", "QuitWire" };
		else items = { "QuitWire" };
		
		mWidget = Widget::create( Widget::Format()
								 .items( items )
								 .position( (*rect).getLowerLeft() + vec2( (*rect).getWidth() / 2 + ( confirm ? 69 : 0 ), ( fullRect.getHeight() - (*rect).getHeight() ) / 2 ) )
								 .autoClose( false ) );
		mWidget->onClose( [=]( WidgetEvent event ){
			timeline().applyPtr( offset, vec2( 0, -fullRect.getLowerLeft().y ), 1.0f, EaseOutQuad() );
			if( adaptBackgroundColor ) fadeOut();
		} );
		mWidget->onCloseEnded( [=]( WidgetEvent event ){
			mOpenMenuButton->open();
		} );
		if( confirm ){
			mWidget->onPressed( "ConfirmWire", [=]( WidgetEvent event ) {
				event.getWidget()->close();
				timeline().add( [=](){ mModal = false; }, timeline().getCurrentTime() + 1.5f );
				confirm();
			} );
		}
		mWidget->onPressed( "QuitWire", [=]( WidgetEvent event ) {
			event.getWidget()->close();
			timeline().add( [=](){ mModal = false; }, timeline().getCurrentTime() + 1.5f );
			if( cancel )
				cancel();
		} );
		
		if( adaptBackgroundColor ) fadeIn();
		mModal = true;
		timeline().applyPtr( offset, vec2(0), 1.0f, EaseInQuad() );
	}
}