ginebra2/ScaleThreePainter.cpp
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
permissions -rw-r--r--
201041

#include "ScaleThreePainter.h"
#include <QtGui>

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