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.
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 8.2 KiB |
@@ -154,11 +154,21 @@ inline void TeletextPageRender::drawCharacter(QPainter &painter, int r, int c, u
|
|||||||
if (dontUnderline)
|
if (dontUnderline)
|
||||||
characterCode = 0x20;
|
characterCode = 0x20;
|
||||||
|
|
||||||
|
// Set 24 has reduced height Latin G0 capital letters for diacritical marks to sit on top of
|
||||||
|
if (characterDiacritical != 0 && // Not for no-diacritical-mark
|
||||||
|
characterDiacritical != 9 && // Not for these diacriticals that go under the letter
|
||||||
|
characterDiacritical != 11 &&
|
||||||
|
characterDiacritical != 12 &&
|
||||||
|
characterDiacritical != 14 &&
|
||||||
|
(characterSet == 0 || characterSet == 6) && // Only for Latin G0 and Hebrew G0
|
||||||
|
characterCode >= 0x41 && characterCode <= 0x5a) // and only for the capital letters A-Z
|
||||||
|
characterSet = 24;
|
||||||
|
|
||||||
if (characterCode == 0x20 && characterSet < 25 && characterDiacritical == 0)
|
if (characterCode == 0x20 && characterSet < 25 && characterDiacritical == 0)
|
||||||
painter.fillRect(c*12, r*10, 12, 10, m_backgroundQColor);
|
painter.fillRect(c*12, r*10, 12, 10, m_backgroundQColor);
|
||||||
else if (characterCode == 0x7f && characterSet == 24)
|
else if (characterCode == 0x7f && characterSet == 24)
|
||||||
painter.fillRect(c*12, r*10, 12, 10, m_foregroundQColor);
|
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);
|
drawBoldOrItalicCharacter(painter, r, c, characterCode, characterSet, characterFragment);
|
||||||
else {
|
else {
|
||||||
m_fontBitmap.image()->setColorTable(QList<QRgb>{m_backgroundQColor.rgba(), m_foregroundQColor.rgba()});
|
m_fontBitmap.image()->setColorTable(QList<QRgb>{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);
|
QImage styledImage = QImage(12, 10, QImage::Format_Mono);
|
||||||
QPainter styledPainter;
|
QPainter styledPainter;
|
||||||
|
|
||||||
|
// Don't apply style to mosaics
|
||||||
|
const bool mosaic = characterSet > 24 || (characterSet == 24 && (characterCode < 0x41 || characterCode > 0x5a));
|
||||||
|
|
||||||
m_fontBitmap.image()->setColorTable(QList<QRgb>{m_backgroundQColor.rgba(), m_foregroundQColor.rgba()});
|
m_fontBitmap.image()->setColorTable(QList<QRgb>{m_backgroundQColor.rgba(), m_foregroundQColor.rgba()});
|
||||||
styledImage.setColorTable(QList<QRgb>{m_backgroundQColor.rgba(), m_foregroundQColor.rgba()});
|
styledImage.setColorTable(QList<QRgb>{m_backgroundQColor.rgba(), m_foregroundQColor.rgba()});
|
||||||
|
|
||||||
if (m_decoder->cellItalic(r, c)) {
|
if (!mosaic && m_decoder->cellItalic(r, c)) {
|
||||||
styledImage.fill(0);
|
styledImage.fill(0);
|
||||||
|
|
||||||
styledPainter.begin(&styledImage);
|
styledPainter.begin(&styledImage);
|
||||||
@@ -232,7 +245,8 @@ inline void TeletextPageRender::drawBoldOrItalicCharacter(QPainter &painter, int
|
|||||||
} else
|
} else
|
||||||
styledImage = m_fontBitmap.image()->copy((characterCode-32)*12, characterSet*10, 12, 10);
|
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;
|
QImage boldeningImage;
|
||||||
|
|
||||||
boldeningImage = styledImage.copy();
|
boldeningImage = styledImage.copy();
|
||||||
|
|||||||
Reference in New Issue
Block a user