Convert font image straight to QIcons
Fixes a compile error with recent Qt6 versions
This commit is contained in:
27
render.cpp
27
render.cpp
@@ -19,9 +19,9 @@
|
||||
|
||||
#include <QBitmap>
|
||||
#include <QColor>
|
||||
#include <QIcon>
|
||||
#include <QImage>
|
||||
#include <QPainter>
|
||||
#include <QPixmap>
|
||||
|
||||
#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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
6
render.h
6
render.h
@@ -20,10 +20,9 @@
|
||||
#ifndef RENDER_H
|
||||
#define RENDER_H
|
||||
|
||||
#include <QBitmap>
|
||||
#include <QColor>
|
||||
#include <QIcon>
|
||||
#include <QImage>
|
||||
#include <QPixmap>
|
||||
|
||||
#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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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')));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
12
x26model.cpp
12
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)
|
||||
|
||||
Reference in New Issue
Block a user