Convert font image straight to QIcons

Fixes a compile error with recent Qt6 versions
This commit is contained in:
G.K.MacGregor
2024-06-17 22:08:31 +01:00
parent a0dd98144a
commit 7cd632b4e2
5 changed files with 28 additions and 23 deletions

View File

@@ -19,9 +19,9 @@
#include <QBitmap> #include <QBitmap>
#include <QColor> #include <QColor>
#include <QIcon>
#include <QImage> #include <QImage>
#include <QPainter> #include <QPainter>
#include <QPixmap>
#include "render.h" #include "render.h"
@@ -29,25 +29,34 @@
int TeletextFontBitmap::s_instances = 0; int TeletextFontBitmap::s_instances = 0;
QBitmap *TeletextFontBitmap::s_fontBitmap = nullptr;
QImage *TeletextFontBitmap::s_fontImage = nullptr; QImage *TeletextFontBitmap::s_fontImage = nullptr;
TeletextFontBitmap::TeletextFontBitmap() TeletextFontBitmap::TeletextFontBitmap()
{ {
if (s_instances == 0) { if (s_instances == 0)
s_fontBitmap = new QBitmap(":/images/teletextfont.png"); s_fontImage = new QImage(":/images/teletextfont.png");
s_fontImage = new QImage(s_fontBitmap->toImage());
}
s_instances++; s_instances++;
} }
TeletextFontBitmap::~TeletextFontBitmap() TeletextFontBitmap::~TeletextFontBitmap()
{ {
s_instances--; s_instances--;
if (s_instances == 0) {
if (s_instances == 0)
delete s_fontImage; 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,10 +20,9 @@
#ifndef RENDER_H #ifndef RENDER_H
#define RENDER_H #define RENDER_H
#include <QBitmap>
#include <QColor> #include <QColor>
#include <QIcon>
#include <QImage> #include <QImage>
#include <QPixmap>
#include "decode.h" #include "decode.h"
@@ -34,11 +33,10 @@ public:
~TeletextFontBitmap(); ~TeletextFontBitmap();
QImage *image() const { return s_fontImage; } QImage *image() const { return s_fontImage; }
QBitmap charBitmap(int c, int s) const { return s_fontBitmap->copy((c-32)*12, s*10, 12, 10); } QIcon charIcon(int c, int s) const;
private: private:
static int s_instances; static int s_instances;
static QBitmap* s_fontBitmap;
static QImage* s_fontImage; static QImage* s_fontImage;
}; };

View File

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

View File

@@ -140,7 +140,7 @@ TripletCharacterQMenu::TripletCharacterQMenu(int charSet, bool mosaic, QWidget *
const int charSetInColumn = (mosaic && ((r & 0x2) == 0)) ? 24 : charSet; const int charSetInColumn = (mosaic && ((r & 0x2) == 0)) ? 24 : charSet;
for (int c=0; c<16; c++) for (int c=0; c<16; c++)
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'))); 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')));
} }
} }

View File

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