From d8827b5ff10c66a065a210d8aaf1d88214ee1070 Mon Sep 17 00:00:00 2001 From: Robert Bieber Date: Fri, 18 Jun 2010 21:10:01 +0000 Subject: Theme Editor: Working on rendering viewports, display will now show %V(...) viewports as red rectangles over backdrop or background color git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26940 a1c6a512-1295-4272-9138-f99709370657 --- utils/themeeditor/graphics/rbrenderinfo.cpp | 46 ++++++++++++ utils/themeeditor/graphics/rbrenderinfo.h | 49 +++++++++++++ utils/themeeditor/graphics/rbscreen.h | 4 + utils/themeeditor/graphics/rbviewport.cpp | 110 ++++++++++++++++++++++++++++ utils/themeeditor/graphics/rbviewport.h | 54 ++++++++++++++ 5 files changed, 263 insertions(+) create mode 100644 utils/themeeditor/graphics/rbrenderinfo.cpp create mode 100644 utils/themeeditor/graphics/rbrenderinfo.h create mode 100644 utils/themeeditor/graphics/rbviewport.cpp create mode 100644 utils/themeeditor/graphics/rbviewport.h (limited to 'utils/themeeditor/graphics') diff --git a/utils/themeeditor/graphics/rbrenderinfo.cpp b/utils/themeeditor/graphics/rbrenderinfo.cpp new file mode 100644 index 0000000000..c2612373c8 --- /dev/null +++ b/utils/themeeditor/graphics/rbrenderinfo.cpp @@ -0,0 +1,46 @@ +/*************************************************************************** + * __________ __ ___. + * 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 "rbrenderinfo.h" + +RBRenderInfo::RBRenderInfo(ParseTreeModel* model, + ProjectModel* project, RBScreen* screen) + :mProject(project), mScreen(screen), mModel(model) +{ +} + +RBRenderInfo::RBRenderInfo(const RBRenderInfo &other) +{ + mProject = other.mProject; + mScreen = other.mScreen; + mModel = other.mModel; +} + +const RBRenderInfo& RBRenderInfo::operator=(const RBRenderInfo& other) +{ + mProject = other.mProject; + mScreen = other.mScreen; + mModel = other.mModel; +} + +RBRenderInfo::~RBRenderInfo() +{ +} diff --git a/utils/themeeditor/graphics/rbrenderinfo.h b/utils/themeeditor/graphics/rbrenderinfo.h new file mode 100644 index 0000000000..c99de7beaa --- /dev/null +++ b/utils/themeeditor/graphics/rbrenderinfo.h @@ -0,0 +1,49 @@ +/*************************************************************************** + * __________ __ ___. + * 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 RBRENDERINFO_H +#define RBRENDERINFO_H + +class RBScreen; +class ProjectModel; +class ParseTreeModel; + +class RBRenderInfo +{ +public: + RBRenderInfo(ParseTreeModel* model, + ProjectModel* project, RBScreen* screen); + RBRenderInfo(const RBRenderInfo& other); + virtual ~RBRenderInfo(); + + const RBRenderInfo& operator=(const RBRenderInfo& other); + + ProjectModel* project() const{ return mProject; } + RBScreen* screen() const{ return mScreen; } + ParseTreeModel* model() const{ return mModel; } + +private: + ProjectModel* mProject; + RBScreen* mScreen; + ParseTreeModel* mModel; +}; + +#endif // RBRENDERINFO_H diff --git a/utils/themeeditor/graphics/rbscreen.h b/utils/themeeditor/graphics/rbscreen.h index f244089b2d..78bbcfd8b2 100644 --- a/utils/themeeditor/graphics/rbscreen.h +++ b/utils/themeeditor/graphics/rbscreen.h @@ -38,6 +38,9 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + int getWidth() const{ return width; } + int getHeight() const{ return height; } + static QString safeSetting(ProjectModel* project, QString key, QString fallback) { @@ -49,6 +52,7 @@ public: static QColor stringToColor(QString str, QColor fallback); + private: int width; int height; diff --git a/utils/themeeditor/graphics/rbviewport.cpp b/utils/themeeditor/graphics/rbviewport.cpp new file mode 100644 index 0000000000..1f1f02ce55 --- /dev/null +++ b/utils/themeeditor/graphics/rbviewport.cpp @@ -0,0 +1,110 @@ +/*************************************************************************** + * __________ __ ___. + * 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 +#include + +#include "rbviewport.h" +#include "rbscreen.h" +#include "rbrenderinfo.h" +#include "parsetreemodel.h" +#include "tag_table.h" +#include "skin_parser.h" + +RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) + : QGraphicsItem(info.screen()) +{ + if(!node->tag) + { + /* Default viewport takes up the entire screen */ + size = QRectF(0, 0, info.screen()->getWidth(), + info.screen()->getHeight()); + + if(info.model()->rowCount(QModelIndex()) > 1) + { + /* If there is more than one viewport in the document */ + displayed = false; + } + else + { + displayed = true; + } + } + else + { + int x, y, w, h; + /* Parsing 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); + displayed = true; + break; + + case 'l': + /* Preloaded viewport */ + break; + + case 'i': + /* Custom UI Viewport */ + break; + + } + } +} + +RBViewport::~RBViewport() +{ +} + +QPainterPath RBViewport::shape() const +{ + QPainterPath retval; + retval.addRect(size); + return retval; +} + +QRectF RBViewport::boundingRect() const +{ + return size; +} + +void RBViewport::paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + if(displayed) + painter->fillRect(size, Qt::red); +} + diff --git a/utils/themeeditor/graphics/rbviewport.h b/utils/themeeditor/graphics/rbviewport.h new file mode 100644 index 0000000000..0ec377bc39 --- /dev/null +++ b/utils/themeeditor/graphics/rbviewport.h @@ -0,0 +1,54 @@ +/*************************************************************************** + * __________ __ ___. + * 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 RBVIEWPORT_H +#define RBVIEWPORT_H + +#include "skin_parser.h" + +class RBScreen; +class RBRenderInfo; + +#include + +class RBViewport : public QGraphicsItem +{ +public: + RBViewport(skin_element* node, const RBRenderInfo& info); + virtual ~RBViewport(); + + QPainterPath shape() const; + QRectF boundingRect() const; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget); + + void show(){ displayed = true; } + +private: + QRectF size; + QColor background; + QColor foreground; + + bool displayed; + +}; + +#endif // RBVIEWPORT_H -- cgit v1.2.3