--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/ScaleNinePainter.cpp Fri Oct 15 17:30:59 2010 -0400
@@ -0,0 +1,145 @@
+#include "ScaleNinePainter.h"
+#include <QtGui>
+
+namespace GVA {
+
+ScaleNinePainter::ScaleNinePainter(
+ const QString &topLeftFilename,
+ const QString &topMiddleFilename,
+ const QString &topRightFilename,
+ const QString &middleLeftFilename,
+ const QString &middleMiddleFilename,
+ const QString &middleRightFilename,
+ const QString &bottomLeftFilename,
+ const QString &bottomMiddleFilename,
+ const QString &bottomRightFilename)
+ : m_topLeftFilename(topLeftFilename),
+ m_topMiddleFilename(topMiddleFilename),
+ m_topRightFilename(topRightFilename),
+ m_middleLeftFilename(middleLeftFilename),
+ m_middleMiddleFilename(middleMiddleFilename),
+ m_middleRightFilename(middleRightFilename),
+ m_bottomLeftFilename(bottomLeftFilename),
+ m_bottomMiddleFilename(bottomMiddleFilename),
+ m_bottomRightFilename(bottomRightFilename),
+ m_topLeftPixmap(0),
+ m_topMiddlePixmap(0),
+ m_topRightPixmap(0),
+ m_middleLeftPixmap(0),
+ m_middleMiddlePixmap(0),
+ m_middleRightPixmap(0),
+ m_bottomLeftPixmap(0),
+ m_bottomMiddlePixmap(0),
+ m_bottomRightPixmap(0),
+ m_pixmapsLoaded(false)
+{
+}
+
+ScaleNinePainter::~ScaleNinePainter() {
+ unloadPixmaps();
+}
+
+void ScaleNinePainter::loadPixmaps() {
+ Q_ASSERT(!m_pixmapsLoaded);
+ m_topLeftPixmap = new QPixmap(m_topLeftFilename);
+ m_topMiddlePixmap = new QPixmap(m_topMiddleFilename);
+ m_topRightPixmap = new QPixmap(m_topRightFilename);
+ m_middleLeftPixmap = new QPixmap(m_middleLeftFilename);
+ m_middleMiddlePixmap = new QPixmap(m_middleMiddleFilename);
+ m_middleRightPixmap = new QPixmap(m_middleRightFilename);
+ m_bottomLeftPixmap = new QPixmap(m_bottomLeftFilename);
+ m_bottomMiddlePixmap = new QPixmap(m_bottomMiddleFilename);
+ m_bottomRightPixmap = new QPixmap(m_bottomRightFilename);
+ m_pixmapsLoaded = true;
+}
+
+void ScaleNinePainter::unloadPixmaps() {
+ delete m_topLeftPixmap; m_topLeftPixmap = 0;
+ delete m_topMiddlePixmap; m_topMiddlePixmap = 0;
+ delete m_topRightPixmap; m_topRightPixmap = 0;
+ delete m_middleLeftPixmap; m_middleLeftPixmap = 0;
+ delete m_middleMiddlePixmap; m_middleMiddlePixmap = 0;
+ delete m_middleRightPixmap; m_middleRightPixmap = 0;
+ delete m_bottomLeftPixmap; m_bottomLeftPixmap = 0;
+ delete m_bottomMiddlePixmap; m_bottomMiddlePixmap = 0;
+ delete m_bottomRightPixmap; m_bottomRightPixmap = 0;
+ m_pixmapsLoaded = false;
+}
+
+void ScaleNinePainter::paint(QPainter* painter, const QRect &rect, QWidget* widget) {
+ Q_UNUSED(widget)
+
+ if(!m_pixmapsLoaded)
+ loadPixmaps();
+
+ painter->save();
+
+ // Draw top left.
+ if(m_topLeftPixmap->height() > rect.height())
+ painter->drawPixmap(0, 0, m_topLeftPixmap->width(), rect.height(), *m_topLeftPixmap);
+ else
+ painter->drawPixmap(0, 0, *m_topLeftPixmap);
+
+ // Draw top middle.
+ if(!m_topMiddlePixmap->isNull()) {
+ painter->drawTiledPixmap(m_topLeftPixmap->width(),
+ 0,
+ rect.width() - (m_topLeftPixmap->width() + m_topRightPixmap->width()),
+ qMin(m_topMiddlePixmap->height(), rect.height()),
+ *m_topMiddlePixmap);
+ }
+
+ // Draw top right.
+ painter->drawPixmap(rect.right() - m_topRightPixmap->width() + 1, 0, *m_topRightPixmap);
+
+ // Draw left border.
+ if(!m_middleLeftPixmap->isNull()) {
+ painter->drawTiledPixmap(0,
+ m_topLeftPixmap->height(),
+ m_middleMiddlePixmap->width(),
+ rect.height() - (m_topLeftPixmap->height() + m_bottomLeftPixmap->height()),
+ *m_middleLeftPixmap);
+ }
+
+ // Draw middle.
+ if(!m_middleMiddlePixmap->isNull()) {
+ QRect middleRect;
+ middleRect.setLeft(m_middleLeftPixmap->isNull() ? m_topLeftPixmap->width() : m_topLeftPixmap->width());
+ middleRect.setRight(rect.width() - (m_middleRightPixmap->isNull() ? m_topRightPixmap->width() : m_topRightPixmap->width()) - 1);
+ middleRect.setTop(m_topMiddlePixmap->isNull() ? m_topLeftPixmap->height() : m_topMiddlePixmap->height());
+ middleRect.setBottom(rect.height() - (m_bottomMiddlePixmap->isNull() ? m_bottomLeftPixmap->height() : m_bottomMiddlePixmap->height()) - 1);
+ painter->drawTiledPixmap(middleRect, *m_middleMiddlePixmap);
+ }
+
+ // Draw right border.
+ if(!m_middleRightPixmap->isNull()) {
+ painter->drawTiledPixmap(rect.width() - m_middleRightPixmap->width(),
+ m_topRightPixmap->height(),
+ m_middleRightPixmap->width(),
+ rect.height() - (m_topRightPixmap->height() + m_bottomRightPixmap->height()),
+ *m_middleRightPixmap);
+ }
+
+ // Draw bottom row.
+ if(!m_bottomLeftPixmap->isNull()) {
+ painter->drawPixmap(0,
+ rect.bottom() - m_bottomLeftPixmap->height() + 1,
+ *m_bottomLeftPixmap);
+ }
+ if(!m_bottomMiddlePixmap->isNull()) {
+ QRect bottomRect;
+ bottomRect.setLeft(m_bottomLeftPixmap->width());
+ bottomRect.setRight(rect.width() - m_bottomRightPixmap->width() - 1);
+ bottomRect.setTop(rect.bottom() - m_bottomMiddlePixmap->height() + 1);
+ bottomRect.setBottom(rect.bottom());
+ painter->drawTiledPixmap(bottomRect, *m_bottomMiddlePixmap);
+ }
+ if(!m_bottomRightPixmap->isNull()) {
+ painter->drawPixmap(rect.right() - m_bottomLeftPixmap->width() + 1,
+ rect.bottom() - m_bottomRightPixmap->height() + 1,
+ *m_bottomRightPixmap);
+ }
+ painter->restore();
+}
+
+} // GVA namespace