From 7cd632b4e2d350131b4c6884de56eca5ba2b9951 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Mon, 17 Jun 2024 22:08:31 +0100 Subject: [PATCH] Convert font image straight to QIcons Fixes a compile error with recent Qt6 versions --- render.cpp | 27 ++++++++++++++++++--------- render.h | 6 ++---- x26dockwidget.cpp | 4 ++-- x26menus.cpp | 2 +- x26model.cpp | 12 +++++------- 5 files changed, 28 insertions(+), 23 deletions(-) diff --git a/render.cpp b/render.cpp index 2ecbe17..8e07b23 100644 --- a/render.cpp +++ b/render.cpp @@ -19,9 +19,9 @@ #include #include +#include #include #include -#include #include "render.h" @@ -29,25 +29,34 @@ int TeletextFontBitmap::s_instances = 0; -QBitmap *TeletextFontBitmap::s_fontBitmap = nullptr; QImage *TeletextFontBitmap::s_fontImage = nullptr; TeletextFontBitmap::TeletextFontBitmap() { - if (s_instances == 0) { - s_fontBitmap = new QBitmap(":/images/teletextfont.png"); - s_fontImage = new QImage(s_fontBitmap->toImage()); - } + if (s_instances == 0) + s_fontImage = new QImage(":/images/teletextfont.png"); + 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); } diff --git a/render.h b/render.h index 131c128..ba76d76 100644 --- a/render.h +++ b/render.h @@ -20,10 +20,9 @@ #ifndef RENDER_H #define RENDER_H -#include #include +#include #include -#include #include "decode.h" @@ -34,11 +33,10 @@ public: ~TeletextFontBitmap(); 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: static int s_instances; - static QBitmap* s_fontBitmap; static QImage* s_fontImage; }; diff --git a/x26dockwidget.cpp b/x26dockwidget.cpp index 7b44432..15e2c45 100644 --- a/x26dockwidget.cpp +++ b/x26dockwidget.cpp @@ -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.charBitmap(index.row()+32, 24); + return m_fontBitmap.charIcon(index.row()+32, 24); else - return m_fontBitmap.charBitmap(index.row()+32, m_characterSet); + return m_fontBitmap.charIcon(index.row()+32, m_characterSet); } return QVariant(); diff --git a/x26menus.cpp b/x26menus.cpp index 7c98d97..3dd55c7 100644 --- a/x26menus.cpp +++ b/x26menus.cpp @@ -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(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'))); } } diff --git a/x26model.cpp b/x26model.cpp index 58ad8b7..621f900 100644 --- a/x26model.cpp +++ b/x26model.cpp @@ -376,27 +376,25 @@ QVariant X26Model::data(const QModelIndex &index, int role) const break; case 0x21: // G1 mosaic character if (triplet.data() & 0x20) - // 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)); + return m_fontBitmap.charIcon(triplet.data(), 24); else if (triplet.data() >= 0x20) // 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; case 0x22: // G3 mosaic character at level 1.5 case 0x2b: // G3 mosaic character at level >=2.5 if (triplet.data() >= 0x20) - return QIcon(m_fontBitmap.charBitmap(triplet.data(), 26)); + return m_fontBitmap.charIcon(triplet.data(), 26); break; case 0x2f: // G2 character 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; default: if (triplet.modeExt() == 0x29 || (triplet.modeExt() >= 0x30 && triplet.modeExt() <= 0x3f)) // G0 character or G0 diacritical mark 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)