ginebra2/ScaleThreePainter.cpp
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16
hgs
parents:
diff changeset
     1
#include "ScaleThreePainter.h"
hgs
parents:
diff changeset
     2
#include <QtGui>
hgs
parents:
diff changeset
     3
hgs
parents:
diff changeset
     4
namespace GVA {
hgs
parents:
diff changeset
     5
hgs
parents:
diff changeset
     6
ScaleThreePainter::ScaleThreePainter(
hgs
parents:
diff changeset
     7
      const QString &leftFilename,
hgs
parents:
diff changeset
     8
      const QString &middleFilename,
hgs
parents:
diff changeset
     9
      const QString &rightFilename)
hgs
parents:
diff changeset
    10
        : m_leftFilename(leftFilename),
hgs
parents:
diff changeset
    11
          m_middleFilename(middleFilename),
hgs
parents:
diff changeset
    12
          m_rightFilename(rightFilename),
hgs
parents:
diff changeset
    13
          m_leftPixmap(0),
hgs
parents:
diff changeset
    14
          m_middlePixmap(0),
hgs
parents:
diff changeset
    15
          m_rightPixmap(0),
hgs
parents:
diff changeset
    16
          m_pixmapsLoaded(false)
hgs
parents:
diff changeset
    17
{
hgs
parents:
diff changeset
    18
}
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
ScaleThreePainter::~ScaleThreePainter() {
hgs
parents:
diff changeset
    21
    unloadPixmaps();
hgs
parents:
diff changeset
    22
}
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
void ScaleThreePainter::loadPixmaps() {
hgs
parents:
diff changeset
    25
    Q_ASSERT(!m_pixmapsLoaded);
hgs
parents:
diff changeset
    26
    m_leftPixmap = new QPixmap(m_leftFilename);
hgs
parents:
diff changeset
    27
    m_middlePixmap = new QPixmap(m_middleFilename);
hgs
parents:
diff changeset
    28
    m_rightPixmap = new QPixmap(m_rightFilename);
hgs
parents:
diff changeset
    29
    m_pixmapsLoaded = true;
hgs
parents:
diff changeset
    30
}
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
void ScaleThreePainter::unloadPixmaps() {
hgs
parents:
diff changeset
    33
    delete m_leftPixmap; m_leftPixmap = 0;
hgs
parents:
diff changeset
    34
    delete m_middlePixmap; m_middlePixmap = 0;
hgs
parents:
diff changeset
    35
    delete m_rightPixmap; m_rightPixmap = 0;
hgs
parents:
diff changeset
    36
    m_pixmapsLoaded = false;
hgs
parents:
diff changeset
    37
}
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
void ScaleThreePainter::paint(QPainter* painter, const QRect &rect, QWidget* widget) {
hgs
parents:
diff changeset
    40
    Q_UNUSED(widget)
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
    if(!m_pixmapsLoaded)
hgs
parents:
diff changeset
    43
        loadPixmaps();
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
    //    qDebug() << "ScaleThreePainter::paint: " << rect << qMin(m_middlePixmap->height(), rect.height());
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
    painter->save();
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
    // Draw left.
hgs
parents:
diff changeset
    50
    if(m_leftPixmap->height() > rect.height())
hgs
parents:
diff changeset
    51
        painter->drawPixmap(0, 0, m_leftPixmap->width(), rect.height(), *m_leftPixmap);
hgs
parents:
diff changeset
    52
    else
hgs
parents:
diff changeset
    53
        painter->drawPixmap(0, 0, *m_leftPixmap);
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
    // Draw top middle -- fills in the space is between the left and right pixmaps.
hgs
parents:
diff changeset
    56
    if(!m_middlePixmap->isNull()) {
hgs
parents:
diff changeset
    57
        painter->drawTiledPixmap(m_leftPixmap->width(),
hgs
parents:
diff changeset
    58
                                 0,
hgs
parents:
diff changeset
    59
                                 rect.width() - (m_leftPixmap->width() + m_rightPixmap->width()),
hgs
parents:
diff changeset
    60
                                 rect.height(),
hgs
parents:
diff changeset
    61
                                 m_middlePixmap->scaledToHeight(rect.height()));
hgs
parents:
diff changeset
    62
    }
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
    // Draw right.
hgs
parents:
diff changeset
    65
    if(m_rightPixmap->height() > rect.height())
hgs
parents:
diff changeset
    66
        painter->drawPixmap(rect.right() - m_rightPixmap->width() + 1, 0, m_rightPixmap->width(), rect.height(), *m_rightPixmap);
hgs
parents:
diff changeset
    67
    else
hgs
parents:
diff changeset
    68
        painter->drawPixmap(rect.right() - m_rightPixmap->width() + 1, 0, *m_rightPixmap);
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    painter->restore();
hgs
parents:
diff changeset
    71
}
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
}  // GVA namespace