8114979e8e
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27199 a1c6a512-1295-4272-9138-f99709370657
95 lines
3.2 KiB
C++
95 lines
3.2 KiB
C++
/***************************************************************************
|
|
* __________ __ ___.
|
|
* 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);
|
|
}
|