|
From: <cn...@us...> - 2009-08-23 05:24:42
|
Revision: 516
http://hgengine.svn.sourceforge.net/hgengine/?rev=516&view=rev
Author: cnlohr
Date: 2009-08-23 05:24:34 +0000 (Sun, 23 Aug 2009)
Log Message:
-----------
fix up text
Modified Paths:
--------------
Mercury2/modules/TextNode.cpp
Mercury2/modules/TextNode.h
Modified: Mercury2/modules/TextNode.cpp
===================================================================
--- Mercury2/modules/TextNode.cpp 2009-08-23 02:11:55 UTC (rev 515)
+++ Mercury2/modules/TextNode.cpp 2009-08-23 05:24:34 UTC (rev 516)
@@ -6,6 +6,8 @@
#include <Texture.h>
#include <vector>
+#define BIG_NUMBER 1e20
+
REGISTER_NODE_TYPE(TextNode);
TextNode::TextNode()
@@ -13,7 +15,9 @@
m_bDirty(false),m_pThisFont(NULL),
m_alignment( LEFT ),
m_fTextWidth( INFINITY ),
- m_kVBO(0), m_kTEX(0)
+ m_kVBO(0), m_kTEX(0),
+ m_fRMinX(0),m_fRMinY(0),
+ m_fRMaxX(0),m_fRMaxY(0)
{
}
@@ -186,6 +190,8 @@
if( m_alignment == RIGHT )
{
float offset = m_fTextWidth - fEndOfLine;
+ if( m_fTextWidth > BIG_NUMBER )
+ offset = -fEndOfLine;
for( unsigned j = iLineStart; j < i; j++ )
{
chars[j].xps += offset;
@@ -194,14 +200,16 @@
{
float offset = m_fTextWidth - fEndOfLine;
offset/=2;
+ if( m_fTextWidth > BIG_NUMBER )
+ offset = -fEndOfLine/2.;
for( unsigned j = iLineStart; j < i; j++ )
- {
chars[j].xps += offset;
- }
} else if( m_alignment == FIT_FULL )
{
float offset = m_fTextWidth - fEndOfLine;
offset/=float(iLettersOnLine);
+ if( m_fTextWidth > BIG_NUMBER )
+ offset = 0;
float letter = 0;
@@ -214,6 +222,9 @@
{
float offset = m_fTextWidth - fEndOfLine;
+ if( m_fTextWidth > BIG_NUMBER )
+ offset = 0;
+
if( iWordsOnLine != 0 )
{
offset/=float(iWordsOnLine-1);
@@ -241,6 +252,11 @@
}
}
+ m_fRMinX = 0;
+ m_fRMinY = 0;
+ m_fRMaxX = 0;
+ m_fRMaxY = 0;
+
//Stage 3: Actually generate the geometry.
((MercuryVBO*)m_kVBO.Ptr())->AllocateIndexSpace((unsigned)chars.size()*6);
((MercuryVBO*)m_kVBO.Ptr())->AllocateVertexSpace((unsigned)chars.size()*4);
@@ -303,8 +319,16 @@
id[i*6+3] = i * 4 + 0;
id[i*6+4] = i * 4 + 3;
id[i*6+5] = i * 4 + 2;
+
+ if( sy > m_fRMaxY ) m_fRMaxY = sy;
+ if( ex > m_fRMaxX ) m_fRMaxX = ex;
+ if( ey < m_fRMinY ) m_fRMinY = ey;
+ if( sx < m_fRMinX ) m_fRMinX = sx;
}
+ ((MercuryVBO*)m_kVBO.Ptr())->DirtyVertices();
+ ((MercuryVBO*)m_kVBO.Ptr())->DirtyIndices();
+
m_bDirty = false;
}
Modified: Mercury2/modules/TextNode.h
===================================================================
--- Mercury2/modules/TextNode.h 2009-08-23 02:11:55 UTC (rev 515)
+++ Mercury2/modules/TextNode.h 2009-08-23 05:24:34 UTC (rev 516)
@@ -39,12 +39,18 @@
inline const MString & GetText() { return m_sText; }
inline void SetDirtyText() { m_bDirty = true; }
-
+
+ inline float GetRMinX() { return m_fRMinX; }
+ inline float GetRMinY() { return m_fRMinY; }
+ inline float GetRMaxX() { return m_fRMaxX; }
+ inline float GetRMaxY() { return m_fRMaxY; }
+
GENRTTI(TextNode);
private:
class Font;
+
float m_fSize;
MString m_sText;
MString m_sFont;
@@ -52,11 +58,16 @@
Font * m_pThisFont;
TextAlignment m_alignment;
float m_fTextWidth;
-
+
MAutoPtr< MercuryAsset > m_kVBO;
MAutoPtr< MercuryAsset > m_kTEX;
+ float m_fRMinX;
+ float m_fRMinY;
+ float m_fRMaxX;
+ float m_fRMaxY;
+
//Font-class specific stuff
class Glyph
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|