You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
4.0 KiB
154 lines
4.0 KiB
/*
|
|
* 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);
|
|
}
|