aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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