|
@@ -469,6 +469,50 @@ void Alphabet::textFormatieren( Text *zText, int maxBreite, int schriftSize ) //
|
|
setDrawSchriftSize( sg );
|
|
setDrawSchriftSize( sg );
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void Alphabet::render( Text *zTxt, Bild &rendezRObj, std::function< int( int, int, int ) > f ) const // Zeichnet txt nach rendezRObj
|
|
|
|
+{
|
|
|
|
+ int zRObjBr = rendezRObj.getBreite();
|
|
|
|
+ int zRObjHi = rendezRObj.getHeight();
|
|
|
|
+ int xp = pos.x;
|
|
|
|
+ int yp = pos.y;
|
|
|
|
+ int zh = getZeilenHeight();
|
|
|
|
+ if( yp + ( zh + zeilenAbstand ) * zTxt->anzahlVon( '\n' ) + zh < 0 || xp >= zRObjBr || yp >= zRObjHi )
|
|
|
|
+ return;
|
|
|
|
+ char *text = zTxt->getText();
|
|
|
|
+ int len = zTxt->getLength();
|
|
|
|
+ for( int i = 0; i < len; ++i )
|
|
|
|
+ {
|
|
|
|
+ unsigned char c = text[ i ];
|
|
|
|
+ if( c == ' ' )
|
|
|
|
+ {
|
|
|
|
+ xp += drawSchriftSize / 2;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if( c == '\t' )
|
|
|
|
+ {
|
|
|
|
+ xp += drawSchriftSize;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if( c == '\n' )
|
|
|
|
+ {
|
|
|
|
+ yp += zh + zeilenAbstand;
|
|
|
|
+ xp = pos.x;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if( zeichen[ c ] )
|
|
|
|
+ {
|
|
|
|
+ if( xp >= zRObjBr )
|
|
|
|
+ continue;
|
|
|
|
+ if( rendezRObj.isAreaDrawable( xp, yp, zeichen[ c ]->getBreite(), zeichen[ c ]->getHeight() ) )
|
|
|
|
+ {
|
|
|
|
+ zeichen[ c ]->setPosition( xp, yp );
|
|
|
|
+ zeichen[ c ]->render( rendezRObj, f( xp, yp, i ) );
|
|
|
|
+ }
|
|
|
|
+ xp += zeichen[ c ]->getBreite();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
void Alphabet::render( Text *zTxt, Bild &rendezRObj, int f ) const // Zeichnet txt nach rendezRObj
|
|
void Alphabet::render( Text *zTxt, Bild &rendezRObj, int f ) const // Zeichnet txt nach rendezRObj
|
|
{
|
|
{
|
|
int zRObjBr = rendezRObj.getBreite();
|
|
int zRObjBr = rendezRObj.getBreite();
|
|
@@ -515,13 +559,79 @@ void Alphabet::render( Text *zTxt, Bild &rendezRObj, int f ) const // Zeichnet t
|
|
{
|
|
{
|
|
if( xp >= zRObjBr )
|
|
if( xp >= zRObjBr )
|
|
continue;
|
|
continue;
|
|
- zeichen[ c ]->setPosition( xp, yp );
|
|
|
|
- zeichen[ c ]->render( rendezRObj, f );
|
|
|
|
|
|
+ if( rendezRObj.isAreaDrawable( xp, yp, zeichen[ c ]->getBreite(), zeichen[ c ]->getHeight() ) )
|
|
|
|
+ {
|
|
|
|
+ zeichen[ c ]->setPosition( xp, yp );
|
|
|
|
+ zeichen[ c ]->render( rendezRObj, f );
|
|
|
|
+ }
|
|
xp += zeichen[ c ]->getBreite();
|
|
xp += zeichen[ c ]->getBreite();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void Alphabet::render( Text *zTxt, Bild &rendezRObj, int cpos, int cf, int fbeg, int ff, std::function< int( int, int, int ) > f ) const
|
|
|
|
+{
|
|
|
|
+ int zRObjBr = rendezRObj.getBreite();
|
|
|
|
+ int zRObjHi = rendezRObj.getHeight();
|
|
|
|
+ int xp = pos.x;
|
|
|
|
+ int yp = pos.y;
|
|
|
|
+ int zh = getZeilenHeight();
|
|
|
|
+ if( yp + ( zh + zeilenAbstand ) * zTxt->anzahlVon( '\n' ) + zh < 0 || xp >= zRObjBr || yp >= zRObjHi )
|
|
|
|
+ return;
|
|
|
|
+ char *text = zTxt->getText();
|
|
|
|
+ int len = zTxt->getLength();
|
|
|
|
+ bool faerb = 0;
|
|
|
|
+ for( int i = 0; i < len; ++i )
|
|
|
|
+ {
|
|
|
|
+ unsigned char c = text[ i ];
|
|
|
|
+ if( i == fbeg )
|
|
|
|
+ faerb = !faerb;
|
|
|
|
+ if( i == cpos )
|
|
|
|
+ {
|
|
|
|
+ rendezRObj.drawLinieVAlpha( xp, yp, zh, cf );
|
|
|
|
+ faerb = !faerb;
|
|
|
|
+ }
|
|
|
|
+ if( c == ' ' )
|
|
|
|
+ {
|
|
|
|
+ if( faerb )
|
|
|
|
+ rendezRObj.alphaRegion( xp, yp, drawSchriftSize / 2, zh, ff );
|
|
|
|
+ xp += drawSchriftSize / 2;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if( c == '\t' )
|
|
|
|
+ {
|
|
|
|
+ if( faerb )
|
|
|
|
+ rendezRObj.alphaRegion( xp, yp, drawSchriftSize, zh, ff );
|
|
|
|
+ xp += drawSchriftSize;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if( c == '\n' )
|
|
|
|
+ {
|
|
|
|
+ yp += zh + zeilenAbstand;
|
|
|
|
+ xp = pos.x;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if( zeichen[ c ] )
|
|
|
|
+ {
|
|
|
|
+ if( xp >= zRObjBr )
|
|
|
|
+ continue;
|
|
|
|
+ if( rendezRObj.isAreaDrawable( xp, yp, zeichen[ c ]->getBreite(), zeichen[ c ]->getHeight() ) )
|
|
|
|
+ {
|
|
|
|
+ if( faerb )
|
|
|
|
+ {
|
|
|
|
+ int br = zeichen[ c ]->getBreite();
|
|
|
|
+ rendezRObj.alphaRegion( xp, yp, br, zh, ff );
|
|
|
|
+ }
|
|
|
|
+ zeichen[ c ]->setPosition( xp, yp );
|
|
|
|
+ zeichen[ c ]->render( rendezRObj, f( xp, yp, i ) );
|
|
|
|
+ }
|
|
|
|
+ xp += zeichen[ c ]->getBreite();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if( len == cpos )
|
|
|
|
+ rendezRObj.drawLinieVAlpha( xp, yp, zh, cf );
|
|
|
|
+}
|
|
|
|
+
|
|
void Alphabet::render( Text *zTxt, Bild &rendezRObj, int cpos, int cf, int fbeg, int ff, int f ) const
|
|
void Alphabet::render( Text *zTxt, Bild &rendezRObj, int cpos, int cf, int fbeg, int ff, int f ) const
|
|
{
|
|
{
|
|
int zRObjBr = rendezRObj.getBreite();
|
|
int zRObjBr = rendezRObj.getBreite();
|
|
@@ -580,13 +690,16 @@ void Alphabet::render( Text *zTxt, Bild &rendezRObj, int cpos, int cf, int fbeg,
|
|
{
|
|
{
|
|
if( xp >= zRObjBr )
|
|
if( xp >= zRObjBr )
|
|
continue;
|
|
continue;
|
|
- if( faerb )
|
|
|
|
|
|
+ if( rendezRObj.isAreaDrawable( xp, yp, zeichen[ c ]->getBreite(), zeichen[ c ]->getHeight() ) )
|
|
{
|
|
{
|
|
- int br = zeichen[ c ]->getBreite();
|
|
|
|
- rendezRObj.alphaRegion( xp, yp, br, zh, ff );
|
|
|
|
|
|
+ if( faerb )
|
|
|
|
+ {
|
|
|
|
+ int br = zeichen[ c ]->getBreite();
|
|
|
|
+ rendezRObj.alphaRegion( xp, yp, br, zh, ff );
|
|
|
|
+ }
|
|
|
|
+ zeichen[ c ]->setPosition( xp, yp );
|
|
|
|
+ zeichen[ c ]->render( rendezRObj, f );
|
|
}
|
|
}
|
|
- zeichen[ c ]->setPosition( xp, yp );
|
|
|
|
- zeichen[ c ]->render( rendezRObj, f );
|
|
|
|
xp += zeichen[ c ]->getBreite();
|
|
xp += zeichen[ c ]->getBreite();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -835,6 +948,30 @@ void Schrift::textFormatieren( Text *zText, int maxBreite, int schriftSize ) //
|
|
unlock();
|
|
unlock();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void Schrift::renderText( Text *zTxt, Bild &zRObj, std::function< int( int, int, int ) > f ) // zeichnet txt nach zRObj
|
|
|
|
+{
|
|
|
|
+ lock();
|
|
|
|
+ Alphabet *drawAlphabet = alphabet->zAlphabet( (unsigned char)schriftSize );
|
|
|
|
+ if( !drawAlphabet )
|
|
|
|
+ {
|
|
|
|
+ for( int i = 0; i < 256; ++i )
|
|
|
|
+ {
|
|
|
|
+ drawAlphabet = alphabet->zAlphabet( (unsigned char)( schriftSize - i ) );
|
|
|
|
+ if( drawAlphabet )
|
|
|
|
+ break;
|
|
|
|
+ drawAlphabet = alphabet->zAlphabet( (unsigned char)( schriftSize + i ) );
|
|
|
|
+ if( drawAlphabet )
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if( drawAlphabet )
|
|
|
|
+ {
|
|
|
|
+ drawAlphabet->setDrawPosition( drawPos.x, drawPos.y );
|
|
|
|
+ drawAlphabet->render( zTxt, zRObj, f );
|
|
|
|
+ }
|
|
|
|
+ unlock();
|
|
|
|
+}
|
|
|
|
+
|
|
void Schrift::renderText( Text *zTxt, Bild &zRObj, int f ) // zeichnet txt nach zRObj
|
|
void Schrift::renderText( Text *zTxt, Bild &zRObj, int f ) // zeichnet txt nach zRObj
|
|
{
|
|
{
|
|
lock();
|
|
lock();
|
|
@@ -859,6 +996,30 @@ void Schrift::renderText( Text *zTxt, Bild &zRObj, int f ) // zeichnet txt nach
|
|
unlock();
|
|
unlock();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void Schrift::renderText( Text *zTxt, Bild &zRObj, int cpos, int cf, int fbeg, int ff, std::function< int( int, int, int ) > f )
|
|
|
|
+{
|
|
|
|
+ lock();
|
|
|
|
+ Alphabet *drawAlphabet = alphabet->zAlphabet( (unsigned char)schriftSize );
|
|
|
|
+ if( !drawAlphabet )
|
|
|
|
+ {
|
|
|
|
+ for( int i = 0; i < 256; ++i )
|
|
|
|
+ {
|
|
|
|
+ drawAlphabet = alphabet->zAlphabet( (unsigned char)( schriftSize - i ) );
|
|
|
|
+ if( drawAlphabet )
|
|
|
|
+ break;
|
|
|
|
+ drawAlphabet = alphabet->zAlphabet( (unsigned char)( schriftSize + i ) );
|
|
|
|
+ if( drawAlphabet )
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if( drawAlphabet )
|
|
|
|
+ {
|
|
|
|
+ drawAlphabet->setDrawPosition( drawPos.x, drawPos.y );
|
|
|
|
+ drawAlphabet->render( zTxt, zRObj, cpos, cf, fbeg, ff, f );
|
|
|
|
+ }
|
|
|
|
+ unlock();
|
|
|
|
+}
|
|
|
|
+
|
|
void Schrift::renderText( Text *zTxt, Bild &zRObj, int cpos, int cf, int fbeg, int ff, int f )
|
|
void Schrift::renderText( Text *zTxt, Bild &zRObj, int cpos, int cf, int fbeg, int ff, int f )
|
|
{
|
|
{
|
|
lock();
|
|
lock();
|