aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Gadinger <nilsding@nilsding.org>2021-05-09 21:08:04 +0200
committerGeorg Gadinger <nilsding@nilsding.org>2021-11-26 21:01:42 +0100
commit816780e80943ef0ae6e645c1f912a5575fca9770 (patch)
tree7521c95b449c0dd73dca0c89c560165fc544d8f9
parent596e820fa0e8bca3c53a00481c34ac6f047160ee (diff)
downloadqmmp-patches.tar.gz
qmmp-patches.tar.bz2
qmmp-patches.zip
skinned: use bitmap font if we really have all the characters availableHEADpatches
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.cpp3
-rw-r--r--src/plugins/Ui/skinned/skin.cpp15
-rw-r--r--src/plugins/Ui/skinned/skin.h6
-rw-r--r--src/plugins/Ui/skinned/textscroller.cpp2
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