1
/****************************************************************************
3
** Copyright (C) 2005-2005 Trolltech AS. All rights reserved.
5
** This file is part of the example classes of the Qt Toolkit.
7
** This file may be distributed under the terms of the Q Public License
8
** as defined by Trolltech AS of Norway and appearing in the file
9
** LICENSE.QPL included in the packaging of this file.
11
** This file may be distributed and/or modified under the terms of the
12
** GNU General Public License version 2 as published by the Free Software
13
** Foundation and appearing in the file LICENSE.GPL included in the
14
** packaging of this file.
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
17
** information about Qt Commercial License Agreements.
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
21
** Contact info@trolltech.com if any conditions of this licensing are
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27
****************************************************************************/
31
#include "scribblearea.h"
33
ScribbleArea::ScribbleArea(QWidget *parent)
36
setAttribute(Qt::WA_StaticContents);
40
myPenColor = Qt::blue;
43
bool ScribbleArea::openImage(const QString &fileName)
46
if (!loadedImage.load(fileName))
49
QSize newSize = loadedImage.size().expandedTo(size());
50
resizeImage(&loadedImage, newSize);
57
bool ScribbleArea::saveImage(const QString &fileName, const char *fileFormat)
59
QImage visibleImage = image;
60
resizeImage(&visibleImage, size());
62
if (visibleImage.save(fileName, fileFormat)) {
70
void ScribbleArea::setPenColor(const QColor &newColor)
72
myPenColor = newColor;
75
void ScribbleArea::setPenWidth(int newWidth)
77
myPenWidth = newWidth;
80
void ScribbleArea::clearImage()
82
image.fill(qRgb(255, 255, 255));
87
void ScribbleArea::mousePressEvent(QMouseEvent *event)
89
if (event->button() == Qt::LeftButton) {
90
lastPoint = event->pos();
95
void ScribbleArea::mouseMoveEvent(QMouseEvent *event)
97
if ((event->buttons() & Qt::LeftButton) && scribbling)
98
drawLineTo(event->pos());
101
void ScribbleArea::mouseReleaseEvent(QMouseEvent *event)
103
if (event->button() == Qt::LeftButton && scribbling) {
104
drawLineTo(event->pos());
109
void ScribbleArea::paintEvent(QPaintEvent * /* event */)
111
QPainter painter(this);
112
painter.drawImage(QPoint(0, 0), image);
115
void ScribbleArea::resizeEvent(QResizeEvent *event)
117
if (width() > image.width() || height() > image.height()) {
118
int newWidth = qMax(width() + 128, image.width());
119
int newHeight = qMax(height() + 128, image.height());
120
resizeImage(&image, QSize(newWidth, newHeight));
123
QWidget::resizeEvent(event);
126
void ScribbleArea::drawLineTo(const QPoint &endPoint)
128
QPainter painter(&image);
129
painter.setPen(QPen(myPenColor, myPenWidth, Qt::SolidLine, Qt::RoundCap,
131
painter.drawLine(lastPoint, endPoint);
134
int rad = myPenWidth / 2;
135
update(QRect(lastPoint, endPoint).normalized()
136
.adjusted(-rad, -rad, +rad, +rad));
137
lastPoint = endPoint;
140
void ScribbleArea::resizeImage(QImage *image, const QSize &newSize)
142
if (image->size() == newSize)
145
QImage newImage(newSize, QImage::Format_RGB32);
146
newImage.fill(qRgb(255, 255, 255));
147
QPainter painter(&newImage);
148
painter.drawImage(QPoint(0, 0), *image);