From e1d8a3dc63391098f9381a3cb33d73e69b46c006 Mon Sep 17 00:00:00 2001 From: Robert Bieber Date: Mon, 21 Jun 2010 20:11:58 +0000 Subject: Theme Editor: Reworked information passing among render functions, now loads all viewports and shows Custom UI viewport in blue git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27026 a1c6a512-1295-4272-9138-f99709370657 --- utils/themeeditor/graphics/rbrenderinfo.cpp | 9 +++-- utils/themeeditor/graphics/rbrenderinfo.h | 8 +++- utils/themeeditor/graphics/rbscreen.cpp | 52 ++++++++++++++----------- utils/themeeditor/graphics/rbscreen.h | 16 ++++---- utils/themeeditor/graphics/rbviewport.cpp | 60 +++++++++++++++++++---------- utils/themeeditor/graphics/rbviewport.h | 1 + 6 files changed, 92 insertions(+), 54 deletions(-) (limited to 'utils/themeeditor/graphics') diff --git a/utils/themeeditor/graphics/rbrenderinfo.cpp b/utils/themeeditor/graphics/rbrenderinfo.cpp index 468533628f..ca9f2b632d 100644 --- a/utils/themeeditor/graphics/rbrenderinfo.cpp +++ b/utils/themeeditor/graphics/rbrenderinfo.cpp @@ -21,15 +21,17 @@ #include "rbrenderinfo.h" -RBRenderInfo::RBRenderInfo(ParseTreeModel* model, - ProjectModel* project, RBScreen* screen) - :mProject(project), mScreen(screen), mModel(model) +RBRenderInfo::RBRenderInfo(ParseTreeModel* model, ProjectModel* project, + QMap* settings, RBScreen* screen) + :mProject(project), mSettings(settings), + mScreen(screen), mModel(model) { } RBRenderInfo::RBRenderInfo(const RBRenderInfo &other) { mProject = other.mProject; + mSettings = other.mSettings; mScreen = other.mScreen; mModel = other.mModel; } @@ -37,6 +39,7 @@ RBRenderInfo::RBRenderInfo(const RBRenderInfo &other) const RBRenderInfo& RBRenderInfo::operator=(const RBRenderInfo& other) { mProject = other.mProject; + mSettings = other.mSettings; mScreen = other.mScreen; mModel = other.mModel; diff --git a/utils/themeeditor/graphics/rbrenderinfo.h b/utils/themeeditor/graphics/rbrenderinfo.h index c99de7beaa..c80cb00a9d 100644 --- a/utils/themeeditor/graphics/rbrenderinfo.h +++ b/utils/themeeditor/graphics/rbrenderinfo.h @@ -22,6 +22,8 @@ #ifndef RBRENDERINFO_H #define RBRENDERINFO_H +#include + class RBScreen; class ProjectModel; class ParseTreeModel; @@ -29,19 +31,21 @@ class ParseTreeModel; class RBRenderInfo { public: - RBRenderInfo(ParseTreeModel* model, - ProjectModel* project, RBScreen* screen); + RBRenderInfo(ParseTreeModel* model, ProjectModel* project, + QMap* settings, RBScreen* screen); RBRenderInfo(const RBRenderInfo& other); virtual ~RBRenderInfo(); const RBRenderInfo& operator=(const RBRenderInfo& other); ProjectModel* project() const{ return mProject; } + QMap* settings() const{ return mSettings; } RBScreen* screen() const{ return mScreen; } ParseTreeModel* model() const{ return mModel; } private: ProjectModel* mProject; + QMap* mSettings; RBScreen* mScreen; ParseTreeModel* mModel; }; diff --git a/utils/themeeditor/graphics/rbscreen.cpp b/utils/themeeditor/graphics/rbscreen.cpp index 8d3ef86ad0..065bea61cd 100644 --- a/utils/themeeditor/graphics/rbscreen.cpp +++ b/utils/themeeditor/graphics/rbscreen.cpp @@ -20,44 +20,42 @@ ****************************************************************************/ #include "rbscreen.h" +#include "rbviewport.h" #include #include -RBScreen::RBScreen(ProjectModel* project, QGraphicsItem *parent) : +RBScreen::RBScreen(const RBRenderInfo& info, QGraphicsItem *parent) : QGraphicsItem(parent), backdrop(0), project(project) { - width = safeSetting(project, "#screenwidth", "300").toInt(); - height = safeSetting(project, "#screenheight", "200").toInt(); + width = info.settings()->value("#screenwidth", "300").toInt(); + height = info.settings()->value("#screenheight", "200").toInt(); - QString bg = safeSetting(project, "background color", "FFFFFF"); + QString bg = info.settings()->value("background color", "000000"); bgColor = stringToColor(bg, Qt::white); - QString fg = safeSetting(project, "foreground color", "FFFFFF"); + QString fg = info.settings()->value("foreground color", "FFFFFF"); fgColor = stringToColor(fg, Qt::black); /* Loading backdrop if available */ - if(project) + QString base = info.settings()->value("themebase", ""); + QString backdropFile = info.settings()->value("backdrop", ""); + + if(QFile::exists(base + "/backdrops/" + backdropFile)) { - QString base = project->getSetting("themebase", ""); - QString backdropFile = project->getSetting("backdrop", ""); + backdrop = new QPixmap(base + "/backdrops/" + backdropFile); - if(QFile::exists(base + "/backdrops/" + backdropFile)) + /* If a backdrop has been found, use its width and height */ + if(!backdrop->isNull()) { - backdrop = new QPixmap(base + "/backdrops/" + backdropFile); - - /* If a backdrop has been found, use its width and height */ - if(!backdrop->isNull()) - { - width = backdrop->width(); - height = backdrop->height(); - } - else - { - delete backdrop; - backdrop = 0; - } + width = backdrop->width(); + height = backdrop->height(); + } + else + { + delete backdrop; + backdrop = 0; } } } @@ -93,6 +91,16 @@ void RBScreen::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, } } +void RBScreen::showViewport(QString name) +{ + if(namedViewports.value(name, 0) == 0) + return; + + namedViewports.value(name)->show(); + update(); +} + + QColor RBScreen::stringToColor(QString str, QColor fallback) { diff --git a/utils/themeeditor/graphics/rbscreen.h b/utils/themeeditor/graphics/rbscreen.h index 78bbcfd8b2..6a9da2fcda 100644 --- a/utils/themeeditor/graphics/rbscreen.h +++ b/utils/themeeditor/graphics/rbscreen.h @@ -25,12 +25,15 @@ #include #include "projectmodel.h" +#include "rbrenderinfo.h" + +class RBViewport; class RBScreen : public QGraphicsItem { public: - RBScreen(ProjectModel* project = 0, QGraphicsItem *parent = 0); + RBScreen(const RBRenderInfo& info, QGraphicsItem *parent = 0); virtual ~RBScreen(); QPainterPath shape() const; @@ -41,14 +44,11 @@ public: int getWidth() const{ return width; } int getHeight() const{ return height; } - static QString safeSetting(ProjectModel* project, QString key, - QString fallback) + void loadViewport(QString name, RBViewport* view) { - if(project) - return project->getSetting(key, fallback); - else - return fallback; + namedViewports.insert(name, view); } + void showViewport(QString name); static QColor stringToColor(QString str, QColor fallback); @@ -62,6 +62,8 @@ private: ProjectModel* project; + QMap namedViewports; + }; #endif // RBSCREEN_H diff --git a/utils/themeeditor/graphics/rbviewport.cpp b/utils/themeeditor/graphics/rbviewport.cpp index 1f1f02ce55..9045016533 100644 --- a/utils/themeeditor/graphics/rbviewport.cpp +++ b/utils/themeeditor/graphics/rbviewport.cpp @@ -50,38 +50,57 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) } else { - int x, y, w, h; - /* Parsing one of the other types of viewport */ + int param; + QString ident; + int x,y,w,h; + /* Rendering one of the other types of viewport */ switch(node->tag->name[1]) { case '\0': - /* A normal viewport definition */ - x = node->params[0].data.numeric; - y = node->params[1].data.numeric; - - if(node->params[2].type == skin_tag_parameter::DEFAULT) - w = info.screen()->getWidth() - x; - else - w = node->params[2].data.numeric; - - if(node->params[3].type == skin_tag_parameter::DEFAULT) - h = info.screen()->getHeight() - y; - else - h = node->params[3].data.numeric; - - size = QRectF(x, y, w, h); + customUI = false; displayed = true; + param = 0; break; case 'l': - /* Preloaded viewport */ + /* A preloaded viewport definition */ + ident = node->params[0].data.text; + customUI = false; + displayed = false; + info.screen()->loadViewport(ident, this); + param = 1; break; case 'i': /* Custom UI Viewport */ + customUI = true; + param = 1; + if(node->params[0].type == skin_tag_parameter::DEFAULT) + { + displayed = true; + } + else + { + displayed = false; + info.screen()->loadViewport(ident, this); + } break; - } + /* Now we grab the info common to all viewports */ + x = node->params[param++].data.numeric; + y = node->params[param++].data.numeric; + + if(node->params[param].type == skin_tag_parameter::DEFAULT) + w = info.screen()->getWidth() - x; + else + w = node->params[param].data.numeric; + + if(node->params[++param].type == skin_tag_parameter::DEFAULT) + h = info.screen()->getHeight() - y; + else + h = node->params[param].data.numeric; + + size = QRectF(x, y, w, h); } } @@ -104,7 +123,8 @@ QRectF RBViewport::boundingRect() const void RBViewport::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { + QColor color = customUI ? Qt::blue : Qt::red; if(displayed) - painter->fillRect(size, Qt::red); + painter->fillRect(size, color); } diff --git a/utils/themeeditor/graphics/rbviewport.h b/utils/themeeditor/graphics/rbviewport.h index 0ec377bc39..5d59ea4819 100644 --- a/utils/themeeditor/graphics/rbviewport.h +++ b/utils/themeeditor/graphics/rbviewport.h @@ -48,6 +48,7 @@ private: QColor foreground; bool displayed; + bool customUI; }; -- cgit v1.2.3