diff --git a/stepmania/src/OptionRow.cpp b/stepmania/src/OptionRow.cpp index b92184fe20..3d7609fc3d 100644 --- a/stepmania/src/OptionRow.cpp +++ b/stepmania/src/OptionRow.cpp @@ -24,6 +24,8 @@ StringToX( LayoutType ); const CString NEXT_ROW_NAME = "NextRow"; +CString ITEMS_LONG_ROW_X_NAME( size_t p ) { return ssprintf("ItemsLongRowP%dX",p+1); } +CString ICONS_X_NAME( size_t p ) { return ssprintf("IconsP%dX",p+1); } OptionRow::OptionRow() { @@ -72,6 +74,25 @@ void OptionRow::DetachHandler() m_pHand = NULL; } +void OptionRow::LoadMetrics( const CString &sType ) +{ + m_sType = sType; + ARROWS_X .Load(m_sType,"ArrowsX"); + LABELS_X .Load(m_sType,"LabelsX"); + LABELS_ON_COMMAND .Load(m_sType,"LabelsOnCommand"); + ITEMS_ZOOM .Load(m_sType,"ItemsZoom"); + ITEMS_START_X .Load(m_sType,"ItemsStartX"); + ITEMS_END_X .Load(m_sType,"ItemsEndX"); + ITEMS_GAP_X .Load(m_sType,"ItemsGapX"); + ITEMS_LONG_ROW_X .Load(m_sType,ITEMS_LONG_ROW_X_NAME,NUM_PLAYERS); + ITEMS_LONG_ROW_SHARED_X .Load(m_sType,"ItemsLongRowSharedX"); + ICONS_X .Load(m_sType,ICONS_X_NAME,NUM_PLAYERS); + COLOR_SELECTED .Load(m_sType,"ColorSelected"); + COLOR_NOT_SELECTED .Load(m_sType,"ColorNotSelected"); + COLOR_DISABLED .Load(m_sType,"ColorDisabled"); + CAPITALIZE_ALL_OPTION_NAMES .Load(m_sType,"CapitalizeAllOptionNames"); +} + void OptionRow::LoadNormal( const OptionRowDefinition &def, OptionRowHandler *pHand, bool bFirstItemGoesDown ) { m_RowDef = def; @@ -112,23 +133,27 @@ void OptionRow::LoadNormal( const OptionRowDefinition &def, OptionRowHandler *pH void OptionRow::AfterImportOptions( Font* pFont, - float fItemStartX, - float fItemGapX, - float fItemEndX, - float fItemLongRowSharedX, - const ThemeMetric1D &fItemLongRowX, - float fItemZoom, - bool bCapitalizeAllOptionNames, - const CString &sFontItemPath, - const CString &sFontTitlePath, const CString &sTitle, - const CString &sBulletPath, - float fLabelX, - float fArrowX, - float fY, - const ThemeMetric &cmdLabelOn + float fY ) { + /* + ITEMS_START_X, + ITEMS_GAP_X, + ITEMS_END_X, + ITEMS_LONG_ROW_SHARED_X, + ITEMS_LONG_ROW_X, + ITEMS_ZOOM, + CAPITALIZE_ALL_OPTION_NAMES, + THEME->GetPathF(m_sType,"item"), + THEME->GetPathF(m_sType,"title"), + THEME->GetPathG(m_sType,"bullet"), + LABELS_X, + ARROWS_X, + LABELS_ON_COMMAND +*/ + + // Make all selections the same if bOneChoiceForAllPlayers if( m_RowDef.bOneChoiceForAllPlayers ) { @@ -174,19 +199,19 @@ void OptionRow::AfterImportOptions( // If the items will go off the edge of the screen, then re-init with the "long row" style. { - float fX = fItemStartX; + float fX = ITEMS_START_X; for( unsigned c=0; cGetLineWidthInSourcePixels( CStringToWstring(sText) ); + fX += ITEMS_ZOOM * pFont->GetLineWidthInSourcePixels( CStringToWstring(sText) ); if( c != m_RowDef.choices.size()-1 ) - fX += fItemGapX; + fX += ITEMS_GAP_X; - if( fX > fItemEndX ) + if( fX > ITEMS_END_X ) { m_RowDef.layoutType = LAYOUT_SHOW_ONE_IN_ROW; break; @@ -208,22 +233,22 @@ void OptionRow::AfterImportOptions( const int iChoiceInRowWithFocus = m_iChoiceInRowWithFocus[p]; - bt->LoadFromFont( sFontItemPath ); + bt->LoadFromFont( THEME->GetPathF(m_sType,"item") ); CString sText = m_RowDef.choices[iChoiceInRowWithFocus]; - if( bCapitalizeAllOptionNames ) + if( CAPITALIZE_ALL_OPTION_NAMES ) sText.MakeUpper(); bt->SetText( sText ); - bt->SetZoom( fItemZoom ); + bt->SetZoom( ITEMS_ZOOM ); bt->SetShadowLength( 0 ); if( m_RowDef.bOneChoiceForAllPlayers ) { - bt->SetX( fItemLongRowSharedX ); + bt->SetX( ITEMS_LONG_ROW_SHARED_X ); break; // only initialize one item since it's shared } else { - bt->SetX( fItemLongRowX.GetValue(p) ); + bt->SetX( ITEMS_LONG_ROW_X.GetValue(p) ); } } @@ -242,18 +267,18 @@ void OptionRow::AfterImportOptions( case LAYOUT_SHOW_ALL_IN_ROW: { - float fX = fItemStartX; + float fX = ITEMS_START_X; for( unsigned c=0; cLoadFromFont( sFontItemPath ); + bt->LoadFromFont( THEME->GetPathF(m_sType,"item") ); CString sText = m_RowDef.choices[c]; - if( bCapitalizeAllOptionNames ) + if( CAPITALIZE_ALL_OPTION_NAMES ) sText.MakeUpper(); bt->SetText( sText ); - bt->SetZoom( fItemZoom ); + bt->SetZoom( ITEMS_ZOOM ); bt->SetShadowLength( 0 ); // set the X position of each item in the line @@ -271,7 +296,7 @@ void OptionRow::AfterImportOptions( ul->SetWidth( truncf(fItemWidth) ); } - fX += fItemWidth/2 + fItemGapX; + fX += fItemWidth/2 + ITEMS_GAP_X; } } break; @@ -287,13 +312,13 @@ void OptionRow::AfterImportOptions( this->AddChild( m_Underline[p][c] ); - m_textTitle.LoadFromFont( sFontTitlePath ); + m_textTitle.LoadFromFont( THEME->GetPathF(m_sType,"title") ); m_textTitle.SetText( sTitle ); - m_textTitle.SetXY( fLabelX, fY ); - m_textTitle.RunCommands( cmdLabelOn ); + m_textTitle.SetXY( LABELS_X, fY ); + m_textTitle.RunCommands( LABELS_ON_COMMAND ); - m_sprBullet.Load( sBulletPath ); - m_sprBullet.SetXY( fArrowX, fY ); + m_sprBullet.Load( THEME->GetPathG(m_sType,"bullet") ); + m_sprBullet.SetXY( ARROWS_X, fY ); // set the Y position of each item in the line for( unsigned c=0; cGetPathF(m_sType,"item"), + THEME->GetMetric("OptionNames","Exit"), + ITEMS_LONG_ROW_SHARED_X, + ITEMS_ZOOM +*/ m_RowType = OptionRow::ROW_EXIT; BitmapText *bt = new BitmapText; m_textItems.push_back( bt ); - bt->LoadFromFont( sFontPath ); - bt->SetText( sExitText ); - bt->SetZoom( fItemZoom ); + bt->LoadFromFont( THEME->GetPathF(m_sType,"item") ); + bt->SetText( THEME->GetMetric("OptionNames","Exit") ); + bt->SetZoom( ITEMS_ZOOM ); bt->SetShadowLength( 0 ); - bt->SetX( fItemLongRowSharedX ); + bt->SetX( ITEMS_LONG_ROW_SHARED_X ); this->AddChild( bt ); FOREACH_PlayerNumber( p ) @@ -375,8 +401,11 @@ void OptionRow::PositionUnderlines( bool bShowUnderlines, float fTweenSeconds ) } } -void OptionRow::PositionIcons( const ThemeMetric1D &fIconX, float fTweenSeconds ) +void OptionRow::PositionIcons( float fTweenSeconds ) { + /* + ICONS_X + */ if( m_RowType == OptionRow::ROW_EXIT ) return; @@ -388,7 +417,7 @@ void OptionRow::PositionIcons( const ThemeMetric1D &fIconX, float fTweenS int iWidth, iX, iY; // We only use iY GetWidthXY( p, iChoiceWithFocus, iWidth, iX, iY ); - icon.SetX( fIconX.GetValue(p) ); + icon.SetX( ICONS_X.GetValue(p) ); if( icon.GetDestY() != m_fY ) { @@ -402,8 +431,11 @@ void OptionRow::PositionIcons( const ThemeMetric1D &fIconX, float fTweenS } } -void OptionRow::UpdateText( bool bCapitalizeAllOptionNames ) +void OptionRow::UpdateText() { + /* + CAPITALIZE_ALL_OPTION_NAMES + */ switch( m_RowDef.layoutType ) { case LAYOUT_SHOW_ONE_IN_ROW: @@ -416,7 +448,7 @@ void OptionRow::UpdateText( bool bCapitalizeAllOptionNames ) item_no = min( item_no, m_textItems.size()-1 ); CString sText = m_RowDef.choices[iChoiceWithFocus]; - if( bCapitalizeAllOptionNames ) + if( CAPITALIZE_ALL_OPTION_NAMES ) sText.MakeUpper(); m_textItems[item_no]->SetText( sText ); } @@ -426,11 +458,14 @@ void OptionRow::UpdateText( bool bCapitalizeAllOptionNames ) void OptionRow::UpdateEnabledDisabled( bool bThisRowHasFocus[NUM_PLAYERS], - const RageColor &colorFocus, - const RageColor &colorNoFocus, - const RageColor &colorDisabled, float fTweenSeconds ) { + /* + COLOR_SELECTED, + COLOR_NOT_SELECTED, + COLOR_DISABLED, + */ + bool bThisRowHasFocusByAny = false; FOREACH_HumanPlayer( p ) bThisRowHasFocusByAny |= bThisRowHasFocus[p]; @@ -442,7 +477,7 @@ void OptionRow::UpdateEnabledDisabled( float fDiffuseAlpha = m_bHidden? 0.0f:1.0f; /* Don't tween selection colors at all. */ - RageColor color = bThisRowHasFocusByAny ? colorFocus:colorNoFocus; + RageColor color = bThisRowHasFocusByAny ? COLOR_SELECTED:COLOR_NOT_SELECTED; m_sprBullet.SetGlobalDiffuseColor( color ); m_textTitle.SetGlobalDiffuseColor( color ); @@ -469,11 +504,11 @@ void OptionRow::UpdateEnabledDisabled( bool bRowEnabled = m_RowDef.m_vEnabledForPlayers.find(pn) != m_RowDef.m_vEnabledForPlayers.end(); if( bThisRowHasFocus[pn] ) - color = colorFocus; + color = COLOR_SELECTED; else if( bRowEnabled ) - color = colorNoFocus; + color = COLOR_NOT_SELECTED; else - color = colorDisabled; + color = COLOR_DISABLED; color.a = (bRowEnabled && !m_bHidden) ? 1.0f:0.0f; @@ -508,7 +543,7 @@ void OptionRow::UpdateEnabledDisabled( if( m_RowType == OptionRow::ROW_EXIT ) { if( bThisRowHasFocusByAll ) - m_textItems[0]->SetEffectDiffuseShift( 1.0f, colorFocus, colorNoFocus ); + m_textItems[0]->SetEffectDiffuseShift( 1.0f, COLOR_SELECTED, COLOR_NOT_SELECTED ); else m_textItems[0]->SetEffectNone(); } @@ -621,7 +656,7 @@ void OptionRow::Reload() { ASSERT( m_RowDef.layoutType == LAYOUT_SHOW_ONE_IN_ROW ); m_RowDef = def; - UpdateText( true ); + UpdateText(); } break; case OptionRow::ROW_EXIT: diff --git a/stepmania/src/OptionRow.h b/stepmania/src/OptionRow.h index aee2607251..95845f342e 100644 --- a/stepmania/src/OptionRow.h +++ b/stepmania/src/OptionRow.h @@ -84,13 +84,9 @@ public: ~OptionRow(); void Clear(); + void LoadMetrics( const CString &sType ); void LoadNormal( const OptionRowDefinition &def, OptionRowHandler *pHand, bool bFirstItemGoesDown ); - void LoadExit( - const CString &sFontPath, - const CString &sExitText, - float fItemLongRowSharedX, - float fItemZoom - ); + void LoadExit(); void LoadOptionIcon( PlayerNumber pn, const CString &sText ); void ImportOptions(); @@ -98,32 +94,16 @@ public: void AfterImportOptions( Font* pFont, - float fItemStartX, - float fItemGapX, - float fItemEndX, - float fItemLongRowSharedX, - const ThemeMetric1D &fItemLongRowX, - float fItemZoom, - bool bCapitalizeAllOptionNames, - const CString &sFontItemPath, - const CString &sFontTitlePath, const CString &sTitle, - const CString &sBulletPath, - float fLabelX, - float fArrowX, - float fY, - const ThemeMetric &cmdLabelOn + float fY ); void DetachHandler(); void PositionUnderlines( bool bShowUnderlines, float fTweenSeconds ); - void PositionIcons( const ThemeMetric1D &fIconX, float fTweenSeconds ); - void UpdateText( bool bCapitalizeAllOptionNames ); + void PositionIcons( float fTweenSeconds ); + void UpdateText(); void UpdateEnabledDisabled( bool bThisRowHasFocus[NUM_PLAYERS], - const RageColor &colorFocus, - const RageColor &colorNoFocus, - const RageColor &colorDisabled, float fTweenSeconds ); int GetOneSelection( PlayerNumber pn, bool bAllowFail=false ) const; @@ -166,6 +146,7 @@ public: virtual void HandleMessage( const CString& sMessage ); protected: + CString m_sType; OptionRowDefinition m_RowDef; RowType m_RowType; OptionRowHandler* m_pHand; @@ -179,6 +160,22 @@ protected: float m_fY; bool m_bHidden; // currently off screen + + // metrics + ThemeMetric ARROWS_X; + ThemeMetric LABELS_X; + ThemeMetric LABELS_ON_COMMAND; + ThemeMetric ITEMS_ZOOM; + ThemeMetric ITEMS_START_X; + ThemeMetric ITEMS_END_X; + ThemeMetric ITEMS_GAP_X; + ThemeMetric1D ITEMS_LONG_ROW_X; + ThemeMetric ITEMS_LONG_ROW_SHARED_X; + ThemeMetric1D ICONS_X; + ThemeMetric COLOR_SELECTED; + ThemeMetric COLOR_NOT_SELECTED; + ThemeMetric COLOR_DISABLED; + ThemeMetric CAPITALIZE_ALL_OPTION_NAMES; }; #endif diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index f9a6624be8..0a9f754d28 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -68,8 +68,6 @@ const float TWEEN_SECONDS = 0.3f; CString ROW_Y_NAME( size_t r ) { return ssprintf("Row%dY",r+1); } -CString ITEMS_LONG_ROW_X_NAME( size_t p ) { return ssprintf("ItemsLongRowP%dX",p+1); } -CString ICONS_X_NAME( size_t p ) { return ssprintf("IconsP%dX",p+1); } CString EXPLANATION_X_NAME( size_t p ) { return ssprintf("ExplanationP%dX",p+1); } CString EXPLANATION_Y_NAME( size_t p ) { return ssprintf("ExplanationP%dY",p+1); } CString EXPLANATION_ON_COMMAND_NAME( size_t p ) { return ssprintf("ExplanationP%dOnCommand",p+1); } @@ -77,21 +75,11 @@ CString EXPLANATION_ON_COMMAND_NAME( size_t p ) { return ssprintf("ExplanationP% //REGISTER_SCREEN_CLASS( ScreenOptions ); // can't be instantiated ScreenOptions::ScreenOptions( CString sClassName ) : ScreenWithMenuElements(sClassName), - ARROWS_X (m_sName,"ArrowsX"), - LABELS_X (m_sName,"LabelsX"), - LABELS_ON_COMMAND (m_sName,"LabelsOnCommand"), NUM_ROWS_SHOWN (m_sName,"NumRowsShown"), ROW_Y (m_sName,ROW_Y_NAME,NUM_ROWS_SHOWN), ROW_Y_OFF_SCREEN_TOP (m_sName,"RowYOffScreenTop"), ROW_Y_OFF_SCREEN_CENTER (m_sName,"RowYOffScreenCenter"), ROW_Y_OFF_SCREEN_BOTTOM (m_sName,"RowYOffScreenBottom"), - ITEMS_ZOOM (m_sName,"ItemsZoom"), - ITEMS_START_X (m_sName,"ItemsStartX"), - ITEMS_END_X (m_sName,"ItemsEndX"), - ITEMS_GAP_X (m_sName,"ItemsGapX"), - ITEMS_LONG_ROW_X (m_sName,ITEMS_LONG_ROW_X_NAME,NUM_PLAYERS), - ITEMS_LONG_ROW_SHARED_X (m_sName,"ItemsLongRowSharedX"), - ICONS_X (m_sName,ICONS_X_NAME,NUM_PLAYERS), EXPLANATION_X (m_sName,EXPLANATION_X_NAME,NUM_PLAYERS), EXPLANATION_Y (m_sName,EXPLANATION_Y_NAME,NUM_PLAYERS), EXPLANATION_ON_COMMAND (m_sName,EXPLANATION_ON_COMMAND_NAME,NUM_PLAYERS), @@ -102,15 +90,11 @@ ScreenOptions::ScreenOptions( CString sClassName ) : ScreenWithMenuElements(sCla SCROLL_BAR_HEIGHT (m_sName,"ScrollBarHeight"), SCROLL_BAR_TIME (m_sName,"ScrollBarTime"), EXPLANATION_ZOOM (m_sName,"ExplanationZoom"), - COLOR_SELECTED (m_sName,"ColorSelected"), - COLOR_NOT_SELECTED (m_sName,"ColorNotSelected"), - COLOR_DISABLED (m_sName,"ColorDisabled"), SHOW_BPM_IN_SPEED_TITLE (m_sName,"ShowBpmInSpeedTitle"), FRAME_ON_COMMAND (m_sName,"FrameOnCommand"), FRAME_OFF_COMMAND (m_sName,"FrameOffCommand"), SEPARATE_EXIT_ROW (m_sName,"SeparateExitRow"), - SEPARATE_EXIT_ROW_Y (m_sName,"SeparateExitRowY"), - CAPITALIZE_ALL_OPTION_NAMES (m_sName,"CapitalizeAllOptionNames") + SEPARATE_EXIT_ROW_Y (m_sName,"SeparateExitRowY") { LOG->Trace( "ScreenOptions::ScreenOptions()" ); } @@ -169,6 +153,7 @@ void ScreenOptions::InitMenu( InputMode im, const vector &v bool bFirstRowGoesDown = m_OptionsNavigation==NAV_TOGGLE_THREE_KEY; + row.LoadMetrics( m_sName ); row.LoadNormal( vDefs[r], vHands[r], bFirstRowGoesDown ); this->ImportOptions( r ); @@ -181,21 +166,8 @@ void ScreenOptions::InitMenu( InputMode im, const vector &v row.AfterImportOptions( pFont, - ITEMS_START_X, - ITEMS_GAP_X, - ITEMS_END_X, - ITEMS_LONG_ROW_SHARED_X, - ITEMS_LONG_ROW_X, - ITEMS_ZOOM, - CAPITALIZE_ALL_OPTION_NAMES, - THEME->GetPathF(m_sName,"item"), - THEME->GetPathF(m_sName,"title"), GetExplanationTitle( r ), - THEME->GetPathG(m_sName,"bullet"), - LABELS_X, - ARROWS_X, - fY, - LABELS_ON_COMMAND + fY ); } @@ -233,12 +205,8 @@ void ScreenOptions::InitMenu( InputMode im, const vector &v // TRICKY: Add one more item. This will be "EXIT" m_Rows.push_back( new OptionRow() ); OptionRow &row = *m_Rows.back(); - row.LoadExit( - THEME->GetPathF(m_sName,"item"), - THEME->GetMetric("OptionNames","Exit"), - ITEMS_LONG_ROW_SHARED_X, - ITEMS_ZOOM - ); + row.LoadMetrics( m_sName ); + row.LoadExit(); m_framePage.AddChild( &row ); @@ -426,7 +394,7 @@ void ScreenOptions::PositionIcons() for( unsigned i=0; i ARROWS_X; - ThemeMetric LABELS_X; - ThemeMetric LABELS_ON_COMMAND; ThemeMetric NUM_ROWS_SHOWN; ThemeMetric1D ROW_Y; ThemeMetric ROW_Y_OFF_SCREEN_TOP; ThemeMetric ROW_Y_OFF_SCREEN_CENTER; ThemeMetric ROW_Y_OFF_SCREEN_BOTTOM; - ThemeMetric ITEMS_ZOOM; - ThemeMetric ITEMS_START_X; - ThemeMetric ITEMS_END_X; - ThemeMetric ITEMS_GAP_X; - ThemeMetric1D ITEMS_LONG_ROW_X; - ThemeMetric ITEMS_LONG_ROW_SHARED_X; - ThemeMetric1D ICONS_X; ThemeMetric1D EXPLANATION_X; ThemeMetric1D EXPLANATION_Y; ThemeMetric1D EXPLANATION_ON_COMMAND; @@ -142,15 +132,11 @@ protected: ThemeMetric SCROLL_BAR_HEIGHT; ThemeMetric SCROLL_BAR_TIME; ThemeMetric EXPLANATION_ZOOM; - ThemeMetric COLOR_SELECTED; - ThemeMetric COLOR_NOT_SELECTED; - ThemeMetric COLOR_DISABLED; ThemeMetric SHOW_BPM_IN_SPEED_TITLE; ThemeMetric FRAME_ON_COMMAND; ThemeMetric FRAME_OFF_COMMAND; ThemeMetric SEPARATE_EXIT_ROW; ThemeMetric SEPARATE_EXIT_ROW_Y; - ThemeMetric CAPITALIZE_ALL_OPTION_NAMES; }; #endif