viewBox for glyphpaths added

This commit is contained in:
Uwe Rathmann 2025-02-10 14:39:57 +01:00
parent f96dc71b49
commit 0a3c3fda73
2 changed files with 19 additions and 3 deletions

View File

@ -326,6 +326,12 @@ static uint qskGlyphCount( const QRawFont& font )
return fontEngine ? fontEngine->glyphCount() : 0; return fontEngine ? fontEngine->glyphCount() : 0;
} }
static qreal qskPixelSize( const QRawFont& font )
{
const auto fontEngine = QRawFontPrivate::get( font )->fontEngine;
return fontEngine ? fontEngine->fontDef.pixelSize : 0.0;
}
static GlyphNameTable qskGlyphNameTable( const QRawFont& font ) static GlyphNameTable qskGlyphNameTable( const QRawFont& font )
{ {
const auto count = qskGlyphCount( font ); const auto count = qskGlyphCount( font );
@ -452,10 +458,16 @@ QskGraphic QskGlyphTable::glyphGraphic( uint glyphIndex ) const
if ( glyphIndex > 0 && qskGlyphCount( m_data->font ) > 0 ) if ( glyphIndex > 0 && qskGlyphCount( m_data->font ) > 0 )
{ {
const auto path = glyphPath( glyphIndex ); auto path = glyphPath( glyphIndex );
if ( !path.isEmpty() ) if ( !path.isEmpty() )
{ {
// vertical glyph coordinates are from [-sz, 0.0]
const auto sz = qskPixelSize( m_data->font );
path.translate( 0.0, sz );
graphic.setViewBox( QRectF( 0.0, 0.0, sz, sz ) );
QPainter painter( &graphic ); QPainter painter( &graphic );
painter.setRenderHint( QPainter::Antialiasing, true ); painter.setRenderHint( QPainter::Antialiasing, true );
painter.fillPath( path, Qt::black ); painter.fillPath( path, Qt::black );

View File

@ -34,9 +34,11 @@ int main( int argc, char* argv[] )
return -1; return -1;
} }
const int pixelSize = 24; // something
QGuiApplication app( argc, argv ); QGuiApplication app( argc, argv );
QRawFont font( QString( argv[1] ), 16 ); QRawFont font( QString( argv[1] ), pixelSize );
if ( !font.isValid() ) if ( !font.isValid() )
{ {
qWarning() << "invalid font name:" << argv[1]; qWarning() << "invalid font name:" << argv[1];
@ -52,14 +54,16 @@ int main( int argc, char* argv[] )
return -3; return -3;
} }
const auto path = font.pathForGlyph( glyphIndex ); auto path = font.pathForGlyph( glyphIndex );
if ( path.isEmpty() ) if ( path.isEmpty() )
{ {
qWarning() << "no glyph for index:" << argv[2]; qWarning() << "no glyph for index:" << argv[2];
return -3; return -3;
} }
path.translate( 0.0, pixelSize );
QskGraphic graphic; QskGraphic graphic;
graphic.setViewBox( QRectF( 0.0, 0.0, pixelSize, pixelSize ) );
QPainter painter( &graphic ); QPainter painter( &graphic );
painter.setRenderHint( QPainter::Antialiasing, true ); painter.setRenderHint( QPainter::Antialiasing, true );