Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

erasetool.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *                                                                         *
00003  *   DrawPad - a drawing program for Opie Environment                      *
00004  *                                                                         *
00005  *   (C) 2002 by S. Prud'homme <prudhomme@laposte.net>                     *
00006  *                                                                         *
00007  *   This program is free software; you can redistribute it and/or modify  *
00008  *   it under the terms of the GNU General Public License as published by  *
00009  *   the Free Software Foundation; either version 2 of the License, or     *
00010  *   (at your option) any later version.                                   *
00011  *                                                                         *
00012  ***************************************************************************/
00013 
00014 #include "erasetool.h"
00015 
00016 #include "drawpad.h"
00017 #include "drawpadcanvas.h"
00018 #include "page.h"
00019 
00020 
00021 EraseTool::EraseTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
00022     : Tool(drawPad, drawPadCanvas)
00023 {
00024     m_mousePressed = false;
00025     m_polyline.resize(3);
00026 }
00027 
00028 EraseTool::~EraseTool()
00029 {
00030 }
00031 
00032 void EraseTool::mousePressEvent(QMouseEvent* e)
00033 {
00034     m_pDrawPadCanvas->backupPage();
00035 
00036     m_mousePressed = true;
00037     m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos();
00038 }
00039 
00040 void EraseTool::mouseReleaseEvent(QMouseEvent* e)
00041 {
00042     Q_UNUSED(e)
00043 
00044     m_mousePressed = false;
00045 }
00046 
00047 void EraseTool::mouseMoveEvent(QMouseEvent* e)
00048 {
00049     if (m_mousePressed) {
00050         QPainter painter;
00051         QPen pen(Qt::white, m_pDrawPad->pen().width());
00052         painter.begin(m_pDrawPadCanvas->currentPage()->pixmap());
00053         painter.setPen(pen);
00054         m_polyline[2] = m_polyline[1];
00055         m_polyline[1] = m_polyline[0];
00056         m_polyline[0] = e->pos();
00057         painter.drawPolyline(m_polyline);
00058         painter.end();
00059 
00060         QRect r = m_polyline.boundingRect();
00061         r = r.normalize();
00062         r.setLeft(r.left() - m_pDrawPad->pen().width());
00063         r.setTop(r.top() - m_pDrawPad->pen().width());
00064         r.setRight(r.right() + m_pDrawPad->pen().width());
00065         r.setBottom(r.bottom() + m_pDrawPad->pen().width());
00066 
00067         QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()),
00068                            m_pDrawPadCanvas->contentsToViewport(r.bottomRight()));
00069 
00070         bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(),
00071                m_pDrawPadCanvas->currentPage()->pixmap(), r.x(), r.y(), r.width(), r.height());
00072 
00073         m_pDrawPadCanvas->viewport()->update(viewportRect);
00074     }
00075 }

Generated on Sat Nov 5 16:17:29 2005 for OPIE by  doxygen 1.4.2