Revert "Convert font image straight to QIcons"

This reverts commit 7cd632b4e2.

The commit would cause the font icons to be inverted sometimes. This
reversion is altered to return the font bitmaps as a QPixmap instead of a
QBitmap to be compatible with Qt6.
This commit is contained in:
G.K.MacGregor
2024-06-25 18:49:38 +01:00
parent 7cd632b4e2
commit 9b4ee66e1c
5 changed files with 23 additions and 28 deletions

View File

@@ -19,9 +19,9 @@
#include <QBitmap>
#include <QColor>
#include <QIcon>
#include <QImage>
#include <QPainter>
#include <QPixmap>
#include "render.h"
@@ -29,34 +29,25 @@
int TeletextFontBitmap::s_instances = 0;
QBitmap *TeletextFontBitmap::s_fontBitmap = nullptr;
QImage *TeletextFontBitmap::s_fontImage = nullptr;
TeletextFontBitmap::TeletextFontBitmap()
{
if (s_instances == 0)
s_fontImage = new QImage(":/images/teletextfont.png");
if (s_instances == 0) {
s_fontBitmap = new QBitmap(":/images/teletextfont.png");
s_fontImage = new QImage(s_fontBitmap->toImage());
}
s_instances++;
}
TeletextFontBitmap::~TeletextFontBitmap()
{
s_instances--;
if (s_instances == 0)
if (s_instances == 0) {
delete s_fontImage;
delete s_fontBitmap;
}
QIcon TeletextFontBitmap::charIcon(int c, int s) const
{
QImage glyphImage;
QBitmap glyphBitmap;
glyphImage = s_fontImage->copy((c-32)*12, s*10, 12, 10);
glyphImage.invertPixels();
glyphBitmap = QBitmap::fromImage(glyphImage);
return QIcon(glyphBitmap);
}

View File

@@ -20,9 +20,10 @@
#ifndef RENDER_H
#define RENDER_H
#include <QBitmap>
#include <QColor>
#include <QIcon>
#include <QImage>
#include <QPixmap>
#include "decode.h"
@@ -33,10 +34,11 @@ public:
~TeletextFontBitmap();
QImage *image() const { return s_fontImage; }
QIcon charIcon(int c, int s) const;
QPixmap charBitmap(int c, int s) const { return s_fontBitmap->copy((c-32)*12, s*10, 12, 10); }
private:
static int s_instances;
static QBitmap* s_fontBitmap;
static QImage* s_fontImage;
};

View File

@@ -61,9 +61,9 @@ QVariant CharacterListModel::data(const QModelIndex &index, int role) const
if (role == Qt::DecorationRole) {
if (m_mosaic && (index.row()+32) & 0x20)
return m_fontBitmap.charIcon(index.row()+32, 24);
return m_fontBitmap.charBitmap(index.row()+32, 24);
else
return m_fontBitmap.charIcon(index.row()+32, m_characterSet);
return m_fontBitmap.charBitmap(index.row()+32, m_characterSet);
}
return QVariant();

View File

@@ -140,7 +140,7 @@ TripletCharacterQMenu::TripletCharacterQMenu(int charSet, bool mosaic, QWidget *
const int charSetInColumn = (mosaic && ((r & 0x2) == 0)) ? 24 : charSet;
for (int c=0; c<16; c++)
m_actions[r*16+c] = charRange[r]->addAction(m_fontBitmap.charIcon(r*16+c+32, charSetInColumn), QString("0x%1").arg(r*16+c+32, 2, 16, QChar('0')));
m_actions[r*16+c] = charRange[r]->addAction(QIcon(m_fontBitmap.charBitmap(r*16+c+32, charSetInColumn)), QString("0x%1").arg(r*16+c+32, 2, 16, QChar('0')));
}
}

View File

@@ -376,25 +376,27 @@ QVariant X26Model::data(const QModelIndex &index, int role) const
break;
case 0x21: // G1 mosaic character
if (triplet.data() & 0x20)
return m_fontBitmap.charIcon(triplet.data(), 24);
// Returning the bitmap as-is doesn't seem to work here
// but putting it inside a QIcon... does?
return QIcon(m_fontBitmap.charBitmap(triplet.data(), 24));
else if (triplet.data() >= 0x20)
// Blast-through
return m_fontBitmap.charIcon(triplet.data(), m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()));
return QIcon(m_fontBitmap.charBitmap(triplet.data(), m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())));
break;
case 0x22: // G3 mosaic character at level 1.5
case 0x2b: // G3 mosaic character at level >=2.5
if (triplet.data() >= 0x20)
return m_fontBitmap.charIcon(triplet.data(), 26);
return QIcon(m_fontBitmap.charBitmap(triplet.data(), 26));
break;
case 0x2f: // G2 character
if (triplet.data() >= 0x20)
return m_fontBitmap.charIcon(triplet.data(), m_parentMainWidget->pageDecode()->cellG2CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()));
return QIcon(m_fontBitmap.charBitmap(triplet.data(), m_parentMainWidget->pageDecode()->cellG2CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())));
break;
default:
if (triplet.modeExt() == 0x29 || (triplet.modeExt() >= 0x30 && triplet.modeExt() <= 0x3f))
// G0 character or G0 diacritical mark
if (triplet.data() >= 0x20)
return m_fontBitmap.charIcon(triplet.data(), m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()));
return QIcon(m_fontBitmap.charBitmap(triplet.data(), m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())));
}
if (role == Qt::EditRole && index.column() == 2)