Represent alignment as a float; eliminates selects. (I havn't

yet decided whether these should be -1.0 ... +1.0, indicating
"fully left aligned" and "fully right aligned", or 0.0 ... 1.0,
indicating "anchor to this fractional position in m_size".
It may become the latter.)
This commit is contained in:
Glenn Maynard
2007-03-01 02:19:49 +00:00
parent f6b792490a
commit be4efcd0c2
5 changed files with 40 additions and 73 deletions
+6 -17
View File
@@ -72,8 +72,8 @@ void Actor::InitState()
m_start.Init(); m_start.Init();
m_current.Init(); m_current.Init();
m_HorizAlign = HorizAlign_Center; m_fHorizAlign = 0.0f;
m_VertAlign = VertAlign_Middle; m_fVertAlign = 0.0f;
m_Effect = no_effect; m_Effect = no_effect;
m_fSecsIntoEffect = 0; m_fSecsIntoEffect = 0;
@@ -166,8 +166,8 @@ Actor::Actor( const Actor &cpy ):
CPY( m_bFirstUpdate ); CPY( m_bFirstUpdate );
CPY( m_HorizAlign ); CPY( m_fHorizAlign );
CPY( m_VertAlign ); CPY( m_fVertAlign );
CPY( m_Effect ); CPY( m_Effect );
CPY( m_fSecsIntoEffect ); CPY( m_fSecsIntoEffect );
@@ -730,19 +730,8 @@ void Actor::ScaleTo( const RectF &rect, StretchType st )
break; break;
} }
switch( m_HorizAlign ) SetX( rect.left + rect_width * SCALE( m_fHorizAlign, -1.0f, +1.0f, 0.0f, 1.0f ) );
{ SetY( rect.top + rect_height * SCALE( m_fVertAlign, -1.0f, +1.0f, 0.0f, 1.0f ) );
case HorizAlign_Left: SetX( rect.left ); break;
case HorizAlign_Center: SetX( rect.left + rect_width/2 ); break;
case HorizAlign_Right: SetX( rect.left + rect_width ); break;
}
switch( m_VertAlign )
{
case VertAlign_Top: SetY( rect.top ); break;
case VertAlign_Middle: SetY( rect.top + rect_height/2 ); break;
case VertAlign_Bottom: SetY( rect.top + rect_height ); break;
}
SetZoom( fNewZoom ); SetZoom( fNewZoom );
} }
+4 -4
View File
@@ -251,8 +251,8 @@ public:
// //
// Alignment settings. These need to be virtual for BitmapText // Alignment settings. These need to be virtual for BitmapText
// //
virtual void SetHorizAlign( HorizAlign ha ) { m_HorizAlign = ha; } virtual void SetHorizAlign( HorizAlign ha ) { m_fHorizAlign = (ha == HorizAlign_Left)? -1.0f: (ha == HorizAlign_Center)? 0.0f: +1.0f; }
virtual void SetVertAlign( VertAlign va ) { m_VertAlign = va; } virtual void SetVertAlign( VertAlign va ) { m_fVertAlign = (va == VertAlign_Top)? -1.0f: (va == VertAlign_Middle)? 0.0f: +1.0f; }
// //
@@ -423,8 +423,8 @@ protected:
// //
// Stuff for alignment // Stuff for alignment
// //
HorizAlign m_HorizAlign; float m_fHorizAlign; /* -1 left 0 center +1 right */
VertAlign m_VertAlign; float m_fVertAlign; /* -1 top 0 center +1 bottom */
// //
+8 -16
View File
@@ -83,23 +83,15 @@ void ActorMultiTexture::DrawPrimitives()
{ {
Actor::SetGlobalRenderStates(); // set Actor-specified render states Actor::SetGlobalRenderStates(); // set Actor-specified render states
RageVector2 center = m_size;
center.x *= m_fHorizAlign * -0.5f;
center.y *= m_fVertAlign * -0.5f;
RectF quadVerticies; RectF quadVerticies;
quadVerticies.left = center.x - m_size.x/2.0f;
switch( m_HorizAlign ) quadVerticies.right = center.x + m_size.x/2.0f;
{ quadVerticies.top = center.y - m_size.y/2.0f;
case HorizAlign_Left: quadVerticies.left = 0; quadVerticies.right = m_size.x; break; quadVerticies.bottom = center.y + m_size.y/2.0f;
case HorizAlign_Center: quadVerticies.left = -m_size.x/2; quadVerticies.right = m_size.x/2; break;
case HorizAlign_Right: quadVerticies.left = -m_size.x; quadVerticies.right = 0; break;
default: ASSERT( false );
}
switch( m_VertAlign )
{
case VertAlign_Top: quadVerticies.top = 0; quadVerticies.bottom = m_size.y; break;
case VertAlign_Middle: quadVerticies.top = -m_size.y/2; quadVerticies.bottom = m_size.y/2; break;
case VertAlign_Bottom: quadVerticies.top = -m_size.y; quadVerticies.bottom = 0; break;
default: ASSERT(0);
}
DISPLAY->ClearAllTextures(); DISPLAY->ClearAllTextures();
for( size_t i = 0; i < m_aTextureUnits.size(); ++i ) for( size_t i = 0; i < m_aTextureUnits.size(); ++i )
+14 -20
View File
@@ -188,14 +188,12 @@ void BitmapText::BuildChars()
/* There's padding between every line: */ /* There's padding between every line: */
m_size.y += iPadding * int(m_wTextLines.size()-1); m_size.y += iPadding * int(m_wTextLines.size()-1);
int iY; // the top position of the first row of characters RageVector2 center = m_size;
switch( m_VertAlign ) // center.x *= m_fHorizAlign*-0.5f;
{ center.y *= m_fVertAlign*-0.5f;
case VertAlign_Top: iY = 0; break;
case VertAlign_Middle: iY = -lrintf(m_size.y/2.0f); break; // the top position of the first row of characters
case VertAlign_Bottom: iY = -(int)m_size.y; break; int iY = lrintf(center.y - m_size.y/2.0f);
default: ASSERT( false );
}
for( unsigned i=0; i<m_wTextLines.size(); i++ ) // foreach line for( unsigned i=0; i<m_wTextLines.size(); i++ ) // foreach line
{ {
@@ -206,14 +204,8 @@ void BitmapText::BuildChars()
reverse( sLine.begin(), sLine.end() ); reverse( sLine.begin(), sLine.end() );
const int iLineWidth = m_iLineWidths[i]; const int iLineWidth = m_iLineWidths[i];
int iX; float fCenterX = iLineWidth * m_fHorizAlign * -0.5f;
switch( m_HorizAlign ) int iX = lrintf(fCenterX - iLineWidth/2.0f);
{
case HorizAlign_Left: iX = 0; break;
case HorizAlign_Center: iX = -lrintf(iLineWidth/2.0f); break;
case HorizAlign_Right: iX = -iLineWidth; break;
default: ASSERT( false );
}
for( unsigned i = 0; i < sLine.size(); ++i ) for( unsigned i = 0; i < sLine.size(); ++i )
{ {
@@ -613,17 +605,19 @@ void BitmapText::DrawPrimitives()
/* Rebuild when these change. */ /* Rebuild when these change. */
void BitmapText::SetHorizAlign( HorizAlign ha ) void BitmapText::SetHorizAlign( HorizAlign ha )
{ {
if( ha == m_HorizAlign ) float fHorizAlign = m_fHorizAlign;
return;
Actor::SetHorizAlign(ha); Actor::SetHorizAlign(ha);
if( fHorizAlign == m_fHorizAlign )
return;
BuildChars(); BuildChars();
} }
void BitmapText::SetVertAlign( VertAlign va ) void BitmapText::SetVertAlign( VertAlign va )
{ {
if( va == m_VertAlign ) float fVertAlign = m_fVertAlign;
return;
Actor::SetVertAlign(va); Actor::SetVertAlign(va);
if( fVertAlign == m_fVertAlign )
return;
BuildChars(); BuildChars();
} }
+8 -16
View File
@@ -426,23 +426,15 @@ void Sprite::DrawTexture( const TweenState *state )
return; return;
// use m_temp_* variables to draw the object // use m_temp_* variables to draw the object
RageVector2 center = m_size;
center.x *= m_fHorizAlign * -0.5f;
center.y *= m_fVertAlign * -0.5f;
RectF quadVerticies; RectF quadVerticies;
quadVerticies.left = center.x - m_size.x/2.0f;
switch( m_HorizAlign ) quadVerticies.right = center.x + m_size.x/2.0f;
{ quadVerticies.top = center.y - m_size.y/2.0f;
case HorizAlign_Left: quadVerticies.left = 0; quadVerticies.right = m_size.x; break; quadVerticies.bottom = center.y + m_size.y/2.0f;
case HorizAlign_Center: quadVerticies.left = -m_size.x/2; quadVerticies.right = m_size.x/2; break;
case HorizAlign_Right: quadVerticies.left = -m_size.x; quadVerticies.right = 0; break;
default: ASSERT( false );
}
switch( m_VertAlign )
{
case VertAlign_Top: quadVerticies.top = 0; quadVerticies.bottom = m_size.y; break;
case VertAlign_Middle: quadVerticies.top = -m_size.y/2; quadVerticies.bottom = m_size.y/2; break;
case VertAlign_Bottom: quadVerticies.top = -m_size.y; quadVerticies.bottom = 0; break;
default: ASSERT(0);
}
/* Don't draw anything outside of the texture's image area. Texels outside /* Don't draw anything outside of the texture's image area. Texels outside