diff options
| author | Georg Gadinger <nilsding@nilsding.org> | 2021-05-09 21:08:04 +0200 |
|---|---|---|
| committer | Georg Gadinger <nilsding@nilsding.org> | 2021-11-26 21:01:42 +0100 |
| commit | 816780e80943ef0ae6e645c1f912a5575fca9770 (patch) | |
| tree | 7521c95b449c0dd73dca0c89c560165fc544d8f9 | |
| parent | 596e820fa0e8bca3c53a00481c34ac6f047160ee (diff) | |
| download | qmmp-patches.tar.gz qmmp-patches.tar.bz2 qmmp-patches.zip | |
This makes tracks from e.g. "Turmion Kätilöt" or "Die Ärzte" display
using the bitmap font. Since the characters seem to be UTF-8 anyway, it
seems to be fine in my initial tests...
| -rw-r--r-- | src/plugins/Ui/skinned/playlisttitlebar.cpp | 3 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/skin.cpp | 15 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/skin.h | 6 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/textscroller.cpp | 2 |
4 files changed, 23 insertions, 3 deletions
diff --git a/src/plugins/Ui/skinned/playlisttitlebar.cpp b/src/plugins/Ui/skinned/playlisttitlebar.cpp index d9ada09b8..6a15319f5 100644 --- a/src/plugins/Ui/skinned/playlisttitlebar.cpp +++ b/src/plugins/Ui/skinned/playlisttitlebar.cpp @@ -155,8 +155,7 @@ void PlayListTitleBar::updatePixmap() } if (m_shaded) { - bool useBitmapFont = m_bitmap && (m_text.toLatin1() == m_text.toLocal8Bit()); //use bitmap font if possible - if (useBitmapFont) + if (m_bitmap && m_skin->canUseBitmapFont(m_text)) // use bitmap font if possible { int durationTextWidth = bitmapTextWidth(m_durationText, m_skin) + 1; // +1 to ensure a space in front of it int maxChars = (width() - durationTextWidth - 35 * m_ratio) / m_skin->getLetter('a').width(); diff --git a/src/plugins/Ui/skinned/skin.cpp b/src/plugins/Ui/skinned/skin.cpp index f1b6f8b79..425a34d45 100644 --- a/src/plugins/Ui/skinned/skin.cpp +++ b/src/plugins/Ui/skinned/skin.cpp @@ -185,6 +185,12 @@ const QRegion Skin::getRegion(uint r) const return m_regions[r]; } +const bool Skin::canUseBitmapFont(const QString& s) const +{ + qDebug("Skin: canUseBitmapFont %s", m_bitmapLetters.exactMatch(s) ? "true" : "false"); + return m_bitmapLetters.exactMatch(s); +} + void Skin::setSkin (const QString& path) { QSettings settings(Qmmp::configFile(), QSettings::IniFormat); @@ -795,6 +801,15 @@ void Skin::loadLetters(void) /* text background */ //m_items->insert (TEXTBG, letters[2][6]); + + // set up a regexp that matches all letters with a mapping + QStringList regexpChars; + for (auto &ch : m_letters.keys()) + { + regexpChars.append(ch); + } + m_bitmapLetters = QRegExp("[" + QRegExp::escape(regexpChars.join("")) + "]+"); + m_bitmapLetters.setCaseSensitivity(Qt::CaseSensitivity::CaseInsensitive); } void Skin::loadMonoSter() diff --git a/src/plugins/Ui/skinned/skin.h b/src/plugins/Ui/skinned/skin.h index d342c1e5a..42f63946c 100644 --- a/src/plugins/Ui/skinned/skin.h +++ b/src/plugins/Ui/skinned/skin.h @@ -66,6 +66,11 @@ public: const QColor getMainColor(int n) const; const QColor &getVisColor(int n) const; const QRegion getRegion(uint r) const; + /*! + * Returns whether s only contains characters which have a bitmapped + * equivalent. + */ + const bool canUseBitmapFont(const QString& s) const; enum Button { @@ -297,6 +302,7 @@ private: QMap<uint, QPixmap> m_ms_parts; QMap<uint, QPixmap> m_parts; QMap<QChar, QPixmap> m_letters; + QRegExp m_bitmapLetters; QMap<QByteArray, QByteArray> m_pledit_txt; QMap<uint, QRegion> m_regions; QPixmap m_main; diff --git a/src/plugins/Ui/skinned/textscroller.cpp b/src/plugins/Ui/skinned/textscroller.cpp index b41041985..b114fbdfa 100644 --- a/src/plugins/Ui/skinned/textscroller.cpp +++ b/src/plugins/Ui/skinned/textscroller.cpp @@ -263,7 +263,7 @@ void TextScroller::processMetaData() void TextScroller::preparePixmap(const QString &text, bool scrollable) { m_scroll = scrollable; - bool bitmap = m_bitmap && (text.toLatin1() == text.toLocal8Bit()); //use bitmap font if possible + bool bitmap = m_bitmap && m_skin->canUseBitmapFont(text); // use bitmap font if possible if(scrollable) { int textWidth = m_bitmap ? QString(text + SCROLL_SEP).size() * 5 |
