author | leseb <leseb> | 2002-03-21 17:33:38 (UTC) |
---|---|---|
committer | leseb <leseb> | 2002-03-21 17:33:38 (UTC) |
commit | 29baf8dcda3d05d91d340b739de0fdd9e37f5749 (patch) (side-by-side diff) | |
tree | 5f2958a16cc1f065cdef3e31c2c9500f8aac2e7b /noncore/graphics/drawpad/shapedrawmode.cpp | |
parent | 60c9126183ea72c08ad5cb77b8939812627aae17 (diff) | |
download | opie-29baf8dcda3d05d91d340b739de0fdd9e37f5749.zip opie-29baf8dcda3d05d91d340b739de0fdd9e37f5749.tar.gz opie-29baf8dcda3d05d91d340b739de0fdd9e37f5749.tar.bz2 |
Enable any size pages
Diffstat (limited to 'noncore/graphics/drawpad/shapedrawmode.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/graphics/drawpad/shapedrawmode.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/noncore/graphics/drawpad/shapedrawmode.cpp b/noncore/graphics/drawpad/shapedrawmode.cpp new file mode 100644 index 0000000..8b9877d --- a/dev/null +++ b/noncore/graphics/drawpad/shapedrawmode.cpp @@ -0,0 +1,92 @@ +/*************************************************************************** + * * + * DrawPad - a drawing program for Opie Environment * + * * + * (C) 2002 by S. Prud'homme <prudhomme@laposte.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. * + * * + ***************************************************************************/ + +#include "shapedrawmode.h" + +#include "drawpad.h" +#include "drawpadcanvas.h" + +#include <qpainter.h> +#include <qpixmap.h> + +ShapeDrawMode::ShapeDrawMode(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas) + : DrawMode(drawPad, drawPadCanvas) +{ + m_mousePressed = false; + m_polyline.resize(3); +} + +ShapeDrawMode::~ShapeDrawMode() +{ +} + +void ShapeDrawMode::mousePressEvent(QMouseEvent* e) +{ + m_mousePressed = true; + m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos(); +} + +void ShapeDrawMode::mouseReleaseEvent(QMouseEvent* e) +{ + Q_UNUSED(e) + + QPainter painter; + painter.begin(m_pDrawPadCanvas->currentPage()); + drawFinalShape(painter); + painter.end(); + + QRect r = m_polyline.boundingRect(); + r = r.normalize(); + r.setLeft(r.left() - m_pDrawPad->pen().width()); + r.setTop(r.top() - m_pDrawPad->pen().width()); + r.setRight(r.right() + m_pDrawPad->pen().width()); + r.setBottom(r.bottom() + m_pDrawPad->pen().width()); + + QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()), + m_pDrawPadCanvas->contentsToViewport(r.bottomRight())); + + bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(), + m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height()); + + m_pDrawPadCanvas->viewport()->update(viewportRect); + + m_mousePressed = false; +} + +void ShapeDrawMode::mouseMoveEvent(QMouseEvent* e) +{ + if (m_mousePressed) { + m_polyline[0] = e->pos(); + QPainter painter; + painter.begin(m_pDrawPadCanvas->currentPage()); + drawTemporaryShape(painter); + painter.end(); + + QRect r = m_polyline.boundingRect(); + r = r.normalize(); + r.setLeft(r.left() - m_pDrawPad->pen().width()); + r.setTop(r.top() - m_pDrawPad->pen().width()); + r.setRight(r.right() + m_pDrawPad->pen().width()); + r.setBottom(r.bottom() + m_pDrawPad->pen().width()); + + QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()), + m_pDrawPadCanvas->contentsToViewport(r.bottomRight())); + + bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(), + m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height()); + + m_pDrawPadCanvas->viewport()->update(viewportRect); + + m_polyline[1] = m_polyline[0]; + } +} |