diff options
| author | Robert Bieber <robby@bieberphoto.com> | 2010-06-30 19:35:00 +0000 |
|---|---|---|
| committer | Robert Bieber <robby@bieberphoto.com> | 2010-06-30 19:35:00 +0000 |
| commit | 8114979e8e413caa876cda626fe0b6385bfc56ce (patch) | |
| tree | 7b1a193dfbbc48941b93d7c5e2f21199d5bd2979 /utils/themeeditor/graphics | |
| parent | 3e599f4d379aeaa7ce5861c9818028e6d02d4490 (diff) | |
| download | rockbox-8114979e8e413caa876cda626fe0b6385bfc56ce.zip rockbox-8114979e8e413caa876cda626fe0b6385bfc56ce.tar.gz rockbox-8114979e8e413caa876cda626fe0b6385bfc56ce.tar.bz2 rockbox-8114979e8e413caa876cda626fe0b6385bfc56ce.tar.xz | |
Theme Editor: Added album art display
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27199 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/themeeditor/graphics')
| -rw-r--r-- | utils/themeeditor/graphics/rbalbumart.cpp | 95 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbalbumart.h | 47 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbscreen.cpp | 6 | ||||
| -rw-r--r-- | utils/themeeditor/graphics/rbscreen.h | 16 |
4 files changed, 161 insertions, 3 deletions
diff --git a/utils/themeeditor/graphics/rbalbumart.cpp b/utils/themeeditor/graphics/rbalbumart.cpp new file mode 100644 index 0000000..bd3a879 --- /dev/null +++ b/utils/themeeditor/graphics/rbalbumart.cpp @@ -0,0 +1,95 @@ +/*************************************************************************** + * __________ __ ___. + * 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 "rbalbumart.h" + +#include <QPainter> +#include <QDebug> + +RBAlbumArt::RBAlbumArt(QGraphicsItem *parent, int x, int y, int maxWidth, + int maxHeight, int artWidth, int artHeight, char hAlign, + char vAlign) + : QGraphicsItem(parent), size(x, y, maxWidth, + maxHeight), + artWidth(artWidth), artHeight(artHeight), + hAlign(hAlign), vAlign(vAlign), + texture(":/render/albumart.png") +{ + hide(); +} + +QRectF RBAlbumArt::boundingRect() const +{ + return size; +} + +void RBAlbumArt::paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + QRectF drawArea; + + /* Making sure the alignment flags are sane */ + if(hAlign != 'c' && hAlign != 'l' && hAlign != 'r') + hAlign = 'c'; + if(vAlign != 'c' && vAlign != 't' && vAlign != 'b') + vAlign = 'c'; + + if(artWidth <= size.width() && artHeight <= size.height()) + { + /* If the art is smaller than the viewport, just center it up */ + drawArea.setX((size.width() - artWidth) / 2); + drawArea.setY((size.height() - artHeight) / 2); + drawArea.setWidth(artWidth); + drawArea.setHeight(artHeight); + } + else + { + /* Otherwise, figure out our scale factor, and which dimension needs + * to be scaled, and how to align said dimension + */ + double xScale = size.width() / artWidth; + double yScale = size.height() / artHeight; + double scale = xScale < yScale ? xScale : yScale; + + double scaleWidth = artWidth * scale; + double scaleHeight = artHeight * scale; + + if(hAlign == 'l') + drawArea.setX(0); + else if(hAlign == 'c') + drawArea.setX((size.width() - scaleWidth) / 2 ); + else + drawArea.setX(size.width() - scaleWidth); + + if(vAlign == 't') + drawArea.setY(0); + else if(vAlign == 'c') + drawArea.setY((size.height() - scaleHeight) / 2); + else + drawArea.setY(size.height() - scaleHeight); + + drawArea.setWidth(scaleWidth); + drawArea.setHeight(scaleHeight); + + } + + painter->fillRect(drawArea, texture); +} diff --git a/utils/themeeditor/graphics/rbalbumart.h b/utils/themeeditor/graphics/rbalbumart.h new file mode 100644 index 0000000..381b715 --- /dev/null +++ b/utils/themeeditor/graphics/rbalbumart.h @@ -0,0 +1,47 @@ +/*************************************************************************** + * __________ __ ___. + * 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 RBALBUMART_H +#define RBALBUMART_H + +#include <QGraphicsItem> + +class RBAlbumArt : public QGraphicsItem +{ +public: + RBAlbumArt(QGraphicsItem* parent, int x, int y, int maxWidth, int maxHeight, + int artWidth, int artHeight, char hAlign = 'c', + char vAlign = 'c'); + + QRectF boundingRect() const; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget); + +private: + QRectF size; + int artWidth; + int artHeight; + char hAlign; + char vAlign; + QPixmap texture; +}; + +#endif // RBALBUMART_H diff --git a/utils/themeeditor/graphics/rbscreen.cpp b/utils/themeeditor/graphics/rbscreen.cpp index f82c60c..924a374 100644 --- a/utils/themeeditor/graphics/rbscreen.cpp +++ b/utils/themeeditor/graphics/rbscreen.cpp @@ -28,7 +28,8 @@ RBScreen::RBScreen(const RBRenderInfo& info, bool remote, QGraphicsItem *parent) - :QGraphicsItem(parent), backdrop(0), project(project) + :QGraphicsItem(parent), backdrop(0), project(project), + albumArt(0) { if(remote) @@ -80,6 +81,9 @@ RBScreen::~RBScreen() if(backdrop) delete backdrop; + if(albumArt) + delete albumArt; + QMap<int, RBFont*>::iterator i; for(i = fonts.begin(); i != fonts.end(); i++) delete (*i); diff --git a/utils/themeeditor/graphics/rbscreen.h b/utils/themeeditor/graphics/rbscreen.h index 7b8b830..358a49e 100644 --- a/utils/themeeditor/graphics/rbscreen.h +++ b/utils/themeeditor/graphics/rbscreen.h @@ -28,8 +28,8 @@ #include "rbrenderinfo.h" #include "rbimage.h" #include "rbfont.h" - -class RBViewport; +#include "rbalbumart.h" +#include "rbviewport.h" class RBScreen : public QGraphicsItem { @@ -73,6 +73,16 @@ public: QColor foreground(){ return fgColor; } QColor background(){ return bgColor; } + void setAlbumArt(RBAlbumArt* art){ albumArt = art; } + void showAlbumArt(RBViewport* view) + { + if(albumArt) + { + albumArt->setParentItem(view); + albumArt->show(); + } + } + private: int width; @@ -90,6 +100,8 @@ private: QMap<int, RBFont*> fonts; QList<QString> displayedViewports; + RBAlbumArt* albumArt; + }; #endif // RBSCREEN_H |