summaryrefslogtreecommitdiffstats
path: root/kdeprint/cups/imageposition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeprint/cups/imageposition.cpp')
-rw-r--r--kdeprint/cups/imageposition.cpp153
1 files changed, 153 insertions, 0 deletions
diff --git a/kdeprint/cups/imageposition.cpp b/kdeprint/cups/imageposition.cpp
new file mode 100644
index 000000000..0489b5079
--- /dev/null
+++ b/kdeprint/cups/imageposition.cpp
@@ -0,0 +1,153 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include "imageposition.h"
+
+#include <qpainter.h>
+#include <kstandarddirs.h>
+
+static void draw3DPage(QPainter *p, QRect r)
+{
+ // draw white page
+ p->fillRect(r,Qt::white);
+ // draw 3D border
+ p->setPen(Qt::black);
+ p->moveTo(r.left(),r.bottom());
+ p->lineTo(r.right(),r.bottom());
+ p->lineTo(r.right(),r.top());
+ p->setPen(Qt::darkGray);
+ p->lineTo(r.left(),r.top());
+ p->lineTo(r.left(),r.bottom());
+ p->setPen(Qt::gray);
+ p->moveTo(r.left()+1,r.bottom()-1);
+ p->lineTo(r.right()-1,r.bottom()-1);
+ p->lineTo(r.right()-1,r.top()+1);
+}
+
+ImagePosition::ImagePosition(QWidget *parent, const char *name)
+ : QWidget(parent,name)
+{
+ position_ = Center;
+ setMinimumSize(sizeHint());
+ setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
+ pix_.load(locate("data", "kdeprint/preview-mini.png"));
+}
+
+ImagePosition::~ImagePosition()
+{
+}
+
+void ImagePosition::setPosition(const char *type)
+{
+ int pos(Center);
+ if (strcmp(type,"top-left") == 0) pos = TopLeft;
+ else if (strcmp(type,"top") == 0) pos = Top;
+ else if (strcmp(type,"top-right") == 0) pos = TopRight;
+ else if (strcmp(type,"left") == 0) pos = Left;
+ else if (strcmp(type,"center") == 0) pos = Center;
+ else if (strcmp(type,"right") == 0) pos = Right;
+ else if (strcmp(type,"bottom-left") == 0) pos = BottomLeft;
+ else if (strcmp(type,"bottom") == 0) pos = Bottom;
+ else if (strcmp(type,"bottom-right") == 0) pos = BottomRight;
+ setPosition((PositionType)pos);
+}
+
+void ImagePosition::setPosition(PositionType type)
+{
+ if (position_ != type) {
+ position_ = type;
+ update();
+ }
+}
+
+void ImagePosition::setPosition(int horiz, int vert)
+{
+ int type = vert*3+horiz;
+ setPosition((PositionType)type);
+}
+
+QString ImagePosition::positionString() const
+{
+ switch (position_) {
+ case TopLeft: return "top-left";
+ case Top: return "top";
+ case TopRight: return "top-right";
+ case Left: return "left";
+ case Center: return "center";
+ case Right: return "right";
+ case BottomLeft: return "bottom-left";
+ case Bottom: return "bottom";
+ case BottomRight: return "bottom-right";
+ }
+ return "center";
+}
+
+void ImagePosition::paintEvent(QPaintEvent*)
+{
+ int horiz, vert, x, y;
+ int margin = 5;
+ int pw(width()), ph(height()), px(0), py(0);
+
+ if (pw > ((ph * 3) / 4))
+ {
+ pw = (ph * 3) / 4;
+ px = (width() - pw) / 2;
+ }
+ else
+ {
+ ph = (pw * 4) / 3;
+ py = (height() - ph) / 2;
+ }
+ QRect page(px, py, pw, ph), img(0, 0, pix_.width(), pix_.height());
+
+ // compute img position
+ horiz = position_%3;
+ vert = position_/3;
+ switch (horiz) {
+ case 0: x = page.left()+margin; break;
+ default:
+ case 1: x = (page.left()+page.right()-img.width())/2; break;
+ case 2: x = page.right()-margin-img.width(); break;
+ }
+ switch (vert) {
+ case 0: y = page.top()+margin; break;
+ default:
+ case 1: y = (page.top()+page.bottom()-img.height())/2; break;
+ case 2: y = page.bottom()-margin-img.height(); break;
+ }
+ img.moveTopLeft(QPoint(x,y));
+
+ // draw page
+ QPainter p(this);
+ draw3DPage(&p,page);
+
+ // draw img
+ /*p.setPen(darkRed);
+ p.drawRect(img);
+ p.drawLine(img.topLeft(),img.bottomRight());
+ p.drawLine(img.topRight(),img.bottomLeft());*/
+ p.drawPixmap(x, y, pix_);
+
+ p.end();
+}
+
+QSize ImagePosition::sizeHint() const
+{
+ return QSize(60, 80);
+}