diff -r 6aeb7a756187 -r 3c88a81ff781 ginebra2/ScaleThreePainter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ginebra2/ScaleThreePainter.cpp Fri Oct 15 17:30:59 2010 -0400 @@ -0,0 +1,74 @@ +#include "ScaleThreePainter.h" +#include + +namespace GVA { + +ScaleThreePainter::ScaleThreePainter( + const QString &leftFilename, + const QString &middleFilename, + const QString &rightFilename) + : m_leftFilename(leftFilename), + m_middleFilename(middleFilename), + m_rightFilename(rightFilename), + m_leftPixmap(0), + m_middlePixmap(0), + m_rightPixmap(0), + m_pixmapsLoaded(false) +{ +} + +ScaleThreePainter::~ScaleThreePainter() { + unloadPixmaps(); +} + +void ScaleThreePainter::loadPixmaps() { + Q_ASSERT(!m_pixmapsLoaded); + m_leftPixmap = new QPixmap(m_leftFilename); + m_middlePixmap = new QPixmap(m_middleFilename); + m_rightPixmap = new QPixmap(m_rightFilename); + m_pixmapsLoaded = true; +} + +void ScaleThreePainter::unloadPixmaps() { + delete m_leftPixmap; m_leftPixmap = 0; + delete m_middlePixmap; m_middlePixmap = 0; + delete m_rightPixmap; m_rightPixmap = 0; + m_pixmapsLoaded = false; +} + +void ScaleThreePainter::paint(QPainter* painter, const QRect &rect, QWidget* widget) { + Q_UNUSED(widget) + + if(!m_pixmapsLoaded) + loadPixmaps(); + + // qDebug() << "ScaleThreePainter::paint: " << rect << qMin(m_middlePixmap->height(), rect.height()); + + painter->save(); + + // Draw left. + if(m_leftPixmap->height() > rect.height()) + painter->drawPixmap(0, 0, m_leftPixmap->width(), rect.height(), *m_leftPixmap); + else + painter->drawPixmap(0, 0, *m_leftPixmap); + + // Draw top middle -- fills in the space is between the left and right pixmaps. + if(!m_middlePixmap->isNull()) { + painter->drawTiledPixmap(m_leftPixmap->width(), + 0, + rect.width() - (m_leftPixmap->width() + m_rightPixmap->width()), + rect.height(), + m_middlePixmap->scaledToHeight(rect.height())); + } + + // Draw right. + if(m_rightPixmap->height() > rect.height()) + painter->drawPixmap(rect.right() - m_rightPixmap->width() + 1, 0, m_rightPixmap->width(), rect.height(), *m_rightPixmap); + else + painter->drawPixmap(rect.right() - m_rightPixmap->width() + 1, 0, *m_rightPixmap); + + painter->restore(); +} + + +} // GVA namespace