// Runs update logic void UiApp::update() { // Update frame rate mFrameRate = getAverageFps(); // Toggle fullscreen if ( mFullScreen != isFullScreen() ) { setFullScreen( mFullScreen ); } // Interact with first hand const Leap::HandList& hands = mFrame.hands(); if ( hands.isEmpty() ) { mCursorType = CursorType::NONE; } else { const Leap::Hand& hand = *hands.begin(); // Update cursor position mCursorPositionTarget = warpVector( hand.palmPosition() ); if ( mCursorType == CursorType::NONE ) { mCursorPosition = mCursorPositionTarget; } // Choose cursor type based on number of exposed fingers switch ( hand.fingers().count() ) { case 0: mCursorType = CursorType::GRAB; // Slider if ( mSlider.getBounds().contains( mCursorPosition - mSliderPosition ) ) { float x1 = mTrackPosition.x; float x2 = mTrackPosition.x + (float)( mTrack.getWidth() - mSlider.getWidth() ); mSliderPosition.x = math<float>::clamp( mCursorPosition.x, x1, x2 ); } break; case 1: mCursorType = CursorType::TOUCH; // Buttons mFingerTipPosition = warpPointable( *hand.fingers().begin() ); for ( size_t i = 0; i < 3; ++i ) { mButtonState[ i ] = false; if ( mButton[ 0 ].getBounds().contains( mFingerTipPosition - mButtonPosition[ i ] ) ) { mButtonState[ i ] = true; } } break; default: mCursorType = CursorType::HAND; break; } } // Smooth cursor animation mCursorPosition = mCursorPosition.lerp( 0.21f, mCursorPositionTarget ); }
void MovieLoaderTestApp::draw() { // clear out the window with black gl::clear( Color( 0, 0, 0 ) ); if (!mMovieSelected) return; if (mTexture) { Rectf centeredRect = Rectf( mTexture.getBounds() ).getCenteredFit( getWindowBounds(), true ); gl::draw(mTexture, centeredRect); } }