diff options
| author | Robert Bieber <robby@bieberphoto.com> | 2010-08-04 09:16:52 +0000 |
|---|---|---|
| committer | Robert Bieber <robby@bieberphoto.com> | 2010-08-04 09:16:52 +0000 |
| commit | 49865b23f601e636c9a80b21826fc607f1964eb5 (patch) | |
| tree | eb7959fd8aa5c572842e8d295440348cb17fc3cf /utils/themeeditor/graphics | |
| parent | 2db08d41536b875f35b055f8e0bb3845b47a7ba3 (diff) | |
| download | rockbox-49865b23f601e636c9a80b21826fc607f1964eb5.zip rockbox-49865b23f601e636c9a80b21826fc607f1964eb5.tar.gz rockbox-49865b23f601e636c9a80b21826fc607f1964eb5.tar.bz2 rockbox-49865b23f601e636c9a80b21826fc607f1964eb5.tar.xz | |
Theme Editor: Began implementing code generation for movable viewports
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27691 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/themeeditor/graphics')
| -rw-r--r-- | utils/themeeditor/graphics/rbmovable.cpp | 18 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbmovable.h | 4 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbrenderinfo.cpp | 7 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbrenderinfo.h | 8 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbviewport.cpp | 23 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbviewport.h | 10 |
6 files changed, 57 insertions, 13 deletions
diff --git a/utils/themeeditor/graphics/rbmovable.cpp b/utils/themeeditor/graphics/rbmovable.cpp index 11b3a68..3eca8bd 100644 --- a/utils/themeeditor/graphics/rbmovable.cpp +++ b/utils/themeeditor/graphics/rbmovable.cpp @@ -25,7 +25,7 @@ #include "rbmovable.h" RBMovable::RBMovable(QGraphicsItem* parent) - : QGraphicsItem(parent) + : QGraphicsItem(parent), geomChanged(false) { setFlags(ItemIsMovable | ItemIsSelectable | ItemSendsGeometryChanges); } @@ -61,7 +61,7 @@ QVariant RBMovable::itemChange(GraphicsItemChange change, const QVariant &value) pos.setY(qMax(0., pos.y())); pos.setY(qMin(pos.y(), bound.height() - boundingRect().height())); - saveGeometry(); + geomChanged = true; return pos; } @@ -69,3 +69,17 @@ QVariant RBMovable::itemChange(GraphicsItemChange change, const QVariant &value) return QGraphicsItem::itemChange(change, value); } +void RBMovable::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + QGraphicsItem::mousePressEvent(event); +} + +void RBMovable::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + QGraphicsItem::mouseReleaseEvent(event); + if(isSelected()) + { + saveGeometry(); + geomChanged = false; + } +} diff --git a/utils/themeeditor/graphics/rbmovable.h b/utils/themeeditor/graphics/rbmovable.h index e8ef69b..5b63302 100644 --- a/utils/themeeditor/graphics/rbmovable.h +++ b/utils/themeeditor/graphics/rbmovable.h @@ -41,6 +41,8 @@ public: virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); protected: virtual QVariant itemChange(GraphicsItemChange change, @@ -48,6 +50,8 @@ protected: /* Responsible for updating the parse tree */ virtual void saveGeometry() = 0; + bool geomChanged; + }; #endif // RBMOVABLE_H diff --git a/utils/themeeditor/graphics/rbrenderinfo.cpp b/utils/themeeditor/graphics/rbrenderinfo.cpp index 0b9ea41..e39a4ce 100644 --- a/utils/themeeditor/graphics/rbrenderinfo.cpp +++ b/utils/themeeditor/graphics/rbrenderinfo.cpp @@ -22,10 +22,11 @@ #include "rbrenderinfo.h" RBRenderInfo::RBRenderInfo(ParseTreeModel* model, ProjectModel* project, - QMap<QString, QString>* settings, + SkinDocument* doc, QMap<QString, QString>* settings, DeviceState* device, RBScreen* screen, RBScreen* sbsScreen) - :mProject(project), mSettings(settings), + :mProject(project), mDoc(doc), + mSettings(settings), mDevice(device), mScreen(screen), mSbsScreen(sbsScreen), mModel(model) { @@ -41,6 +42,7 @@ RBRenderInfo::RBRenderInfo(const RBRenderInfo &other) mProject = other.mProject; mSettings = other.mSettings; mDevice = other.mDevice; + mDoc = other.mDoc; mScreen = other.mScreen; mSbsScreen = other.mSbsScreen; mModel = other.mModel; @@ -51,6 +53,7 @@ const RBRenderInfo& RBRenderInfo::operator=(const RBRenderInfo& other) mProject = other.mProject; mSettings = other.mSettings; mDevice = other.mDevice; + mDoc = other.mDoc; mScreen = other.mScreen; mSbsScreen = other.mSbsScreen; mModel = other.mModel; diff --git a/utils/themeeditor/graphics/rbrenderinfo.h b/utils/themeeditor/graphics/rbrenderinfo.h index 599a563..17b87db 100644 --- a/utils/themeeditor/graphics/rbrenderinfo.h +++ b/utils/themeeditor/graphics/rbrenderinfo.h @@ -28,13 +28,15 @@ class RBScreen; class ProjectModel; class ParseTreeModel; class DeviceState; +class SkinDocument; class RBRenderInfo { public: RBRenderInfo(ParseTreeModel* model, ProjectModel* project, - QMap<QString, QString>* settings, DeviceState* device, - RBScreen* screen, RBScreen* sbsScreen = 0); + SkinDocument* doc, QMap<QString, QString>* settings, + DeviceState* device, RBScreen* screen, + RBScreen* sbsScreen = 0); RBRenderInfo(); RBRenderInfo(const RBRenderInfo& other); virtual ~RBRenderInfo(); @@ -43,6 +45,7 @@ public: ProjectModel* project() const{ return mProject; } DeviceState* device() const{ return mDevice; } + SkinDocument* document() const{ return mDoc; } QMap<QString, QString>* settings() const{ return mSettings; } RBScreen* screen() const{ return mScreen; } RBScreen* sbsScreen() const{ return mSbsScreen; } @@ -50,6 +53,7 @@ public: private: ProjectModel* mProject; + SkinDocument* mDoc; QMap<QString, QString>* mSettings; DeviceState* mDevice; RBScreen* mScreen; diff --git a/utils/themeeditor/graphics/rbviewport.cpp b/utils/themeeditor/graphics/rbviewport.cpp index fe17ebb..33749fd 100644 --- a/utils/themeeditor/graphics/rbviewport.cpp +++ b/utils/themeeditor/graphics/rbviewport.cpp @@ -34,16 +34,19 @@ #include "parsetreemodel.h" #include "tag_table.h" #include "skin_parser.h" +#include "skindocument.h" /* Pixels/second of text scrolling */ const double RBViewport::scrollRate = 30; -RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) +RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info, + ParseTreeNode* pNode) : RBMovable(info.screen()), foreground(info.screen()->foreground()), background(info.screen()->background()), textOffset(0,0), screen(info.screen()), textAlign(Left), showStatusBar(false), statusBarTexture(":/render/statusbar.png"), - leftGraphic(0), centerGraphic(0), rightGraphic(0), scrollTime(0) + leftGraphic(0), centerGraphic(0), rightGraphic(0), scrollTime(0), + node(pNode), doc(info.document()) { setFlags(ItemIsSelectable | ItemIsMovable | ItemSendsGeometryChanges); @@ -67,7 +70,6 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) } else { - int param = 0; QString ident; int x,y,w,h; /* Rendering one of the other types of viewport */ @@ -75,7 +77,7 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) { case '\0': customUI = false; - param = 0; + baseParam= 0; break; case 'l': @@ -85,13 +87,13 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) if(!screen->viewPortDisplayed(ident)) hide(); info.screen()->loadViewport(ident, this); - param = 1; + baseParam= 1; break; case 'i': /* Custom UI Viewport */ customUI = true; - param = 1; + baseParam= 1; if(node->params[0].type == skin_tag_parameter::DEFAULT) { setVisible(true); @@ -104,6 +106,7 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info) break; } /* Now we grab the info common to all viewports */ + int param = baseParam; x = node->params[param++].data.number; if(x < 0) x = info.screen()->boundingRect().right() + x; @@ -301,7 +304,15 @@ void RBViewport::showPlaylist(const RBRenderInfo &info, int start, void RBViewport::saveGeometry() { + QRectF bounds = boundingRect(); + QPointF origin = pos(); + node->modParam(static_cast<int>(origin.x()), baseParam); + node->modParam(static_cast<int>(origin.y()), baseParam + 1); + node->modParam(static_cast<int>(bounds.width()), baseParam + 2); + node->modParam(static_cast<int>(bounds.height()), baseParam + 3); + + doc->genCode(); } void RBViewport::alignLeft() diff --git a/utils/themeeditor/graphics/rbviewport.h b/utils/themeeditor/graphics/rbviewport.h index b9bafe4..691133b 100644 --- a/utils/themeeditor/graphics/rbviewport.h +++ b/utils/themeeditor/graphics/rbviewport.h @@ -28,9 +28,12 @@ class RBScreen; class RBRenderInfo; +class ParseTreeNode; #include <QGraphicsItem> +class SkinDocument; + class RBViewport : public RBMovable { public: @@ -43,7 +46,8 @@ public: static const double scrollRate; - RBViewport(skin_element* node, const RBRenderInfo& info); + RBViewport(skin_element* node, const RBRenderInfo& info, + ParseTreeNode* pNode); virtual ~RBViewport(); QPainterPath shape() const; @@ -112,6 +116,10 @@ private: RBText* rightGraphic; double scrollTime; + + int baseParam; + ParseTreeNode* node; + SkinDocument* doc; }; #endif // RBVIEWPORT_H |