From ecefa035594179855a99db2dfc112f59f4156ab0 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Wed, 17 Apr 2024 22:15:01 +0100 Subject: [PATCH] Encapsulate the font bitmap --- render.h | 2 +- x26dockwidget.cpp | 2 +- x26model.cpp | 11 +++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/render.h b/render.h index c0b949b..131c128 100644 --- a/render.h +++ b/render.h @@ -33,8 +33,8 @@ public: TeletextFontBitmap(); ~TeletextFontBitmap(); - QBitmap *rawBitmap() const { return s_fontBitmap; } QImage *image() const { return s_fontImage; } + QBitmap charBitmap(int c, int s) const { return s_fontBitmap->copy((c-32)*12, s*10, 12, 10); } private: static int s_instances; diff --git a/x26dockwidget.cpp b/x26dockwidget.cpp index ae3f20b..dca70c5 100644 --- a/x26dockwidget.cpp +++ b/x26dockwidget.cpp @@ -57,7 +57,7 @@ QVariant CharacterListModel::data(const QModelIndex &index, int role) const return QString("0x%1").arg(index.row()+0x20, 2, 16); if (role == Qt::DecorationRole) - return m_fontBitmap.rawBitmap()->copy(index.row()*12, m_characterSet*10, 12, 10); + return m_fontBitmap.charBitmap(index.row()+32, m_characterSet); return QVariant(); } diff --git a/x26model.cpp b/x26model.cpp index 44f36b5..54d4845 100644 --- a/x26model.cpp +++ b/x26model.cpp @@ -19,6 +19,7 @@ #include "x26model.h" +#include #include #include "x26commands.h" @@ -374,22 +375,24 @@ QVariant X26Model::data(const QModelIndex &index, int role) const break; case 0x21: // G1 mosaic character if (triplet.data() & 0x20) - return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, 24*10, 12, 10); + // 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)); 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.rawBitmap()->copy((triplet.data()-32)*12, 26*10, 12, 10); + return QIcon(m_fontBitmap.charBitmap(triplet.data(), 26)); break; case 0x2f: // G2 character if (triplet.data() >= 0x20) - return m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, m_parentMainWidget->pageDecode()->cellG2CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())*10, 12, 10); + 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.rawBitmap()->copy((triplet.data()-32)*12, m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())*10, 12, 10); + return QIcon(m_fontBitmap.charBitmap(triplet.data(), m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()))); } if (role == Qt::EditRole && index.column() == 2)