00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "shapetool.h"
00015
00016 #include "drawpad.h"
00017 #include "drawpadcanvas.h"
00018 #include "page.h"
00019
00020
00021 ShapeTool::ShapeTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
00022 : Tool(drawPad, drawPadCanvas)
00023 {
00024 m_mousePressed = false;
00025 m_polyline.resize(3);
00026 }
00027
00028 ShapeTool::~ShapeTool()
00029 {
00030 }
00031
00032 void ShapeTool::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 ShapeTool::mouseReleaseEvent(QMouseEvent* e)
00041 {
00042 Q_UNUSED(e)
00043
00044 QPainter painter;
00045 painter.begin(m_pDrawPadCanvas->currentPage()->pixmap());
00046 drawFinalShape(painter);
00047 painter.end();
00048
00049 QRect r = m_polyline.boundingRect();
00050 r = r.normalize();
00051 r.setLeft(r.left() - m_pDrawPad->pen().width());
00052 r.setTop(r.top() - m_pDrawPad->pen().width());
00053 r.setRight(r.right() + m_pDrawPad->pen().width());
00054 r.setBottom(r.bottom() + m_pDrawPad->pen().width());
00055
00056 QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()),
00057 m_pDrawPadCanvas->contentsToViewport(r.bottomRight()));
00058
00059 bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(),
00060 m_pDrawPadCanvas->currentPage()->pixmap(), r.x(), r.y(), r.width(), r.height());
00061
00062 m_pDrawPadCanvas->viewport()->update(viewportRect);
00063
00064 m_mousePressed = false;
00065 }
00066
00067 void ShapeTool::mouseMoveEvent(QMouseEvent* e)
00068 {
00069 if (m_mousePressed) {
00070 m_polyline[0] = e->pos();
00071 QPainter painter;
00072 painter.begin(m_pDrawPadCanvas->currentPage()->pixmap());
00073 drawTemporaryShape(painter);
00074 painter.end();
00075
00076 QRect r = m_polyline.boundingRect();
00077 r = r.normalize();
00078 r.setLeft(r.left() - m_pDrawPad->pen().width());
00079 r.setTop(r.top() - m_pDrawPad->pen().width());
00080 r.setRight(r.right() + m_pDrawPad->pen().width());
00081 r.setBottom(r.bottom() + m_pDrawPad->pen().width());
00082
00083 QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()),
00084 m_pDrawPadCanvas->contentsToViewport(r.bottomRight()));
00085
00086 bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(),
00087 m_pDrawPadCanvas->currentPage()->pixmap(), r.x(), r.y(), r.width(), r.height());
00088
00089 m_pDrawPadCanvas->viewport()->update(viewportRect);
00090
00091 m_polyline[1] = m_polyline[0];
00092 }
00093 }