diff --git a/stepmania/src/ActorFrame.cpp b/stepmania/src/ActorFrame.cpp index b8c95d5ebc..a040c63df2 100644 --- a/stepmania/src/ActorFrame.cpp +++ b/stepmania/src/ActorFrame.cpp @@ -121,7 +121,7 @@ void ActorFrame::LoadChildrenFromNode( const XNode* pNode ) SortByDrawOrder(); } -void ActorFrame::AddChild( Actor* pActor ) +void ActorFrame::AddChild( Actor *pActor ) { #if _DEBUG // check that this Actor isn't already added. @@ -137,13 +137,20 @@ void ActorFrame::AddChild( Actor* pActor ) pActor->SetParent( this ); } -void ActorFrame::RemoveChild( Actor* pActor ) +void ActorFrame::RemoveChild( Actor *pActor ) { vector::iterator iter = find( m_SubActors.begin(), m_SubActors.end(), pActor ); if( iter != m_SubActors.end() ) m_SubActors.erase( iter ); } +void ActorFrame::TransferChildren( ActorFrame *pTo ) +{ + FOREACH( Actor*, m_SubActors, i ) + pTo->AddChild( *i ); + RemoveAllChildren(); +} + Actor* ActorFrame::GetChild( const RString &sName ) { FOREACH( Actor*, m_SubActors, a ) diff --git a/stepmania/src/ActorFrame.h b/stepmania/src/ActorFrame.h index 366442368e..69f4a8a25e 100644 --- a/stepmania/src/ActorFrame.h +++ b/stepmania/src/ActorFrame.h @@ -16,8 +16,9 @@ public: void LoadFromNode( const XNode* pNode ); virtual ActorFrame *Copy() const; - virtual void AddChild( Actor* pActor ); - virtual void RemoveChild( Actor* pActor ); + virtual void AddChild( Actor *pActor ); + virtual void RemoveChild( Actor *pActor ); + void TransferChildren( ActorFrame *pTo ); Actor* GetChild( const RString &sName ); int GetNumChildren() const { return m_SubActors.size(); } diff --git a/stepmania/src/ScreenWithMenuElements.cpp b/stepmania/src/ScreenWithMenuElements.cpp index 5f41be0163..097ea2b500 100644 --- a/stepmania/src/ScreenWithMenuElements.cpp +++ b/stepmania/src/ScreenWithMenuElements.cpp @@ -92,6 +92,15 @@ void ScreenWithMenuElements::Init() m_sprOverlay->SetDrawOrder( DRAW_ORDER_OVERLAY ); this->AddChild( m_sprOverlay ); LOAD_ALL_COMMANDS( m_sprOverlay ); + + /* Experimental: Load "decorations" and make them children of the screen. */ + { + AutoActor decorations; + decorations.Load( THEME->GetPathB(m_sName,"decorations") ); + ActorFrame *pFrame = dynamic_cast((Actor*)decorations); + if( pFrame ) + pFrame->TransferChildren( this ); + } m_In.SetName( "In" ); m_In.Load( THEME->GetPathB(m_sName,"in") );