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 +++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 utils/themeeditor/graphics/rbalbumart.cpp (limited to 'utils/themeeditor/graphics/rbalbumart.cpp') 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); +} -- cgit v1.2.3