--- /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 <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