diff options
| author | Robert Bieber <robby@bieberphoto.com> | 2010-06-22 07:55:50 +0000 |
|---|---|---|
| committer | Robert Bieber <robby@bieberphoto.com> | 2010-06-22 07:55:50 +0000 |
| commit | ac9287bdb5b94d575b5130ccdc2fe25c45ca395e (patch) | |
| tree | 0830e573cf74150966e3705c2ad8e08fbc1c21c2 /utils/themeeditor | |
| parent | 08d09e678f942fef9e9efc9a88e62f0b4e7bb0a4 (diff) | |
| download | rockbox-ac9287bdb5b94d575b5130ccdc2fe25c45ca395e.zip rockbox-ac9287bdb5b94d575b5130ccdc2fe25c45ca395e.tar.gz rockbox-ac9287bdb5b94d575b5130ccdc2fe25c45ca395e.tar.bz2 rockbox-ac9287bdb5b94d575b5130ccdc2fe25c45ca395e.tar.xz | |
Theme Editor: Began in implementing tag rendering, %X tag now recognized
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27043 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/themeeditor')
| -rw-r--r-- | utils/themeeditor/graphics/rbimage.cpp | 38 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbimage.h | 39 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbscreen.cpp | 22 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbscreen.h | 12 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbviewport.cpp | 19 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbviewport.h | 3 | ||||
| -rw-r--r-- | utils/themeeditor/gui/skindocument.cpp | 2 | ||||
| -rw-r--r-- | utils/themeeditor/models/parsetreemodel.cpp | 12 | ||||
| -rw-r--r-- | utils/themeeditor/models/parsetreenode.cpp | 37 | ||||
| -rw-r--r-- | utils/themeeditor/models/parsetreenode.h | 1 | ||||
| -rw-r--r-- | utils/themeeditor/themeeditor.pro | 6 |
11 files changed, 175 insertions, 16 deletions
diff --git a/utils/themeeditor/graphics/rbimage.cpp b/utils/themeeditor/graphics/rbimage.cpp new file mode 100644 index 0000000..5105c95 --- /dev/null +++ b/utils/themeeditor/graphics/rbimage.cpp @@ -0,0 +1,38 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2010 Robert Bieber + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include <QPainter> + +#include "rbimage.h" + +RBImage::RBImage(QString file, int tiles) + :image(file), tiles(tiles) +{ +} + +void RBImage::draw(QPainter *painter, int x, int y, int tile) +{ + if(tiles == 0) + painter->drawPixmap(x, y, image.width(), image.height(), image); + else + painter->drawPixmap(x, y, image, 0, tile * (image.height() / tiles), + image.width(), image.height() / tiles); +} diff --git a/utils/themeeditor/graphics/rbimage.h b/utils/themeeditor/graphics/rbimage.h new file mode 100644 index 0000000..2eaf9b6 --- /dev/null +++ b/utils/themeeditor/graphics/rbimage.h @@ -0,0 +1,39 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2010 Robert Bieber + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef RBIMAGE_H +#define RBIMAGE_H + +#include <QPixmap> + +class RBImage +{ +public: + RBImage(QString file, int tiles = 0); + void draw(QPainter* painter, int x, int y, int tile = 0); + +private: + QPixmap image; + int tiles; + +}; + +#endif // RBIMAGE_H diff --git a/utils/themeeditor/graphics/rbscreen.cpp b/utils/themeeditor/graphics/rbscreen.cpp index 065bea6..0a04037 100644 --- a/utils/themeeditor/graphics/rbscreen.cpp +++ b/utils/themeeditor/graphics/rbscreen.cpp @@ -38,13 +38,16 @@ RBScreen::RBScreen(const RBRenderInfo& info, QGraphicsItem *parent) : QString fg = info.settings()->value("foreground color", "FFFFFF"); fgColor = stringToColor(fg, Qt::black); + settings = info.settings(); + /* Loading backdrop if available */ - QString base = info.settings()->value("themebase", ""); + themeBase = info.settings()->value("themebase", ""); QString backdropFile = info.settings()->value("backdrop", ""); + backdropFile.replace("/.rockbox/backdrops/", ""); - if(QFile::exists(base + "/backdrops/" + backdropFile)) + if(QFile::exists(themeBase + "/backdrops/" + backdropFile)) { - backdrop = new QPixmap(base + "/backdrops/" + backdropFile); + backdrop = new QPixmap(themeBase + "/backdrops/" + backdropFile); /* If a backdrop has been found, use its width and height */ if(!backdrop->isNull()) @@ -100,6 +103,19 @@ void RBScreen::showViewport(QString name) update(); } +void RBScreen::setBackdrop(QString filename) +{ + + if(backdrop) + delete backdrop; + + filename = settings->value("imagepath", "") + "/" + filename; + + if(QFile::exists(filename)) + backdrop = new QPixmap(filename); + else + backdrop = 0; +} QColor RBScreen::stringToColor(QString str, QColor fallback) { diff --git a/utils/themeeditor/graphics/rbscreen.h b/utils/themeeditor/graphics/rbscreen.h index 6a9da2f..b60705b 100644 --- a/utils/themeeditor/graphics/rbscreen.h +++ b/utils/themeeditor/graphics/rbscreen.h @@ -26,6 +26,7 @@ #include "projectmodel.h" #include "rbrenderinfo.h" +#include "rbimage.h" class RBViewport; @@ -50,6 +51,14 @@ public: } void showViewport(QString name); + void loadImage(QString name, RBImage* image) + { + images.insert(name, image); + } + RBImage* getImage(QString name){ return images.value(name, 0); } + + void setBackdrop(QString filename); + static QColor stringToColor(QString str, QColor fallback); @@ -59,10 +68,13 @@ private: QColor bgColor; QColor fgColor; QPixmap* backdrop; + QString themeBase; ProjectModel* project; QMap<QString, RBViewport*> namedViewports; + QMap<QString, RBImage*> images; + QMap<QString, QString>* settings; }; diff --git a/utils/themeeditor/graphics/rbviewport.cpp b/utils/themeeditor/graphics/rbviewport.cpp index 9045016..9d94967 100644 --- a/utils/themeeditor/graphics/rbviewport.cpp +++ b/utils/themeeditor/graphics/rbviewport.cpp @@ -41,11 +41,11 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) if(info.model()->rowCount(QModelIndex()) > 1) { /* If there is more than one viewport in the document */ - displayed = false; + setVisible(false); } else { - displayed = true; + setVisible(true); } } else @@ -58,7 +58,6 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) { case '\0': customUI = false; - displayed = true; param = 0; break; @@ -66,7 +65,7 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) /* A preloaded viewport definition */ ident = node->params[0].data.text; customUI = false; - displayed = false; + hide(); info.screen()->loadViewport(ident, this); param = 1; break; @@ -77,11 +76,11 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) param = 1; if(node->params[0].type == skin_tag_parameter::DEFAULT) { - displayed = true; + setVisible(true); } else { - displayed = false; + hide(); info.screen()->loadViewport(ident, this); } break; @@ -124,7 +123,11 @@ void RBViewport::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QColor color = customUI ? Qt::blue : Qt::red; - if(displayed) - painter->fillRect(size, color); + painter->fillRect(size, color); } +/* Called at the end of a logical line */ +void RBViewport::newline() +{ + +} diff --git a/utils/themeeditor/graphics/rbviewport.h b/utils/themeeditor/graphics/rbviewport.h index 5d59ea4..6f67bae 100644 --- a/utils/themeeditor/graphics/rbviewport.h +++ b/utils/themeeditor/graphics/rbviewport.h @@ -40,14 +40,13 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); - void show(){ displayed = true; } + void newline(); private: QRectF size; QColor background; QColor foreground; - bool displayed; bool customUI; }; diff --git a/utils/themeeditor/gui/skindocument.cpp b/utils/themeeditor/gui/skindocument.cpp index 6d28de3..8c98255 100644 --- a/utils/themeeditor/gui/skindocument.cpp +++ b/utils/themeeditor/gui/skindocument.cpp @@ -257,7 +257,7 @@ void SkinDocument::codeChanged() else emit titleChanged(titleText); - model->render(project); + model->render(project, &fileName); cursorChanged(); diff --git a/utils/themeeditor/models/parsetreemodel.cpp b/utils/themeeditor/models/parsetreemodel.cpp index 4e94bfa..830a646 100644 --- a/utils/themeeditor/models/parsetreemodel.cpp +++ b/utils/themeeditor/models/parsetreemodel.cpp @@ -32,6 +32,8 @@ #include <QMap> #include <QDir> +#include <iostream> + ParseTreeModel::ParseTreeModel(const char* document, QObject* parent): QAbstractItemModel(parent) { @@ -293,6 +295,16 @@ QGraphicsScene* ParseTreeModel::render(ProjectModel* project, settings.insert("themebase", base.canonicalPath()); } + if(file) + { + QString skinFile = *file; + QStringList decomp = skinFile.split("/"); + skinFile = decomp[decomp.count() - 1]; + skinFile.chop(skinFile.length() - skinFile.lastIndexOf(".")); + settings.insert("imagepath", settings.value("themebase","") + "/wps/" + + skinFile); + } + RBScreen* screen = 0; RBRenderInfo info(this, project, &settings, screen); diff --git a/utils/themeeditor/models/parsetreenode.cpp b/utils/themeeditor/models/parsetreenode.cpp index a74dd23..ed518a4 100644 --- a/utils/themeeditor/models/parsetreenode.cpp +++ b/utils/themeeditor/models/parsetreenode.cpp @@ -475,6 +475,7 @@ ParseTreeNode* ParseTreeNode::getParent() const return parent; } +/* This version is called for the root node and for viewports */ void ParseTreeNode::render(const RBRenderInfo& info) { /* Parameters don't get rendered */ @@ -500,5 +501,41 @@ void ParseTreeNode::render(const RBRenderInfo& info) } rendered = new RBViewport(element, info); + + for(int i = element->params_count; i < children.count(); i++) + children[i]->render(info, dynamic_cast<RBViewport*>(rendered)); } +/* This version is called for logical lines and such */ +void ParseTreeNode::render(const RBRenderInfo &info, RBViewport* viewport) +{ + if(element->type == LINE) + { + for(int i = 0; i < children.count(); i++) + children[i]->render(info, viewport); + viewport->newline(); + } + else if(element->type == TAG) + { + QString filename; + + /* Two switch statements to narrow down the tag name */ + switch(element->tag->name[0]) + { + + case 'X': + + switch(element->tag->name[1]) + { + case '\0': + /* %X tag */ + filename = QString(element->params[0].data.text); + info.screen()->setBackdrop(filename); + break; + } + + break; + + } + } +} diff --git a/utils/themeeditor/models/parsetreenode.h b/utils/themeeditor/models/parsetreenode.h index bfbd596..127cd78 100644 --- a/utils/themeeditor/models/parsetreenode.h +++ b/utils/themeeditor/models/parsetreenode.h @@ -60,6 +60,7 @@ public: } void render(const RBRenderInfo& info); + void render(const RBRenderInfo &info, RBViewport* viewport); private: ParseTreeNode* parent; diff --git a/utils/themeeditor/themeeditor.pro b/utils/themeeditor/themeeditor.pro index ba3efa9..d98e61f 100644 --- a/utils/themeeditor/themeeditor.pro +++ b/utils/themeeditor/themeeditor.pro @@ -37,7 +37,8 @@ HEADERS += models/parsetreemodel.h \ gui/skinviewer.h \ graphics/rbscreen.h \ graphics/rbviewport.h \ - graphics/rbrenderinfo.h + graphics/rbrenderinfo.h \ + graphics/rbimage.h SOURCES += main.cpp \ models/parsetreemodel.cpp \ models/parsetreenode.cpp \ @@ -51,7 +52,8 @@ SOURCES += main.cpp \ gui/skinviewer.cpp \ graphics/rbscreen.cpp \ graphics/rbviewport.cpp \ - graphics/rbrenderinfo.cpp + graphics/rbrenderinfo.cpp \ + graphics/rbimage.cpp OTHER_FILES += README \ resources/windowicon.png \ resources/appicon.xcf \ |