From 5875e8cf38a1d0411eea98de680774bd3f5eb07a Mon Sep 17 00:00:00 2001 From: James Hogan Date: Sun, 28 Dec 2008 11:22:13 +0000 Subject: [PATCH] Changed style background.image.src from QPixmap to KwResourceLink and implemented loading --- kworship/css/KwCssStyle.cpp | 44 ++++++++++++++++++++++---------- kworship/display/KwBackgroundManager.cpp | 5 ++-- kworship/display/KwDisplayStyles.h | 8 +++--- kworship/kworship.cpp | 4 +-- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/kworship/css/KwCssStyle.cpp b/kworship/css/KwCssStyle.cpp index 9573ee7..6e00153 100644 --- a/kworship/css/KwCssStyle.cpp +++ b/kworship/css/KwCssStyle.cpp @@ -25,6 +25,8 @@ #include "KwCssStyle.h" +#include + #include "KwCssUnprocessed.h" template <> KwCssUnprocessed KwCssStringify(const KwCssUnprocessed& value) @@ -87,6 +89,35 @@ KwCssUnprocessed KwCssStringify(const KwResourceLink& value) template <> KwResourceLink KwCssUnstringify(const KwCssUnprocessed& value, bool* success) { + if ("null" != value) + { + static QRegExp reFormat("((\\w*)\\s+)?\"((\\.|[^\\\"])*)\""); + static const QRegExp reUnescape("\\(.)"); + static const QString unescapeReplace("\\1"); + if (reFormat.exactMatch(value)) + { + QString keyword = reFormat.cap(1); + QString file = reFormat.cap(3); + file.replace(reUnescape, unescapeReplace); + *success = true; + if (keyword.isEmpty()) + { + return KwResourceLink(KUrl(file)); + } + else if ("frel" == keyword) + { + return KwResourceLink(KwResourceLink::FileRelative, file); + } + else if ("aroot" == keyword) + { + return KwResourceLink(KwResourceLink::ArchiveRoot, file); + } + else if ("arel" == keyword) + { + return KwResourceLink(KwResourceLink::ArchiveRelative, file); + } + } + } *success = false; return KwResourceLink(); } @@ -103,16 +134,3 @@ QBrush KwCssUnstringify(const KwCssUnprocessed& value, bool* success) *success = true; return QBrush(Qt::black); } - -#include -template <> -KwCssUnprocessed KwCssStringify(const QPixmap& value) -{ - return "Pixmap()"; -} -template <> -QPixmap KwCssUnstringify(const KwCssUnprocessed& value, bool* success) -{ - *success = true; - return QPixmap(); -} diff --git a/kworship/display/KwBackgroundManager.cpp b/kworship/display/KwBackgroundManager.cpp index d01f96a..7240c61 100644 --- a/kworship/display/KwBackgroundManager.cpp +++ b/kworship/display/KwBackgroundManager.cpp @@ -58,7 +58,7 @@ KwBackgroundManager::~KwBackgroundManager() /// Apply the styles in a scope. void KwBackgroundManager::applyStyles(KwCssScope* scope) { - QPixmap image = KwDisplayStyles::background::image::pixmap(scope); + KwResourceLink image = KwDisplayStyles::background::image::src(scope); if (image.isNull()) { // Set background if applicable @@ -66,7 +66,8 @@ void KwBackgroundManager::applyStyles(KwCssScope* scope) } else { - setImage(image); + /// @todo Get the actual file from resource link instead of assuming its a url. + setImage(QPixmap(image.url().toLocalFile())); } } diff --git a/kworship/display/KwDisplayStyles.h b/kworship/display/KwDisplayStyles.h index 3d063fe..ad93c45 100644 --- a/kworship/display/KwDisplayStyles.h +++ b/kworship/display/KwDisplayStyles.h @@ -26,12 +26,10 @@ * @author James Hogan */ -#include "KwCssStandardise.h" +#include +#include -#include #include -#include -#include // The cpp file defines this to declare static variables #ifdef KW_DISPLAY_STYLES_DECLARE @@ -51,7 +49,7 @@ namespace KwDisplayStyles // Image backgrounds KWCSS_START_NAMESPACE(background, image) // Pixmap to display - KWCSS_DEFINE_PROPERTY(QPixmap, pixmap) + KWCSS_DEFINE_PROPERTY(KwResourceLink, src) KWCSS_END_NAMESPACE() /* // Video backgrounds diff --git a/kworship/kworship.cpp b/kworship/kworship.cpp index 1b1605b..58c05f8 100644 --- a/kworship/kworship.cpp +++ b/kworship/kworship.cpp @@ -165,13 +165,13 @@ kworship::kworship() KwCssStyleRule beachyTheme; beachyTheme.setCriteriaClasses(QSet() << "beachy"); beachyTheme.setStyle("background.brush", Qt::black); - beachyTheme.setStyle("background.image.pixmap", QPixmap("/home/james/media/images/projector/misc/love-god-light.jpg")); + beachyTheme.setStyle("background.image.src", KUrl("file:///home/james/media/images/projector/misc/love-god-light.jpg")); styleRules->addRule(beachyTheme); KwCssStyleRule bibleTheme; bibleTheme.setCriteriaKeys(KwCssStyleRule::KeyList() << KwCssScopeKey(KwBiblePlaylistItem::scopeTypeId())); bibleTheme.setStyle("background.brush", Qt::black); - bibleTheme.setStyle("background.image.pixmap", QPixmap("/home/james/media/images/projector/misc/bible.jpg")); + bibleTheme.setStyle("background.image.src", KUrl("file:///home/james/media/images/projector/misc/bible.jpg")); styleRules->addRule(bibleTheme); m_document->playlist()->addStyleSheet(styleRules); -- 2.11.4.GIT