Revert "Convert font image straight to QIcons"
This reverts commit 7cd632b4e2.
The commit would cause the font icons to be inverted sometimes. This
reversion is altered to return the font bitmaps as a QPixmap instead of a
QBitmap to be compatible with Qt6.
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,34 +29,25 @@
|
||||
|
||||
int TeletextFontBitmap::s_instances = 0;
|
||||
|
||||
QBitmap *TeletextFontBitmap::s_fontBitmap = nullptr;
|
||||
QImage *TeletextFontBitmap::s_fontImage = nullptr;
|
||||
|
||||
TeletextFontBitmap::TeletextFontBitmap()
|
||||
{
|
||||
if (s_instances == 0)
|
||||
s_fontImage = new QImage(":/images/teletextfont.png");
|
||||
|
||||
if (s_instances == 0) {
|
||||
s_fontBitmap = new QBitmap(":/images/teletextfont.png");
|
||||
s_fontImage = new QImage(s_fontBitmap->toImage());
|
||||
}
|
||||
s_instances++;
|
||||
}
|
||||
|
||||
TeletextFontBitmap::~TeletextFontBitmap()
|
||||
{
|
||||
s_instances--;
|
||||
|
||||
if (s_instances == 0)
|
||||
if (s_instances == 0) {
|
||||
delete s_fontImage;
|
||||
}
|
||||
|
||||
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);
|
||||
delete s_fontBitmap;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
6
render.h
6
render.h
@@ -20,9 +20,10 @@
|
||||
#ifndef RENDER_H
|
||||
#define RENDER_H
|
||||
|
||||
#include <QBitmap>
|
||||
#include <QColor>
|
||||
#include <QIcon>
|
||||
#include <QImage>
|
||||
#include <QPixmap>
|
||||
|
||||
#include "decode.h"
|
||||
|
||||
@@ -33,10 +34,11 @@ public:
|
||||
~TeletextFontBitmap();
|
||||
|
||||
QImage *image() const { return s_fontImage; }
|
||||
QIcon charIcon(int c, int s) const;
|
||||
QPixmap charBitmap(int c, int s) const { return s_fontBitmap->copy((c-32)*12, s*10, 12, 10); }
|
||||
|
||||
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.charIcon(index.row()+32, 24);
|
||||
return m_fontBitmap.charBitmap(index.row()+32, 24);
|
||||
else
|
||||
return m_fontBitmap.charIcon(index.row()+32, m_characterSet);
|
||||
return m_fontBitmap.charBitmap(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(m_fontBitmap.charIcon(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(QIcon(m_fontBitmap.charBitmap(r*16+c+32, charSetInColumn)), QString("0x%1").arg(r*16+c+32, 2, 16, QChar('0')));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
12
x26model.cpp
12
x26model.cpp
@@ -376,25 +376,27 @@ QVariant X26Model::data(const QModelIndex &index, int role) const
|
||||
break;
|
||||
case 0x21: // G1 mosaic character
|
||||
if (triplet.data() & 0x20)
|
||||
return m_fontBitmap.charIcon(triplet.data(), 24);
|
||||
// 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));
|
||||
else if (triplet.data() >= 0x20)
|
||||
// Blast-through
|
||||
return m_fontBitmap.charIcon(triplet.data(), m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()));
|
||||
return QIcon(m_fontBitmap.charBitmap(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 m_fontBitmap.charIcon(triplet.data(), 26);
|
||||
return QIcon(m_fontBitmap.charBitmap(triplet.data(), 26));
|
||||
break;
|
||||
case 0x2f: // G2 character
|
||||
if (triplet.data() >= 0x20)
|
||||
return m_fontBitmap.charIcon(triplet.data(), m_parentMainWidget->pageDecode()->cellG2CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()));
|
||||
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.charIcon(triplet.data(), m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn()));
|
||||
return QIcon(m_fontBitmap.charBitmap(triplet.data(), m_parentMainWidget->pageDecode()->cellG0CharacterSet(triplet.activePositionRow(), triplet.activePositionColumn())));
|
||||
}
|
||||
|
||||
if (role == Qt::EditRole && index.column() == 2)
|
||||
|
||||
Reference in New Issue
Block a user