Encapsulate the font bitmap

This commit is contained in:
G.K.MacGregor
2024-04-17 22:15:01 +01:00
parent 3db1815772
commit ecefa03559
3 changed files with 9 additions and 6 deletions

View File

@@ -33,8 +33,8 @@ public:
TeletextFontBitmap(); TeletextFontBitmap();
~TeletextFontBitmap(); ~TeletextFontBitmap();
QBitmap *rawBitmap() const { return s_fontBitmap; }
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); }
private: private:
static int s_instances; static int s_instances;

View File

@@ -57,7 +57,7 @@ QVariant CharacterListModel::data(const QModelIndex &index, int role) const
return QString("0x%1").arg(index.row()+0x20, 2, 16); return QString("0x%1").arg(index.row()+0x20, 2, 16);
if (role == Qt::DecorationRole) 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(); return QVariant();
} }

View File

@@ -19,6 +19,7 @@
#include "x26model.h" #include "x26model.h"
#include <QIcon>
#include <QList> #include <QList>
#include "x26commands.h" #include "x26commands.h"
@@ -374,22 +375,24 @@ 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)
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; 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 m_fontBitmap.rawBitmap()->copy((triplet.data()-32)*12, 26*10, 12, 10); return QIcon(m_fontBitmap.charBitmap(triplet.data(), 26));
break; break;
case 0x2f: // G2 character case 0x2f: // G2 character
if (triplet.data() >= 0x20) 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; 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 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) if (role == Qt::EditRole && index.column() == 2)