Performance optimizations for building the stroke font.
This commit is contained in:
parent
9b569e4739
commit
7e18256386
|
@ -38,8 +38,8 @@ void STROKE_GLYPH::AddPoint( const VECTOR2D& aPoint )
|
||||||
{
|
{
|
||||||
if( !m_penIsDown )
|
if( !m_penIsDown )
|
||||||
{
|
{
|
||||||
std::vector<VECTOR2D> v;
|
emplace_back();
|
||||||
push_back( v );
|
back().reserve( 16 ); // This handles all but 359 strokes (out of over 328,000)
|
||||||
m_penIsDown = true;
|
m_penIsDown = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,8 +49,10 @@ void STROKE_GLYPH::AddPoint( const VECTOR2D& aPoint )
|
||||||
|
|
||||||
void STROKE_GLYPH::RaisePen()
|
void STROKE_GLYPH::RaisePen()
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
if( m_penIsDown )
|
if( m_penIsDown )
|
||||||
back().shrink_to_fit();
|
back().shrink_to_fit();
|
||||||
|
#endif
|
||||||
|
|
||||||
m_penIsDown = false;
|
m_penIsDown = false;
|
||||||
}
|
}
|
||||||
|
@ -58,8 +60,12 @@ void STROKE_GLYPH::RaisePen()
|
||||||
|
|
||||||
void STROKE_GLYPH::Finalize()
|
void STROKE_GLYPH::Finalize()
|
||||||
{
|
{
|
||||||
|
// Shrinking the strokes saves a bit less than 512K of memory. It's not worth it for the
|
||||||
|
// performance hit of doing more than 328,000 reallocs.
|
||||||
|
#if 0
|
||||||
if( !empty() && !back().empty() )
|
if( !empty() && !back().empty() )
|
||||||
back().shrink_to_fit();
|
back().shrink_to_fit();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -108,15 +108,27 @@ void STROKE_FONT::loadNewStrokeFont( const char* const aNewStrokeFont[], int aNe
|
||||||
|
|
||||||
for( int j = 0; j < aNewStrokeFontSize; j++ )
|
for( int j = 0; j < aNewStrokeFontSize; j++ )
|
||||||
{
|
{
|
||||||
auto glyph = std::make_shared<STROKE_GLYPH>();
|
std::shared_ptr<STROKE_GLYPH> glyph = std::make_shared<STROKE_GLYPH>();
|
||||||
|
|
||||||
double glyphStartX = 0.0;
|
double glyphStartX = 0.0;
|
||||||
double glyphEndX = 0.0;
|
double glyphEndX = 0.0;
|
||||||
double glyphWidth = 0.0;
|
double glyphWidth = 0.0;
|
||||||
|
int strokes = 0;
|
||||||
std::vector<VECTOR2D>* pointList = nullptr;
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
while( aNewStrokeFont[j][i] )
|
||||||
|
{
|
||||||
|
|
||||||
|
if( aNewStrokeFont[j][i] == ' ' && aNewStrokeFont[j][i+1] == 'R' )
|
||||||
|
strokes++;
|
||||||
|
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
glyph->reserve( strokes + 1 );
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
|
||||||
while( aNewStrokeFont[j][i] )
|
while( aNewStrokeFont[j][i] )
|
||||||
{
|
{
|
||||||
VECTOR2D point( 0.0, 0.0 );
|
VECTOR2D point( 0.0, 0.0 );
|
||||||
|
@ -153,9 +165,6 @@ void STROKE_FONT::loadNewStrokeFont( const char* const aNewStrokeFont[], int aNe
|
||||||
// Only shapes like j y have coordinates < 0
|
// Only shapes like j y have coordinates < 0
|
||||||
point.y = (double) ( coordinate[1] - 'R' + FONT_OFFSET ) * STROKE_FONT_SCALE;
|
point.y = (double) ( coordinate[1] - 'R' + FONT_OFFSET ) * STROKE_FONT_SCALE;
|
||||||
|
|
||||||
if( !pointList )
|
|
||||||
pointList = new std::vector<VECTOR2D>;
|
|
||||||
|
|
||||||
glyph->AddPoint( point );
|
glyph->AddPoint( point );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue