From 8114979e8e413caa876cda626fe0b6385bfc56ce Mon Sep 17 00:00:00 2001 From: Robert Bieber Date: Wed, 30 Jun 2010 19:35:00 +0000 Subject: Theme Editor: Added album art display git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27199 a1c6a512-1295-4272-9138-f99709370657 --- utils/themeeditor/graphics/rbalbumart.cpp | 95 +++++++++++++++++++++++++++++++ utils/themeeditor/graphics/rbalbumart.h | 47 +++++++++++++++ utils/themeeditor/graphics/rbscreen.cpp | 6 +- utils/themeeditor/graphics/rbscreen.h | 16 +++++- 4 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 utils/themeeditor/graphics/rbalbumart.cpp create mode 100644 utils/themeeditor/graphics/rbalbumart.h (limited to 'utils/themeeditor/graphics') diff --git a/utils/themeeditor/graphics/rbalbumart.cpp b/utils/themeeditor/graphics/rbalbumart.cpp new file mode 100644 index 0000000000..bd3a8791fb --- /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 +#include + +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 0000000000..381b715525 --- /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 + +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 f82c60ce6c..924a37406e 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::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 7b8b83060a..358a49e4a7 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 fonts; QList displayedViewports; + RBAlbumArt* albumArt; + }; #endif // RBSCREEN_H -- cgit v1.2.3