diff options
Diffstat (limited to 'utils/themeeditor/graphics/rbalbumart.cpp')
| -rw-r--r-- | utils/themeeditor/graphics/rbalbumart.cpp | 95 |
1 files changed, 95 insertions, 0 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); +} |