From 4ef0b016aa3c89f72b98b50a521d9e1a6823ceb9 Mon Sep 17 00:00:00 2001 From: Gavin MacGregor Date: Wed, 23 Jul 2025 15:20:12 +0100 Subject: [PATCH] Improve appearance of capital letters with diacriticals Added reduced-height Latin G0 capital letters to the font to make room for diacritical marks to sit on top. --- .../fontimages/teletextfont.png | Bin 8111 -> 8398 bytes src/qteletextdecoder/render.cpp | 20 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/qteletextdecoder/fontimages/teletextfont.png b/src/qteletextdecoder/fontimages/teletextfont.png index 73bf1116bffcc115cc7ebabcdacf96581e9a9519..3be0245f654ba7930c101c219e7c1cd1ec9b547e 100644 GIT binary patch literal 8398 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 literal 8111 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 0x41 && characterCode <= 0x5a) // and only for the capital letters A-Z + characterSet = 24; + if (characterCode == 0x20 && characterSet < 25 && characterDiacritical == 0) painter.fillRect(c*12, r*10, 12, 10, m_backgroundQColor); else if (characterCode == 0x7f && characterSet == 24) painter.fillRect(c*12, r*10, 12, 10, m_foregroundQColor); - else if ((m_decoder->cellBold(r, c) || m_decoder->cellItalic(r, c)) && characterSet < 24) + else if ((m_decoder->cellBold(r, c) || m_decoder->cellItalic(r, c))) drawBoldOrItalicCharacter(painter, r, c, characterCode, characterSet, characterFragment); else { m_fontBitmap.image()->setColorTable(QList{m_backgroundQColor.rgba(), m_foregroundQColor.rgba()}); @@ -217,10 +227,13 @@ inline void TeletextPageRender::drawBoldOrItalicCharacter(QPainter &painter, int QImage styledImage = QImage(12, 10, QImage::Format_Mono); QPainter styledPainter; + // Don't apply style to mosaics + const bool mosaic = characterSet > 24 || (characterSet == 24 && (characterCode < 0x41 || characterCode > 0x5a)); + m_fontBitmap.image()->setColorTable(QList{m_backgroundQColor.rgba(), m_foregroundQColor.rgba()}); styledImage.setColorTable(QList{m_backgroundQColor.rgba(), m_foregroundQColor.rgba()}); - if (m_decoder->cellItalic(r, c)) { + if (!mosaic && m_decoder->cellItalic(r, c)) { styledImage.fill(0); styledPainter.begin(&styledImage); @@ -232,7 +245,8 @@ inline void TeletextPageRender::drawBoldOrItalicCharacter(QPainter &painter, int } else styledImage = m_fontBitmap.image()->copy((characterCode-32)*12, characterSet*10, 12, 10); - if (m_decoder->cellBold(r, c)) { + // We have either an unstyled or italic character. Now bolden if needed. + if (!mosaic && m_decoder->cellBold(r, c)) { QImage boldeningImage; boldeningImage = styledImage.copy();