kde-extraapps/kdeplasma-addons/applets/blackboard/blackboardwidget.cpp
Ivailo Monev 7c098060fd generic: make changes required for building against Katie
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
2015-11-25 11:50:42 +00:00

182 lines
5.5 KiB
C++

/***************************************************************************
* Copyright 2009 by Davide Bettio <davide.bettio@kdemail.net> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program 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 General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
#include "blackboardwidget.h"
#include <QtGui/qgraphicssceneevent.h>
#include <QtGui/qstyleoption.h>
#include <QPainter>
#include <QTimer>
#include <KDebug>
#include <KIO/DeleteJob>
#include <KSaveFile>
#include <KStandardDirs>
#include <Plasma/Applet>
#include <Plasma/Theme>
BlackBoardWidget::BlackBoardWidget(Plasma::Applet *parent)
: QGraphicsWidget(parent)
{
m_changed = false;
setAcceptTouchEvents(true);
m_parentApplet = parent;
m_color = QColor(Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor));
m_oldPoint = QPointF(-1, 0);
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(saveImage()));
timer->start(600000);
QTimer::singleShot(500, this, SLOT(loadImage()));
}
BlackBoardWidget::~BlackBoardWidget()
{
}
void BlackBoardWidget::saveImage()
{
if (m_parentApplet->destroyed()){
KIO::del(imagePath());
}else{
if (m_changed){
KSaveFile imageFile(imagePath());
imageFile.open();
m_pixmap.save(&imageFile, "PNG");
imageFile.finalize();
imageFile.close();
}
}
}
void BlackBoardWidget::loadImage()
{
m_painter.end();
m_pixmap.load(imagePath(), "PNG");
update(contentsRect());
m_painter.begin(&m_pixmap);
m_painter.setPen(QPen(m_color, 3));
}
void BlackBoardWidget::mousePressEvent(QGraphicsSceneMouseEvent *)
{
update(contentsRect());
}
void BlackBoardWidget::drawSegment(QPointF point0, QPointF point1, qreal penRadius)
{
m_painter.setPen(QPen(m_color, penRadius));
m_painter.drawLine(point0, point1);
qreal x = qMin(point0.x(), point1.x()) -(penRadius + 1);
qreal y = qMin(point0.y(), point1.y()) -(penRadius + 1);
qreal w = qMax(point0.x(), point1.x()) + penRadius + 1 - x;
qreal h = qMax(point0.y(), point1.y()) + penRadius + 1 - y;
update(x,y,w,h);
m_changed = true;
}
bool BlackBoardWidget::event(QEvent *event)
{
switch (event->type()) {
case QEvent::TouchBegin:
case QEvent::TouchUpdate:
case QEvent::TouchEnd: {
QList<QTouchEvent::TouchPoint> touchPoints = static_cast<QTouchEvent *>(event)->touchPoints();
foreach (const QTouchEvent::TouchPoint &touchPoint, touchPoints) {
switch (touchPoint.state()) {
case Qt::TouchPointStationary:
// don't do anything if this touch point hasn't moved
continue;
default:
drawSegment(touchPoint.lastPos(), touchPoint.pos(), 3*touchPoint.pressure());
break;
}
}
break;
}
default:
return QGraphicsWidget::event(event);
}
return true;
}
void BlackBoardWidget::mouseMoveEvent(QGraphicsSceneMouseEvent * event)
{
QPointF lastPos = event->lastPos();
if (m_oldPoint.x() != -1){
drawSegment(m_oldPoint, lastPos, 1);
}
m_oldPoint = lastPos;
}
void BlackBoardWidget::mouseReleaseEvent ( QGraphicsSceneMouseEvent * event )
{
mouseMoveEvent(event);
m_oldPoint.setX(-1);
}
void BlackBoardWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
if (m_painter.isActive())
m_painter.end();
QPixmap tmpPixmap = m_pixmap;
m_pixmap = QPixmap(contentsRect().width(), contentsRect().height());
m_pixmap.fill(Qt::transparent);
m_painter.begin(&m_pixmap);
m_painter.drawPixmap(0, 0, tmpPixmap);
m_painter.setPen(QPen(m_color, 3));
}
void BlackBoardWidget::paint(QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget)
p->drawPixmap(option->exposedRect, m_pixmap, option->exposedRect);
}
void BlackBoardWidget::setBrushColor(QColor color)
{
m_color = color;
m_painter.setPen(QPen(m_color, 3));
}
void BlackBoardWidget::erase()
{
m_pixmap.fill(Qt::transparent);
update(contentsRect());
KIO::del(imagePath());
}
QString BlackBoardWidget::imagePath()
{
return KStandardDirs::locateLocal("data", QLatin1String("plasma-desktop-datastorage/blackboard-") + QString::number(m_parentApplet->id()) + QLatin1String(".png"));
}
#include "moc_blackboardwidget.cpp"