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 <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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
6
render.h
6
render.h
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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')));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
12
x26model.cpp
12
x26model.cpp
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user