void OvrOutOfSpaceMenu::BuildMenu( int memoryInKB ) { const VRMenuFontParms fontParms( true, true, false, false, true, 0.505f, 0.43f, 1.0f ); Array< VRMenuObjectParms const * > parms; int menuId = 9000; // --- // Icon { VRMenuSurfaceParms iconSurfParms( "", "res/raw/out_of_disk_space_warning.png", SURFACE_TEXTURE_DIFFUSE, "", SURFACE_TEXTURE_MAX, "", SURFACE_TEXTURE_MAX ); VRMenuObjectParms iconParms( VRMENU_STATIC, Array< VRMenuComponent* >(), iconSurfParms, "", Posef( Quatf(), Vector3f( 0.0f, CENTER_TO_ICON_Y_OFFSET, 0.0f ) ), Vector3f( 1.0f ), fontParms, VRMenuId_t( ++menuId ), VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &iconParms ); AddItems( AppPtr->GetVRMenuMgr(), AppPtr->GetDefaultFont(), parms, GetRootHandle(), true ); parms.Clear(); } // --- // Message { String outOfSpaceMsg; VrLocale::GetString( AppPtr->GetVrJni(), AppPtr->GetJavaObject(), "@string/out_of_memory", "To use this app, please free up at least %dKB of storage space on your phone.", outOfSpaceMsg ); char charBuff[10]; sprintf( charBuff, "%d", memoryInKB ); outOfSpaceMsg = VrLocale::GetXliffFormattedString( outOfSpaceMsg, charBuff ); BitmapFont & font = AppPtr->GetDefaultFont(); font.WordWrapText( outOfSpaceMsg, 1.4f ); VRMenuObjectParms titleParms( VRMENU_STATIC, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), (const char*)outOfSpaceMsg, Posef( Quatf(), Vector3f( 0.0f, CENTER_TO_TEXT_Y_OFFSET, 0.0f ) ), Vector3f( 1.0f ), fontParms, VRMenuId_t( ++menuId ), VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_TEXT ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &titleParms ); AddItems( AppPtr->GetVRMenuMgr(), AppPtr->GetDefaultFont(), parms, GetRootHandle(), true ); parms.Clear(); } this->SetMenuPose( Posef( Quatf(), Vector3f( 0.0f, 0.0f, -3.0f ) ) ); }
eMsgStatus OnFrame( App * app, VrFrame const & vrFrame, OvrVRMenuMgr & menuMgr, VRMenuObject * self, VRMenuEvent const & event ) { Vector4f selfColor = self->GetColor( ); Vector4f selfTextColor = self->GetTextColor(); VRMenuObjectFlags_t attributionFlags = self->GetFlags(); const float fadeInAlpha = PanoMenu.GetPhotos( )->GetFadeLevel( ); const float fadeOutAlpha = PanoMenu.GetFadeAlpha( ); switch ( PanoMenu.GetPhotos()->GetCurrentState() ) { case Oculus360Photos::MENU_PANO_LOADING: OVR_ASSERT( PanoMenu.GetPhotos() ); if ( CurrentPano != PanoMenu.GetPhotos()->GetActivePano() ) { CurrentPano = PanoMenu.GetPhotos()->GetActivePano(); LoadAttribution( self ); } // Hide attribution attributionFlags |= VRMenuObjectFlags_t( VRMENUOBJECT_DONT_RENDER ); break; case Oculus360Photos::MENU_PANO_REOPEN_FADEIN: case Oculus360Photos::MENU_PANO_FADEIN: // Show attribution attributionFlags &= ~VRMenuObjectFlags_t( VRMENUOBJECT_DONT_RENDER ); // Fade in burger selfColor.w = fadeInAlpha; selfTextColor.w = fadeInAlpha; break; case Oculus360Photos::MENU_PANO_FULLY_VISIBLE: // Show attribution attributionFlags &= ~VRMenuObjectFlags_t( VRMENUOBJECT_DONT_RENDER ); break; case Oculus360Photos::MENU_PANO_FADEOUT: // Fade out burger selfColor.w = fadeOutAlpha; selfTextColor.w = fadeOutAlpha; if ( fadeOutAlpha == 0.0f ) { app->GetGuiSys().CloseMenu( app, &PanoMenu, false ); } break; default: // Hide attribution attributionFlags |= VRMenuObjectFlags_t( VRMENUOBJECT_DONT_RENDER ); break; } self->SetFlags( attributionFlags ); self->SetTextColor( selfTextColor ); self->SetColor( selfColor ); return MSG_STATUS_ALIVE; }
void OvrPanoMenu::UpdateButtonsState( const OvrMetaDatum * const ActivePano, bool showSwipeOverride /*= false*/ ) { // Reset button time ButtonCoolDown = BUTTON_COOL_DOWN_SECONDS; // Update favo bool isFavorite = false; for ( int i = 0; i < ActivePano->Tags.GetSizeI( ); ++i ) { if ( ActivePano->Tags[ i ] == "Favorites" ) { isFavorite = true; break; } } VRMenuObject * favoritesButtonObject = MenuMgr.ToObject( FavoritesButtonHandle ); OVR_ASSERT( favoritesButtonObject != NULL ); if ( OvrSurfaceToggleComponent * favToggleComp = favoritesButtonObject->GetComponentByName<OvrSurfaceToggleComponent>() ) { const int fav = isFavorite ? 2 : 0; favToggleComp->SetGroupIndex( fav ); } VRMenuObject * swipeRight = MenuMgr.ToObject( SwipeRightIndicatorHandle ); OVR_ASSERT( swipeRight != NULL ); VRMenuObject * swipeLeft = MenuMgr.ToObject( SwipeLeftIndicatorHandle ); OVR_ASSERT( swipeLeft != NULL ); const bool showSwipeIndicators = showSwipeOverride || ( Photos->GetNumPanosInActiveCategory( ) > 1 ); VRMenuObjectFlags_t flagsLeft = swipeRight->GetFlags( ); VRMenuObjectFlags_t flagsRight = swipeRight->GetFlags( ); if ( showSwipeIndicators ) { flagsLeft &= ~VRMenuObjectFlags_t( VRMENUOBJECT_DONT_RENDER ); flagsRight &= ~VRMenuObjectFlags_t( VRMENUOBJECT_DONT_RENDER ); } else { flagsLeft |= VRMenuObjectFlags_t( VRMENUOBJECT_DONT_RENDER ); flagsRight |= VRMenuObjectFlags_t( VRMENUOBJECT_DONT_RENDER ); } swipeLeft->SetFlags( flagsLeft ); swipeRight->SetFlags( flagsRight ); }
void UILabel::AddToMenu( UIMenu *menu, UIObject *parent ) { const Posef pose( Quatf( Vector3f( 0.0f, 1.0f, 0.0f ), 0.0f ), Vector3f( 0.0f, 0.0f, 0.0f ) ); VRMenuObjectParms parms( VRMENU_STATIC, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), "", pose, Vector3f( 1.0f ), FontParms, menu->AllocId(), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); AddToMenuWithParms( menu, parent, parms ); }
void UIContainer::AddToMenu( UIMenu *menu, UIWidget *parent ) { const Posef pose( Quatf( Vector3f( 0.0f, 1.0f, 0.0f ), 0.0f ), Vector3f( 0.0f, 0.0f, 0.0f ) ); Vector3f defaultScale( 1.0f ); VRMenuFontParms fontParms( true, true, false, false, false, 1.0f ); VRMenuObjectParms parms( VRMENU_CONTAINER, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), "Container", pose, defaultScale, fontParms, menu->AllocId(), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); AddToMenuWithParms( menu, parent, parms ); }
void UIDiscreteSlider::AddCells( unsigned int maxValue, unsigned int startValue, float cellSpacing ) { MaxValue = maxValue; StartValue = startValue; DiscreteSliderComponent = new UIDiscreteSliderComponent( *this, StartValue ); OVR_ASSERT( DiscreteSliderComponent ); AddComponent( DiscreteSliderComponent ); float cellOffset = 0.0f; const float pixelCellSpacing = cellSpacing * VRMenuObject::DEFAULT_TEXEL_SCALE; VRMenuFontParms fontParms( HORIZONTAL_CENTER, VERTICAL_CENTER, false, false, false, 1.0f ); Vector3f defaultScale( 1.0f ); for ( unsigned int cellIndex = 0; cellIndex <= MaxValue; ++cellIndex ) { const Posef pose( Quatf( Vector3f( 0.0f, 1.0f, 0.0f ), 0.0f ), Vector3f( cellOffset, 0.f, 0.0f ) ); cellOffset += pixelCellSpacing; VRMenuObjectParms cellParms( VRMENU_BUTTON, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), "", pose, defaultScale, fontParms, Menu->AllocId(), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); UICell * cellObject = new UICell( GuiSys ); cellObject->AddToDiscreteSlider( Menu, this, cellParms ); cellObject->SetImage( 0, SURFACE_TEXTURE_DIFFUSE, CellOffTexture ); UICellComponent * cellComp = new UICellComponent( *DiscreteSliderComponent, cellIndex ); VRMenuObject * object = cellObject->GetMenuObject(); OVR_ASSERT( object ); object->AddComponent( cellComp ); DiscreteSliderComponent->AddCell( cellObject ); } DiscreteSliderComponent->HighlightCells( StartValue ); }
void MoviePlayerView::CreateMenu( App * app, OvrVRMenuMgr & menuMgr, BitmapFont const & font ) { Menu = VRMenu::Create( "MoviePlayerMenu" ); Array< VRMenuObjectParms const * > parms; Posef moveScreenPose( Quatf( Vector3f( 0.0f, 1.0f, 0.0f ), 0.0f ), Vector3f( 0.0f, 0.0f, -1.8f ) ); VRMenuFontParms moveScreenFontParms( true, true, false, false, false, 0.5f ); VRMenuSurfaceParms moveScreenSurfParms( "", NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ); VRMenuObjectParms moveScreenParms( VRMENU_BUTTON, Array< VRMenuComponent* >(), moveScreenSurfParms, Strings::MoviePlayer_Reorient, moveScreenPose, Vector3f( 1.0f ), moveScreenFontParms, ID_MOVE_SCREEN, VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &moveScreenParms ); Menu->InitWithItems(menuMgr, font, 0.0f, VRMenuFlags_t( VRMENU_FLAG_TRACK_GAZE ) | VRMENU_FLAG_BACK_KEY_DOESNT_EXIT, parms); parms.Clear(); MoveScreenHandle = Menu->HandleForId( menuMgr, ID_MOVE_SCREEN ); MoveScreenObj = menuMgr.ToObject( MoveScreenHandle ); MoveScreenObj->AddFlags( VRMENUOBJECT_DONT_RENDER ); Vector3f moveScreenTextPosition = Vector3f( 0.0f, -24 * VRMenuObject::DEFAULT_TEXEL_SCALE, 0.0f ); MoveScreenObj->SetTextLocalPosition( moveScreenTextPosition ); // ============================================================================== // // finalize // Cinema.app->GetGuiSys().AddMenu( Menu ); }
void UIImage::AddToMenu( UIMenu *menu, UIWidget *parent ) { AddToMenuFlags( menu, parent, VRMenuObjectFlags_t() ); }
OvrVideoMenu::OvrVideoMenu( OvrGuiSys & guiSys, OvrMetaData & metaData, float radius ) : VRMenu( MENU_NAME ) , MetaData( metaData ) , LoadingIconHandle( 0 ) , AttributionHandle( 0 ) , BrowserButtonHandle( 0 ) , VideoControlButtonHandle( 0 ) , Radius( radius ) , ButtonCoolDown( 0.0f ) , OpenTime( 0.0 ) { // Init with empty root Init( guiSys, 0.0f, VRMenuFlags_t() ); // Create Attribution info view Array< VRMenuObjectParms const * > parms; Array< VRMenuComponent* > comps; VRMenuId_t attributionPanelId( ID_CENTER_ROOT.Get() + 10 ); comps.PushBack( new OvrVideoMenuRootComponent( *this ) ); Quatf rot( DOWN, 0.0f ); Vector3f dir( -FWD ); Posef panelPose( rot, dir * Radius ); Vector3f panelScale( 1.0f ); const VRMenuFontParms fontParms( true, true, false, false, true, 0.525f, 0.45f, 1.0f ); VRMenuObjectParms attrParms( VRMENU_STATIC, comps, VRMenuSurfaceParms(), "Attribution Panel", panelPose, panelScale, Posef(), Vector3f( 1.0f ), fontParms, attributionPanelId, VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &attrParms ); AddItems( guiSys, parms, GetRootHandle(), false ); parms.Clear(); comps.Clear(); AttributionHandle = HandleForId( guiSys.GetVRMenuMgr(), attributionPanelId ); VRMenuObject * attributionObject = guiSys.GetVRMenuMgr().ToObject( AttributionHandle ); OVR_ASSERT( attributionObject != NULL ); //Browser button float const ICON_HEIGHT = 80.0f * VRMenuObject::DEFAULT_TEXEL_SCALE; Array< VRMenuSurfaceParms > surfParms; Posef browserButtonPose( Quatf(), UP * ICON_HEIGHT * 2.0f ); comps.PushBack( new OvrDefaultComponent( Vector3f( 0.0f, 0.0f, 0.05f ), 1.05f, 0.25f, 0.0f, Vector4f( 1.0f ), Vector4f( 1.0f ) ) ); comps.PushBack( new OvrButton_OnUp( this, ID_BROWSER_BUTTON ) ); comps.PushBack( new OvrSurfaceToggleComponent( ) ); surfParms.PushBack( VRMenuSurfaceParms( "browser", "apk:///assets/nav_home_off.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); surfParms.PushBack( VRMenuSurfaceParms( "browser", "apk:///assets/nav_home_on.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); VRMenuObjectParms browserButtonParms( VRMENU_BUTTON, comps, surfParms, "", browserButtonPose, Vector3f( 1.0f ), Posef(), Vector3f( 1.0f ), fontParms, ID_BROWSER_BUTTON, VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_TEXT ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &browserButtonParms ); AddItems( guiSys, parms, AttributionHandle, false ); parms.Clear(); comps.Clear(); surfParms.Clear(); BrowserButtonHandle = attributionObject->ChildHandleForId( guiSys.GetVRMenuMgr(), ID_BROWSER_BUTTON ); VRMenuObject * browserButtonObject = guiSys.GetVRMenuMgr().ToObject( BrowserButtonHandle ); OVR_ASSERT( browserButtonObject != NULL ); OVR_UNUSED( browserButtonObject ); //Video control button Posef videoButtonPose( Quatf(), DOWN * ICON_HEIGHT * 2.0f ); comps.PushBack( new OvrDefaultComponent( Vector3f( 0.0f, 0.0f, 0.05f ), 1.05f, 0.25f, 0.0f, Vector4f( 1.0f ), Vector4f( 1.0f ) ) ); comps.PushBack( new OvrButton_OnUp( this, ID_VIDEO_BUTTON ) ); comps.PushBack( new OvrSurfaceToggleComponent( ) ); surfParms.PushBack( VRMenuSurfaceParms( "browser", "apk:///assets/nav_restart_off.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); surfParms.PushBack( VRMenuSurfaceParms( "browser", "apk:///assets/nav_restart_on.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); VRMenuObjectParms controlButtonParms( VRMENU_BUTTON, comps, surfParms, "", videoButtonPose, Vector3f( 1.0f ), Posef(), Vector3f( 1.0f ), fontParms, ID_VIDEO_BUTTON, VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_TEXT ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &controlButtonParms ); AddItems( guiSys, parms, AttributionHandle, false ); parms.Clear(); comps.Clear(); VideoControlButtonHandle = attributionObject->ChildHandleForId( guiSys.GetVRMenuMgr(), ID_VIDEO_BUTTON ); VRMenuObject * controlButtonObject = guiSys.GetVRMenuMgr().ToObject( VideoControlButtonHandle ); OVR_ASSERT( controlButtonObject != NULL ); OVR_UNUSED( controlButtonObject ); }
OvrPanoMenu::OvrPanoMenu( App * app, Oculus360Photos * photos, OvrVRMenuMgr & menuMgr, BitmapFont const & font, OvrMetaData & metaData, float fadeOutTime, float radius ) : VRMenu( MENU_NAME ) , AppPtr( app ) , MenuMgr( menuMgr ) , Font( font ) , Photos( photos ) , MetaData( metaData ) , LoadingIconHandle( 0 ) , AttributionHandle( 0 ) , BrowserButtonHandle( 0 ) , SwipeLeftIndicatorHandle( 0 ) , SwipeRightIndicatorHandle( 0 ) , Fader( 1.0f ) , FadeOutTime( fadeOutTime ) , currentFadeRate( 0.0f ) , Radius( radius ) , ButtonCoolDown( 0.0f ) { currentFadeRate = 1.0f / FadeOutTime; // Init with empty root Init( menuMgr, font, 0.0f, VRMenuFlags_t() ); // Create Attribution info view Array< VRMenuObjectParms const * > parms; Array< VRMenuComponent* > comps; VRMenuId_t attributionPanelId( ID_CENTER_ROOT.Get() + 10 ); comps.PushBack( new OvrPanoMenuRootComponent( *this ) ); Quatf rot( DOWN, 0.0f ); Vector3f dir( -FWD ); Posef panelPose( rot, dir * Radius ); Vector3f panelScale( 1.0f ); //const Posef textPose( Quatf(), Vector3f( 0.0f, 0.0f, 0.0f ) ); const VRMenuFontParms fontParms( true, true, false, false, true, 0.525f, 0.45f, 1.0f ); VRMenuObjectParms attrParms( VRMENU_STATIC, comps, VRMenuSurfaceParms(), "Attribution Panel", panelPose, panelScale, Posef(), Vector3f( 1.0f ), fontParms, attributionPanelId, VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_TEXT ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &attrParms ); AddItems( MenuMgr, Font, parms, GetRootHandle(), false ); parms.Clear(); comps.Clear(); AttributionHandle = HandleForId( MenuMgr, attributionPanelId ); VRMenuObject * attributionObject = MenuMgr.ToObject( AttributionHandle ); OVR_ASSERT( attributionObject != NULL ); //Browser button float const ICON_HEIGHT = 80.0f * VRMenuObject::DEFAULT_TEXEL_SCALE; Array< VRMenuSurfaceParms > surfParms; Posef browserButtonPose( Quatf( ), UP * ICON_HEIGHT * 2.0f ); comps.PushBack( new OvrDefaultComponent( Vector3f( 0.0f, 0.0f, 0.05f ), 1.05f, 0.25f, 0.0f, Vector4f( 1.0f ), Vector4f( 1.0f ) ) ); comps.PushBack( new OvrButton_OnUp( this, ID_BROWSER_BUTTON ) ); comps.PushBack( new OvrSurfaceToggleComponent( ) ); surfParms.PushBack( VRMenuSurfaceParms ( "browser", "assets/nav_home_off.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); surfParms.PushBack( VRMenuSurfaceParms( "browser", "assets/nav_home_on.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); VRMenuObjectParms browserButtonParms( VRMENU_BUTTON, comps, surfParms, "", browserButtonPose, Vector3f( 1.0f ), Posef( ), Vector3f( 1.0f ), fontParms, ID_BROWSER_BUTTON, VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_TEXT ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &browserButtonParms ); AddItems( MenuMgr, Font, parms, AttributionHandle, false ); parms.Clear(); comps.Clear(); surfParms.Clear(); BrowserButtonHandle = attributionObject->ChildHandleForId( MenuMgr, ID_BROWSER_BUTTON ); VRMenuObject * browserButtonObject = MenuMgr.ToObject( BrowserButtonHandle ); OVR_ASSERT( browserButtonObject != NULL ); OVR_UNUSED( browserButtonObject ); //Favorites button Posef favoritesButtonPose( Quatf( ), DOWN * ICON_HEIGHT * 2.0f ); comps.PushBack( new OvrDefaultComponent( Vector3f( 0.0f, 0.0f, 0.05f ), 1.05f, 0.25f, 0.0f, Vector4f( 1.0f ), Vector4f( 1.0f ) ) ); comps.PushBack( new OvrButton_OnUp( this, ID_FAVORITES_BUTTON ) ); comps.PushBack( new OvrSurfaceToggleComponent() ); surfParms.PushBack( VRMenuSurfaceParms( "favorites_off", "assets/nav_star_off.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); surfParms.PushBack( VRMenuSurfaceParms( "favorites_on", "assets/nav_star_on.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); surfParms.PushBack( VRMenuSurfaceParms( "favorites_active_off", "assets/nav_star_active_off.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); surfParms.PushBack( VRMenuSurfaceParms( "favorites_active_on", "assets/nav_star_active_on.png", SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ) ); VRMenuObjectParms favoritesButtonParms( VRMENU_BUTTON, comps, surfParms, "", favoritesButtonPose, Vector3f( 1.0f ), Posef( ), Vector3f( 1.0f ), fontParms, ID_FAVORITES_BUTTON, VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_TEXT ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &favoritesButtonParms ); AddItems( MenuMgr, Font, parms, AttributionHandle, false ); parms.Clear(); comps.Clear(); FavoritesButtonHandle = attributionObject->ChildHandleForId( MenuMgr, ID_FAVORITES_BUTTON ); VRMenuObject * favoritesButtonObject = MenuMgr.ToObject( FavoritesButtonHandle ); OVR_ASSERT( favoritesButtonObject != NULL ); OVR_UNUSED( favoritesButtonObject ); // Swipe icons const int numFrames = 10; const int numTrails = 3; const int numChildren = 5; const float swipeFPS = 3.0f; const float factor = 1.0f / 8.0f; // Right container VRMenuId_t swipeRightId( ID_CENTER_ROOT.Get() + 401 ); Quatf rotRight( DOWN, ( Mathf::TwoPi * factor ) ); Vector3f rightDir( -FWD * rotRight ); comps.PushBack( new OvrTrailsAnimComponent( swipeFPS, true, numFrames, numTrails, numTrails ) ); VRMenuObjectParms swipeRightRoot( VRMENU_CONTAINER, comps, VRMenuSurfaceParms( ), "", Posef( rotRight, rightDir * Radius ), Vector3f( 1.0f ), Posef( ), Vector3f( 1.0f ), fontParms, swipeRightId, VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &swipeRightRoot ); AddItems( MenuMgr, Font, parms, AttributionHandle, false ); parms.Clear(); comps.Clear(); SwipeRightIndicatorHandle = attributionObject->ChildHandleForId( MenuMgr, swipeRightId ); VRMenuObject * swipeRightRootObject = MenuMgr.ToObject( SwipeRightIndicatorHandle ); OVR_ASSERT( swipeRightRootObject != NULL ); // Left container VRMenuId_t swipeLeftId( ID_CENTER_ROOT.Get( ) + 402 ); Quatf rotLeft( DOWN, ( Mathf::TwoPi * -factor ) ); Vector3f leftDir( -FWD * rotLeft ); comps.PushBack( new OvrTrailsAnimComponent( swipeFPS, true, numFrames, numTrails, numTrails ) ); VRMenuObjectParms swipeLeftRoot( VRMENU_CONTAINER, comps, VRMenuSurfaceParms( ), "", Posef( rotLeft, leftDir * Radius ), Vector3f( 1.0f ), Posef( ), Vector3f( 1.0f ), fontParms, swipeLeftId, VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &swipeLeftRoot ); AddItems( MenuMgr, Font, parms, AttributionHandle, false ); parms.Clear(); comps.Clear(); SwipeLeftIndicatorHandle = attributionObject->ChildHandleForId( MenuMgr, swipeLeftId ); VRMenuObject * swipeLeftRootObject = MenuMgr.ToObject( SwipeLeftIndicatorHandle ); OVR_ASSERT( swipeLeftRootObject != NULL ); // Arrow frame children const char * swipeRightIcon = "assets/nav_arrow_right.png"; const char * swipeLeftIcon = "assets/nav_arrow_left.png"; VRMenuSurfaceParms rightIndicatorSurfaceParms( "swipeRightSurface", swipeRightIcon, SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ); VRMenuSurfaceParms leftIndicatorSurfaceParms( "swipeLeftSurface", swipeLeftIcon, SURFACE_TEXTURE_DIFFUSE, NULL, SURFACE_TEXTURE_MAX, NULL, SURFACE_TEXTURE_MAX ); const float surfaceWidth = 25 * VRMenuObject::DEFAULT_TEXEL_SCALE; for ( int i = 0; i < numChildren; ++i ) { //right frame const Vector3f rightPos = ( RIGHT * surfaceWidth * i ) - ( FWD * i * 0.1f ); VRMenuObjectParms swipeRightFrame( VRMENU_STATIC, Array< VRMenuComponent* >(), rightIndicatorSurfaceParms, "", Posef( Quatf( ), rightPos ), Vector3f( 1.0f ), Posef( ), Vector3f( 1.0f ), fontParms, VRMenuId_t( ), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &swipeRightFrame ); AddItems( MenuMgr, Font, parms, SwipeRightIndicatorHandle, false ); parms.Clear(); // left frame const Vector3f leftPos = ( (-RIGHT) * surfaceWidth * i ) - ( FWD * i * 0.1f ); VRMenuObjectParms swipeLeftFrame( VRMENU_STATIC, Array< VRMenuComponent* >(), leftIndicatorSurfaceParms, "", Posef( Quatf( ), leftPos ), Vector3f( 1.0f ), Posef( ), Vector3f( 1.0f ), fontParms, VRMenuId_t( ), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &swipeLeftFrame ); AddItems( MenuMgr, Font, parms, SwipeLeftIndicatorHandle, false ); parms.Clear(); } if ( OvrTrailsAnimComponent* animRightComp = swipeRightRootObject->GetComponentByName< OvrTrailsAnimComponent >( ) ) { animRightComp->Play( ); } if ( OvrTrailsAnimComponent* animLeftComp = swipeLeftRootObject->GetComponentByName< OvrTrailsAnimComponent >( ) ) { animLeftComp->Play( ); } }
void MoviePlayerView::CreateMenu( App * app, OvrVRMenuMgr & menuMgr, BitmapFont const & font ) { BackgroundTintTexture.LoadTextureFromApplicationPackage( "assets/backgroundTint.png" ); RWTexture.LoadTextureFromApplicationPackage( "assets/img_btn_rw.png" ); RWHoverTexture.LoadTextureFromApplicationPackage( "assets/img_btn_rw_hover.png" ); RWPressedTexture.LoadTextureFromApplicationPackage( "assets/img_btn_rw_pressed.png" ); FFTexture.LoadTextureFromApplicationPackage( "assets/img_btn_ff.png" ); FFHoverTexture.LoadTextureFromApplicationPackage( "assets/img_btn_ff_hover.png" ); FFPressedTexture.LoadTextureFromApplicationPackage( "assets/img_btn_ff_pressed.png" ); PlayTexture.LoadTextureFromApplicationPackage( "assets/img_btn_play.png" ); PlayHoverTexture.LoadTextureFromApplicationPackage( "assets/img_btn_play_hover.png" ); PlayPressedTexture.LoadTextureFromApplicationPackage( "assets/img_btn_play_pressed.png" ); PauseTexture.LoadTextureFromApplicationPackage( "assets/img_btn_pause.png" ); PauseHoverTexture.LoadTextureFromApplicationPackage( "assets/img_btn_pause_hover.png" ); PausePressedTexture.LoadTextureFromApplicationPackage( "assets/img_btn_pause_pressed.png" ); CarouselTexture.LoadTextureFromApplicationPackage( "assets/img_btn_carousel.png" ); CarouselHoverTexture.LoadTextureFromApplicationPackage( "assets/img_btn_carousel_hover.png" ); CarouselPressedTexture.LoadTextureFromApplicationPackage( "assets/img_btn_carousel_pressed.png" ); SeekbarBackgroundTexture.LoadTextureFromApplicationPackage( "assets/img_seekbar_background.png" ); SeekbarProgressTexture.LoadTextureFromApplicationPackage( "assets/img_seekbar_progress_blue.png" ); SeekPosition.LoadTextureFromApplicationPackage( "assets/img_seek_position.png" ); SeekFF2x.LoadTextureFromApplicationPackage( "assets/img_seek_ff2x.png" ); SeekFF4x.LoadTextureFromApplicationPackage( "assets/img_seek_ff4x.png" ); SeekFF8x.LoadTextureFromApplicationPackage( "assets/img_seek_ff8x.png" ); SeekFF16x.LoadTextureFromApplicationPackage( "assets/img_seek_ff16x.png" ); SeekFF32x.LoadTextureFromApplicationPackage( "assets/img_seek_ff32x.png" ); SeekRW2x.LoadTextureFromApplicationPackage( "assets/img_seek_rw2x.png" ); SeekRW4x.LoadTextureFromApplicationPackage( "assets/img_seek_rw4x.png" ); SeekRW8x.LoadTextureFromApplicationPackage( "assets/img_seek_rw8x.png" ); SeekRW16x.LoadTextureFromApplicationPackage( "assets/img_seek_rw16x.png" ); SeekRW32x.LoadTextureFromApplicationPackage( "assets/img_seek_rw32x.png" ); // ============================================================================== // // reorient message // MoveScreenMenu = new UIMenu( Cinema ); MoveScreenMenu->Create( "MoviePlayerMenu" ); MoveScreenMenu->SetFlags( VRMenuFlags_t( VRMENU_FLAG_TRACK_GAZE ) | VRMenuFlags_t( VRMENU_FLAG_BACK_KEY_DOESNT_EXIT ) ); MoveScreenLabel.AddToMenu( MoveScreenMenu, NULL ); MoveScreenLabel.SetLocalPose( Quatf( Vector3f( 0.0f, 1.0f, 0.0f ), 0.0f ), Vector3f( 0.0f, 0.0f, -1.8f ) ); MoveScreenLabel.GetMenuObject()->AddFlags( VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ) ); MoveScreenLabel.SetFontScale( 0.5f ); MoveScreenLabel.SetText( CinemaStrings::MoviePlayer_Reorient ); MoveScreenLabel.SetTextOffset( Vector3f( 0.0f, -24 * VRMenuObject::DEFAULT_TEXEL_SCALE, 0.0f ) ); // offset to be below gaze cursor MoveScreenLabel.SetVisible( false ); // ============================================================================== // // Playback controls // PlaybackControlsMenu = new UIMenu( Cinema ); PlaybackControlsMenu->Create( "PlaybackControlsMenu" ); PlaybackControlsMenu->SetFlags( VRMenuFlags_t( VRMENU_FLAG_BACK_KEY_DOESNT_EXIT ) ); PlaybackControlsPosition.AddToMenu( PlaybackControlsMenu ); PlaybackControlsScale.AddToMenu( PlaybackControlsMenu, &PlaybackControlsPosition ); PlaybackControlsScale.SetLocalPosition( Vector3f( 0.0f, 0.0f, 0.05f ) ); PlaybackControlsScale.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, BackgroundTintTexture, 1080, 1080 ); // ============================================================================== // // movie title // MovieTitleLabel.AddToMenu( PlaybackControlsMenu, &PlaybackControlsScale ); MovieTitleLabel.SetLocalPosition( PixelPos( 0, 266, 0 ) ); MovieTitleLabel.SetFontScale( 1.4f ); MovieTitleLabel.SetText( "" ); MovieTitleLabel.SetTextOffset( Vector3f( 0.0f, 0.0f, 0.01f ) ); MovieTitleLabel.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, BackgroundTintTexture, 320, 120 ); // ============================================================================== // // seek icon // SeekIcon.AddToMenu( PlaybackControlsMenu, &PlaybackControlsScale ); SeekIcon.SetLocalPosition( PixelPos( 0, 0, 0 ) ); SeekIcon.SetLocalScale( Vector3f( 2.0f ) ); SetSeekIcon( 0 ); // ============================================================================== // // controls // ControlsBackground.AddToMenuFlags( PlaybackControlsMenu, &PlaybackControlsScale, VRMenuObjectFlags_t( VRMENUOBJECT_RENDER_HIERARCHY_ORDER ) ); ControlsBackground.SetLocalPosition( PixelPos( 0, -288, 0 ) ); ControlsBackground.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, BackgroundTintTexture, 1004, 168 ); ControlsBackground.AddComponent( &GazeTimer ); RewindButton.AddToMenu( PlaybackControlsMenu, &ControlsBackground ); RewindButton.SetLocalPosition( PixelPos( -448, 0, 1 ) ); RewindButton.SetLocalScale( Vector3f( 2.0f ) ); RewindButton.SetButtonImages( RWTexture, RWHoverTexture, RWPressedTexture ); RewindButton.SetOnClick( RewindPressedCallback, this ); FastForwardButton.AddToMenu( PlaybackControlsMenu, &ControlsBackground ); FastForwardButton.SetLocalPosition( PixelPos( -234, 0, 1 ) ); FastForwardButton.SetLocalScale( Vector3f( 2.0f ) ); FastForwardButton.SetButtonImages( FFTexture, FFHoverTexture, FFPressedTexture ); FastForwardButton.SetOnClick( FastForwardPressedCallback, this ); FastForwardButton.GetMenuObject()->SetLocalBoundsExpand( Vector3f::ZERO, PixelPos( -20, 0, 0 ) ); // playbutton created after fast forward button to fix z issues PlayButton.AddToMenu( PlaybackControlsMenu, &ControlsBackground ); PlayButton.SetLocalPosition( PixelPos( -341, 0, 2 ) ); PlayButton.SetLocalScale( Vector3f( 2.0f ) ); PlayButton.SetButtonImages( PauseTexture, PauseHoverTexture, PausePressedTexture ); PlayButton.SetOnClick( PlayPressedCallback, this ); CarouselButton.AddToMenu( PlaybackControlsMenu, &ControlsBackground ); CarouselButton.SetLocalPosition( PixelPos( 418, 0, 1 ) ); CarouselButton.SetLocalScale( Vector3f( 2.0f ) ); CarouselButton.SetButtonImages( CarouselTexture, CarouselHoverTexture, CarouselPressedTexture ); CarouselButton.SetOnClick( CarouselPressedCallback, this ); CarouselButton.GetMenuObject()->SetLocalBoundsExpand( PixelPos( 20, 0, 0 ), Vector3f::ZERO ); SeekbarBackground.AddToMenu( PlaybackControlsMenu, &ControlsBackground ); SeekbarBackground.SetLocalPosition( PixelPos( 78, 0, 2 ) ); SeekbarBackground.SetColor( Vector4f( 0.5333f, 0.5333f, 0.5333f, 1.0f ) ); SeekbarBackground.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, SeekbarBackgroundTexture, ScrubBarWidth + 6, 46 ); SeekbarBackground.AddComponent( &ScrubBar ); SeekbarProgress.AddToMenu( PlaybackControlsMenu, &SeekbarBackground ); SeekbarProgress.SetLocalPosition( PixelPos( 0, 0, 1 ) ); SeekbarProgress.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, SeekbarProgressTexture, ScrubBarWidth, 40 ); SeekbarProgress.GetMenuObject()->AddFlags( VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ) ); CurrentTime.AddToMenu( PlaybackControlsMenu, &SeekbarBackground ); CurrentTime.SetLocalPosition( PixelPos( -234, 52, 2 ) ); CurrentTime.SetLocalScale( Vector3f( 1.0f ) ); CurrentTime.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, SeekPosition ); CurrentTime.SetText( "2:33:33" ); CurrentTime.SetTextOffset( PixelPos( 0, 6, 1 ) ); CurrentTime.SetFontScale( 0.71f ); CurrentTime.SetColor( Vector4f( 0 / 255.0f, 93 / 255.0f, 219 / 255.0f, 1.0f ) ); CurrentTime.SetTextColor( Vector4f( 1.0f, 1.0f, 1.0f, 1.0f ) ); CurrentTime.GetMenuObject()->AddFlags( VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ) ); SeekTime.AddToMenu( PlaybackControlsMenu, &SeekbarBackground ); SeekTime.SetLocalPosition( PixelPos( -34, 52, 4 ) ); SeekTime.SetLocalScale( Vector3f( 1.0f ) ); SeekTime.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, SeekPosition ); SeekTime.SetText( "2:33:33" ); SeekTime.SetTextOffset( PixelPos( 0, 6, 1 ) ); SeekTime.SetFontScale( 0.71f ); SeekTime.SetColor( Vector4f( 47.0f / 255.0f, 70 / 255.0f, 89 / 255.0f, 1.0f ) ); SeekTime.SetTextColor( Vector4f( 1.0f, 1.0f, 1.0f, 1.0f ) ); SeekTime.GetMenuObject()->AddFlags( VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ) ); ScrubBar.SetWidgets( &SeekbarBackground, &SeekbarProgress, &CurrentTime, &SeekTime, ScrubBarWidth ); ScrubBar.SetOnClick( ScrubBarCallback, this ); }
void UIProgressBar::AddToMenu( UIMenu *menu, bool showDescriptionLabel, bool showCancelButton, UIObject *parent ) { // GuiSys.GetVRMenuMgr().SetShowDebugBounds(true); const Posef pose( Quatf( Vector3f( 0.0f, 1.0f, 0.0f ), 0.0f ), Vector3f( 0.0f, 0.0f, 0.0f ) ); Vector3f defaultScale( 1.0f ); VRMenuFontParms fontParms( HORIZONTAL_LEFT, VERTICAL_CENTER, false, false, false, 1.0f ); VRMenuObjectParms parms( VRMENU_BUTTON, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), "", pose, defaultScale, fontParms, menu->AllocId(), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); AddToMenuWithParms( menu, parent, parms ); // Bar... float barWidth = DEFAULT_WIDTH; if ( parent != NULL ) { barWidth = parent->GetMarginRect().GetWidth() - 18.0f - ( showDescriptionLabel ? 0.0f : showCancelButton ? 40.0 : 0.0f ); if ( barWidth < MIN_WIDTH ) { barWidth = MIN_WIDTH; } } ProgressBarTexture.LoadTextureFromApplicationPackage( "assets/img_progressbar_foreground.png" ); ProgressBarBackgroundTexture.LoadTextureFromApplicationPackage( "assets/img_progressbar_background.png" ); ProgressBackground.AddToMenu( menu, this ); ProgressBackground.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, ProgressBarBackgroundTexture, barWidth, BAR_HEIGHT, UIRectf( 4.0f, 0.0f, 4.0f, 0.0 ) ); ProgressBackground.AddFlags( VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ) ); ProgressBackground.AlignTo(TOP_LEFT, this, BOTTOM_LEFT, 0.01f ); ProgressImage.AddToMenu( menu, &ProgressBackground ); ProgressImage.SetImage( 0, SURFACE_TEXTURE_DIFFUSE, ProgressBarTexture, barWidth, BAR_HEIGHT, UIRectf( 4.0f, 0.0f, 4.0f, 0.0 ) ); ProgressImage.AddFlags( VRMenuObjectFlags_t( VRMENUOBJECT_FLAG_NO_FOCUS_GAINED ) | VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ) ); ProgressImage.AlignTo( TOP_LEFT, &ProgressBackground, TOP_LEFT, VRMenuObject::DEFAULT_TEXEL_SCALE ); // Label... if ( showDescriptionLabel ) { DescriptionLabel.AddToMenu( menu, this ); DescriptionLabel.SetText(""); DescriptionLabel.SetAlign( HORIZONTAL_LEFT, VERTICAL_CENTER ); DescriptionLabel.SetPadding( UIRectf( 0, 4, 0, 4) ); DescriptionLabel.SetFontScale( 0.4f ); DescriptionLabel.SetTextColor( Vector4f( 137.0f / 255.0f, 137.0f / 255.0f, 137.0f / 255.0f, 1.0f ) ); ProgressBackground.SetPadding( UIRectf( 0, 0, 0, 14 ) ); ProgressBackground.AlignTo(TOP_LEFT, &DescriptionLabel, BOTTOM_LEFT, 0.01f ); } // Cancel Button if ( showCancelButton ) { CancelButtonTexture.LoadTextureFromApplicationPackage( "assets/img_btn_download_cancel.png" ); CancelButton.AddToMenu( menu, this ); CancelButton.SetPadding( UIRectf( showDescriptionLabel ? barWidth - 28.0f : 0.0f, 0.0f, 0.0f, 0.0f ) ); CancelButton.SetDimensions( Vector2f( 40.0f, 40.0f ) ); CancelButton.SetButtonImages( CancelButtonTexture, CancelButtonTexture, CancelButtonTexture ); CancelButton.SetButtonColors( Vector4f(1.0f), Vector4f(1.0f, 0.5f, 0.0f, 1.0f ), Vector4f(1.0f, 0.0f, 0.0f, 1.0f) ); CancelButton.SetLocalPose( Quatf(), Vector3f( 0.0f, 0.0f, -0.01f ) ); if ( showDescriptionLabel ) { CancelButton.AlignTo(LEFT, this, RIGHT ); } else { CancelButton.AlignTo(LEFT, &ProgressBackground, RIGHT ); } } SetProgress( 0.0f ); }
//============================== // VRMenuEventHandler::Frame void VRMenuEventHandler::Frame( App * app, VrFrame const & vrFrame, OvrVRMenuMgr & menuMgr, BitmapFont const & font, menuHandle_t const & rootHandle,Posef const & menuPose, gazeCursorUserId_t const & gazeUserId, Array< VRMenuEvent > & events ) { VRMenuObject * root = menuMgr.ToObject( rootHandle ); if ( root == NULL ) { return; } // find the object the gaze is touching and update gaze focus const Matrix4f viewMatrix = app->GetLastViewMatrix(); const Vector3f viewPos( GetViewMatrixPosition( viewMatrix ) ); const Vector3f viewFwd( GetViewMatrixForward( viewMatrix ) ); HitTestResult result; menuHandle_t hitHandle = root->HitTest( app, menuMgr, font, menuPose, viewPos, viewFwd, ContentFlags_t( CONTENT_SOLID ), result ); result.RayStart = viewPos; result.RayDir = viewFwd; VRMenuObject * hit = hitHandle.IsValid() ? menuMgr.ToObject( hitHandle ) : NULL; app->GetGazeCursor().UpdateForUser( gazeUserId, result.t, ( hit != NULL && !( hit->GetFlags() & VRMenuObjectFlags_t( VRMENUOBJECT_NO_GAZE_HILIGHT ) ) ) ? CURSOR_STATE_HILIGHT : CURSOR_STATE_NORMAL ); /* if ( hit != NULL ) { app->ShowInfoText( 0.0f, "%s", hit->GetText().ToCStr() ); } */ bool focusChanged = ( hitHandle != FocusedHandle ); if ( focusChanged ) { // focus changed VRMenuObject * oldFocus = menuMgr.ToObject( FocusedHandle ); if ( oldFocus != NULL ) { // setup event for item losing the focus VRMenuEvent event( VRMENU_EVENT_FOCUS_LOST, EVENT_DISPATCH_TARGET, FocusedHandle, Vector3f( 0.0f ), result ); events.PushBack( event ); } if ( hit != NULL ) { if ( ( hit->GetFlags() & VRMENUOBJECT_FLAG_NO_FOCUS_GAINED ) == 0 ) { // set up event for item gaining the focus VRMenuEvent event( VRMENU_EVENT_FOCUS_GAINED, EVENT_DISPATCH_FOCUS, hitHandle, Vector3f( 0.0f ), result ); events.PushBack( event ); } } FocusedHandle = hitHandle; } bool touchPressed = ( vrFrame.Input.buttonPressed & ( BUTTON_TOUCH | BUTTON_A ) ) != 0; bool touchReleased = !touchPressed && ( vrFrame.Input.buttonReleased & ( BUTTON_TOUCH | BUTTON_A ) ) != 0; bool touchDown = ( vrFrame.Input.buttonState & BUTTON_TOUCH ) != 0; if ( ( vrFrame.Input.buttonPressed & BUTTON_SWIPE_UP ) != 0 ) { VRMenuEvent event( VRMENU_EVENT_SWIPE_UP, EVENT_DISPATCH_FOCUS, FocusedHandle, Vector3f( 0.0f ), result ); events.PushBack( event ); } if ( ( vrFrame.Input.buttonPressed & BUTTON_SWIPE_DOWN ) != 0 ) { VRMenuEvent event( VRMENU_EVENT_SWIPE_DOWN, EVENT_DISPATCH_FOCUS, FocusedHandle, Vector3f( 0.0f ), result ); events.PushBack( event ); } if ( ( vrFrame.Input.buttonPressed & BUTTON_SWIPE_FORWARD ) != 0 ) { VRMenuEvent event( VRMENU_EVENT_SWIPE_FORWARD, EVENT_DISPATCH_FOCUS, FocusedHandle, Vector3f( 0.0f ), result ); events.PushBack( event ); } if ( ( vrFrame.Input.buttonPressed & BUTTON_SWIPE_BACK ) != 0 ) { VRMenuEvent event( VRMENU_EVENT_SWIPE_BACK, EVENT_DISPATCH_FOCUS, FocusedHandle, Vector3f( 0.0f ), result ); events.PushBack( event ); } /* // report swipe data char const * swipeNames[5] = { "none", "down", "up", "back", "forward" }; int swipeUpDown = ( vrFrame.Input.buttonPressed & BUTTON_SWIPE_UP ) ? 2 : 0; swipeUpDown = ( vrFrame.Input.buttonPressed & BUTTON_SWIPE_DOWN ) ? 1 : swipeUpDown; int swipeForwardBack = ( vrFrame.Input.buttonPressed & BUTTON_SWIPE_FORWARD ) ? 4 : 0; swipeForwardBack = ( vrFrame.Input.buttonPressed & BUTTON_SWIPE_BACK ) ? 3 : swipeForwardBack; app->ShowInfoText( 1.0f, "touch %s\n( %s, %s )\n( %.2f, %.2f )\n( %.2f, %.2f )", touchDown ? swipeNames[1] : swipeNames[2], swipeNames[swipeUpDown], swipeNames[swipeForwardBack], vrFrame.Input.touch[0], vrFrame.Input.touch[1], vrFrame.Input.touchRelative[0], vrFrame.Input.touchRelative[1] ); */ // if nothing is focused, send events to the root if ( touchPressed ) { VRMenuEvent event( VRMENU_EVENT_TOUCH_DOWN, EVENT_DISPATCH_FOCUS, FocusedHandle, Vector3f( 0.0f ), result ); events.PushBack( event ); } if ( touchReleased ) { VRMenuEvent event( VRMENU_EVENT_TOUCH_UP, EVENT_DISPATCH_FOCUS, FocusedHandle, Vector3f( vrFrame.Input.touchRelative, 0.0f ), result ); events.PushBack( event ); } if ( touchDown ) { if ( vrFrame.Input.touchRelative.LengthSq() > Mathf::SmallestNonDenormal ) { VRMenuEvent event( VRMENU_EVENT_TOUCH_RELATIVE, EVENT_DISPATCH_FOCUS, FocusedHandle, Vector3f( vrFrame.Input.touchRelative, 0.0f ), result ); events.PushBack( event ); } VRMenuEvent event( VRMENU_EVENT_TOUCH_ABSOLUTE, EVENT_DISPATCH_FOCUS, FocusedHandle, Vector3f( vrFrame.Input.touch, 0.0f ), result ); events.PushBack( event ); } { // always post the frame event to the root VRMenuEvent event( VRMENU_EVENT_FRAME_UPDATE, EVENT_DISPATCH_BROADCAST, menuHandle_t(), Vector3f( 0.0f ), result ); events.PushBack( event ); } }
void ResumeMovieView::CreateMenu( App * app, OvrVRMenuMgr & menuMgr, BitmapFont const & font ) { Menu = VRMenu::Create( "ResumeMoviePrompt" ); Vector3f fwd( 0.0f, 0.0f, 1.0f ); Vector3f up( 0.0f, 1.0f, 0.0f ); Vector3f defaultScale( 1.0f ); Array< VRMenuObjectParms const * > parms; VRMenuFontParms fontParms( true, true, false, false, false, 1.3f ); Quatf orientation( Vector3f( 0.0f, 1.0f, 0.0f ), 0.0f ); Vector3f centerPos( 0.0f, 0.0f, 0.0f ); VRMenuObjectParms centerRootParms( VRMENU_CONTAINER, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), "CenterRoot", Posef( orientation, centerPos ), Vector3f( 1.0f, 1.0f, 1.0f ), fontParms, ID_CENTER_ROOT, VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( ¢erRootParms ); Menu->InitWithItems( menuMgr, font, 0.0f, VRMenuFlags_t(), parms ); parms.Clear(); // the centerroot item will get touch relative and touch absolute events and use them to rotate the centerRoot menuHandle_t centerRootHandle = Menu->HandleForId( menuMgr, ID_CENTER_ROOT ); VRMenuObject * centerRoot = menuMgr.ToObject( centerRootHandle ); OVR_ASSERT( centerRoot != NULL ); // ============================================================================== // // title // { Posef panelPose( Quatf( up, 0.0f ), Vector3f( 0.0f, 2.2f, -3.0f ) ); VRMenuObjectParms p( VRMENU_STATIC, Array< VRMenuComponent* >(), VRMenuSurfaceParms(), Strings::ResumeMenu_Title, panelPose, defaultScale, fontParms, VRMenuId_t( ID_TITLE.Get() ), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( &p ); Menu->AddItems( menuMgr, font, parms, centerRootHandle, false ); parms.Clear(); } // ============================================================================== // // options // Array<const char *> options; options.PushBack( Strings::ResumeMenu_Resume ); options.PushBack( Strings::ResumeMenu_Restart ); Array<const char *> icons; icons.PushBack( "assets/resume.png" ); icons.PushBack( "assets/restart.png" ); Array<PanelPose> optionPositions; optionPositions.PushBack( PanelPose( Quatf( up, 0.0f / 180.0f * Mathf::Pi ), Vector3f( -0.5f, 1.7f, -3.0f ), Vector4f( 1.0f, 1.0f, 1.0f, 1.0f ) ) ); optionPositions.PushBack( PanelPose( Quatf( up, 0.0f / 180.0f * Mathf::Pi ), Vector3f( 0.5f, 1.7f, -3.0f ), Vector4f( 1.0f, 1.0f, 1.0f, 1.0f ) ) ); int borderWidth = 0, borderHeight = 0; GLuint borderTexture = LoadTextureFromApplicationPackage( "assets/resume_restart_border.png", TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), borderWidth, borderHeight ); for ( int i = 0; i < optionPositions.GetSizeI(); ++i ) { ResumeMovieComponent * resumeMovieComponent = new ResumeMovieComponent( this, i ); Array< VRMenuComponent* > optionComps; optionComps.PushBack( resumeMovieComponent ); VRMenuSurfaceParms panelSurfParms( "", borderTexture, borderWidth, borderHeight, SURFACE_TEXTURE_ADDITIVE, 0, 0, 0, SURFACE_TEXTURE_MAX, 0, 0, 0, SURFACE_TEXTURE_MAX ); Posef panelPose( optionPositions[ i ].Orientation, optionPositions[ i ].Position ); VRMenuObjectParms * p = new VRMenuObjectParms( VRMENU_BUTTON, optionComps, panelSurfParms, options[ i ], panelPose, defaultScale, fontParms, VRMenuId_t( ID_OPTIONS.Get() + i ), VRMenuObjectFlags_t(), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( p ); Menu->AddItems( menuMgr, font, parms, centerRootHandle, false ); DeletePointerArray( parms ); parms.Clear(); // add icon menuHandle_t optionHandle = centerRoot->ChildHandleForId( menuMgr, VRMenuId_t( ID_OPTIONS.Get() + i ) ); VRMenuObject * optionObject = menuMgr.ToObject( optionHandle ); OVR_ASSERT( optionObject != NULL ); int iconWidth = 0, iconHeight = 0; GLuint iconTexture = LoadTextureFromApplicationPackage( icons[ i ], TextureFlags_t( TEXTUREFLAG_NO_DEFAULT ), iconWidth, iconHeight ); VRMenuSurfaceParms iconSurfParms( "", iconTexture, iconWidth, iconHeight, SURFACE_TEXTURE_DIFFUSE, 0, 0, 0, SURFACE_TEXTURE_MAX, 0, 0, 0, SURFACE_TEXTURE_MAX ); Bounds3f textBounds = optionObject->GetTextLocalBounds( font ); optionObject->SetTextLocalPosition( Vector3f( iconWidth * VRMenuObject::DEFAULT_TEXEL_SCALE * 0.5f, 0.0f, 0.0f ) ); Posef iconPose( optionPositions[ i ].Orientation, optionPositions[ i ].Position + Vector3f( textBounds.GetMins().x, 0.0f, 0.01f ) ); p = new VRMenuObjectParms( VRMENU_STATIC, Array< VRMenuComponent* >(), iconSurfParms, NULL, iconPose, defaultScale, fontParms, VRMenuId_t( ID_OPTION_ICONS.Get() + i ), VRMenuObjectFlags_t( VRMENUOBJECT_DONT_HIT_ALL ), VRMenuObjectInitFlags_t( VRMENUOBJECT_INIT_FORCE_POSITION ) ); parms.PushBack( p ); Menu->AddItems( menuMgr, font, parms, centerRootHandle, false ); DeletePointerArray( parms ); parms.Clear(); menuHandle_t iconHandle = centerRoot->ChildHandleForId( menuMgr, VRMenuId_t( ID_OPTION_ICONS.Get() + i ) ); resumeMovieComponent->Icon = menuMgr.ToObject( iconHandle ); } Cinema.app->GetGuiSys().AddMenu( Menu ); }
void UIImage::AddToMenu( OvrGuiSys & guiSys, UIMenu *menu, UIWidget *parent ) { AddToMenuFlags( guiSys, menu, parent, VRMenuObjectFlags_t() ); }