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

shapetool.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 "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 }

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