00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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 }