Ejemplo n.º 1
0
void UserManager::setBounds( const Rectf &rect )
{
	mOutputRect = rect;

	Rectf kRect( 0, 0, 640, 480 ); // kinect image rect
	Rectf dRect = kRect.getCenteredFit( mOutputRect, true );
	if( mOutputRect.getAspectRatio() > dRect.getAspectRatio() )
		dRect.scaleCentered( mOutputRect.getWidth() / dRect.getWidth() );
	else
		dRect.scaleCentered( mOutputRect.getHeight() / dRect.getHeight() );

	mOutputMapping = RectMapping( kRect, dRect, true );
}
Ejemplo n.º 2
0
Rectf getCoveringRect(gl::Texture texture, Area containerArea) {
  float scale;
  Rectf bounds = texture.getBounds();
  bounds = bounds.getCenteredFit(containerArea, true);
  
  int container_h = containerArea.getHeight(),
  container_w = containerArea.getWidth(),
  texture_h = bounds.getHeight(),
  texture_w = bounds.getWidth();
  
  if (abs(container_h - texture_h) > abs(container_w - texture_w))
    scale = (float) container_h/texture_h;
  else
    scale = (float) container_w/texture_w;
  
  bounds.scaleCentered(scale + .05);
  
  return bounds;
}
Ejemplo n.º 3
0
// Just create the latest thing
void svvimApp::draw() {
  
  // SvvimLogo
  if (mSvvimLogoPng)
    mSvvimLogoPng.bind(0);
  
  // Mask
  if (mMaskTexture)
    mMaskTexture.bind(1);
  
  //
  if (mImageTexture)
    mImageTexture.bind(2);
  
  // Clear to black
  gl::clear();

  /*
  if (mMaskTexture) {
    Area bounds = mMaskTexture.getBounds();
    
    Area displayArea = getWindowBounds();
    // displayArea.y1 = displayArea.y1 + displayArea.getHeight() * .05;
    // displayArea.y2 = displayArea.y2 - displayArea.getHeight() * .05;
    
    Rectf centeredRect = Rectf(mMaskTexture.getBounds()).getCenteredFit(displayArea, false);
    
    float coverAspectRatio = mMaskTexture.getAspectRatio();
    float windowAspectRatio = getWindowAspectRatio();
    
    if (coverAspectRatio > windowAspectRatio) {
      float scale = displayArea.getHeight()/centeredRect.getHeight();
      centeredRect.scaleCentered(scale);
    }
    else {
      float scale = displayArea.getWidth()/centeredRect.getWidth();
      centeredRect.scaleCentered(scale);
    }
    
    gl::draw(mMaskTexture, centeredRect);
  } */

  
  // Draw pool-water background cover
  if (mImageTexture) {
    Area bounds = mImageTexture.getBounds();

    Area displayArea = getWindowBounds();
    displayArea.y1 = displayArea.y1 + displayArea.getHeight() * .05;
    displayArea.y2 = displayArea.y2 - displayArea.getHeight() * .05;
    
    Rectf centeredRect = Rectf(mImageTexture.getBounds()).getCenteredFit(displayArea, true);

    float coverAspectRatio = mImageTexture.getAspectRatio();
    float windowAspectRatio = getWindowAspectRatio();
    
    if (coverAspectRatio > windowAspectRatio) {
      float scale = displayArea.getHeight()/centeredRect.getHeight();
      centeredRect.scaleCentered(scale);
    }
    else {
      float scale = displayArea.getWidth()/centeredRect.getWidth();
      centeredRect.scaleCentered(scale);
    }
    
    gl::draw(mCurrentBgTexture, centeredRect);
  }

  if (mShader) {
    float displacement = 10. - min(mAlpha * 300.0, 10.0);
    mShader.bind();
    mShader.uniform("displacement", displacement);
    mShader.uniform("maskTexture", 0);
    mShader.uniform("innerTexture", 2);
    mShader.uniform("fillColor", Vec3f(0.3, 0.3, 0.3));
    mShader.uniform("bounds", Vec2f(getWindowWidth(), getWindowHeight()));
    mShader.uniform("alpha", 6 * mAlpha);
  }
  
  if (mSvvimLogoPng) {
    Rectf centeredRect = Rectf(mSvvimLogoPng.getBounds()).getCenteredFit(getWindowBounds(), true);
    Rectf topRect = centeredRect;
    gl::draw(mSvvimLogoPng, centeredRect);
    centeredRect.y1 -= 200;
    centeredRect.y2 -= 200;
    //gl::draw(mSvvimLogoPng, centeredRect);
    centeredRect.y1 += 400;
    centeredRect.y2 += 400;
    //gl::draw(mSvvimLogoPng, centeredRect);
  }
  
  if (mShader)
    mShader.unbind();
  
  if (mMaskTexture)
    mMaskTexture.unbind();
  
  if (mImageTexture)
    mImageTexture.unbind();
  
  if (mSvvimLogoPng)
    mSvvimLogoPng.unbind();

}
Ejemplo n.º 4
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() );
	}
}
Ejemplo n.º 5
0
void Gallery::Picture::render( const Rectf &rect )
{
    Rectf txtRect;
    Rectf outRect = rect;

    gl::pushModelView();

    Vec2f flipScale( 1, 1 );

    double currentTime = app::getElapsedSeconds();

    if ( zooming )
    {
        Rectf zoomRect;
        if ( mTexture )
            zoomRect = mTexture.getBounds();
        else
            zoomRect = Rectf( 0, 0, 1024, 768 );

        Rectf screenRect( app::getWindowBounds() );
        zoomRect = zoomRect.getCenteredFit( screenRect, true );
        if ( screenRect.getAspectRatio() > zoomRect.getAspectRatio() )
            zoomRect.scaleCentered( screenRect.getWidth() / zoomRect.getWidth() );
        else
            zoomRect.scaleCentered( screenRect.getHeight() / zoomRect.getHeight() );

        Vec2f center = lerp< Vec2f >( zoomRect.getCenter(),
                                      outRect.getCenter(), mZoom );
        float scale = lerp< float >( zoomRect.getWidth(),
                                     outRect.getWidth(), mZoom ) /
                      outRect.getWidth();

        outRect.offsetCenterTo( center );
        outRect.scaleCentered( scale );

        if ( mZoom == 1. )
            zooming = false;
    }
    else if ( currentTime < appearanceTime )
    {
        flipScale = Vec2f( 0, 1 );
    }
    else if ( currentTime < appearanceTime + sFlipDuration * .5 )
    {
        float flipU = easeOutQuart(
                          ( currentTime - appearanceTime ) / ( sFlipDuration * .5 ) );
        flipScale = Vec2f( flipU, 1 );
    }
    else if ( flipping )
    {
        float flipU = easeInOutQuart( math<float>::clamp(
                                          ( currentTime - flipStart ) / sFlipDuration ) );

        if ( ( flipU >= .5 ) && !flipTextureChanged )
        {
            setRandomTexture();
            flipTextureChanged = true;
        }

        flipScale = Vec2f( math<float>::abs( flipU * 2 - 1 ), 1 );
        if ( flipU >= 1 )
            flipping = false;
    }


    if ( mTexture )
    {
        txtRect = mTexture.getBounds();
        mTexture.bind();
        gl::color( Color::white() );
    }
    else
    {
        txtRect = Rectf( 0, 0, 1024, 768 );
        gl::color( Color::black() );
    }

    txtRect = txtRect.getCenteredFit( outRect, true );

    gl::translate( txtRect.getCenter() );
    gl::scale( flipScale );
    gl::translate( -txtRect.getCenter() );
    gl::drawSolidRect( txtRect );

    if ( mTexture )
        mTexture.unbind();
    else
        gl::color( Color::white() );

    gl::popModelView();
}