ginebra2/ScaleThreePainter.cpp
changeset 16 3c88a81ff781
--- /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