summaryrefslogtreecommitdiff
path: root/noncore/graphics/drawpad/pointtool.cpp
authorleseb <leseb>2002-06-19 07:10:53 (UTC)
committer leseb <leseb>2002-06-19 07:10:53 (UTC)
commit1d60bfb5925c5009122ae04009f8e99658436b35 (patch) (unidiff)
treeb2f81f2bda14b2228fb1d70dc194a4e112f0f66b /noncore/graphics/drawpad/pointtool.cpp
parentb1fd4450c70522551361c6138688777cb29e1e2f (diff)
downloadopie-1d60bfb5925c5009122ae04009f8e99658436b35.zip
opie-1d60bfb5925c5009122ae04009f8e99658436b35.tar.gz
opie-1d60bfb5925c5009122ae04009f8e99658436b35.tar.bz2
Anti-aliasing support
Diffstat (limited to 'noncore/graphics/drawpad/pointtool.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/pointtool.cpp40
1 files changed, 35 insertions, 5 deletions
diff --git a/noncore/graphics/drawpad/pointtool.cpp b/noncore/graphics/drawpad/pointtool.cpp
index 656044b..22bb089 100644
--- a/noncore/graphics/drawpad/pointtool.cpp
+++ b/noncore/graphics/drawpad/pointtool.cpp
@@ -17,6 +17,7 @@
17#include "drawpadcanvas.h" 17#include "drawpadcanvas.h"
18#include "page.h" 18#include "page.h"
19 19
20#include <qimage.h>
20#include <qpainter.h> 21#include <qpainter.h>
21 22
22PointTool::PointTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas) 23PointTool::PointTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
@@ -48,14 +49,12 @@ void PointTool::mouseReleaseEvent(QMouseEvent* e)
48void PointTool::mouseMoveEvent(QMouseEvent* e) 49void PointTool::mouseMoveEvent(QMouseEvent* e)
49{ 50{
50 if (m_mousePressed) { 51 if (m_mousePressed) {
51 QPainter painter;
52 painter.begin(m_pDrawPadCanvas->currentPage());
53 painter.setPen(m_pDrawPad->pen());
54 m_polyline[2] = m_polyline[1]; 52 m_polyline[2] = m_polyline[1];
55 m_polyline[1] = m_polyline[0]; 53 m_polyline[1] = m_polyline[0];
56 m_polyline[0] = e->pos(); 54 m_polyline[0] = e->pos();
57 painter.drawPolyline(m_polyline); 55
58 painter.end(); 56 QPainter painter;
57 painter.begin(m_pDrawPadCanvas->currentPage());
59 58
60 QRect r = m_polyline.boundingRect(); 59 QRect r = m_polyline.boundingRect();
61 r = r.normalize(); 60 r = r.normalize();
@@ -64,6 +63,37 @@ void PointTool::mouseMoveEvent(QMouseEvent* e)
64 r.setRight(r.right() + m_pDrawPad->pen().width()); 63 r.setRight(r.right() + m_pDrawPad->pen().width());
65 r.setBottom(r.bottom() + m_pDrawPad->pen().width()); 64 r.setBottom(r.bottom() + m_pDrawPad->pen().width());
66 65
66 QPixmap areaPixmap(r.width(), r.height());
67 bitBlt(&areaPixmap, QPoint(0, 0), painter.device(), r);
68
69 QImage areaImage = areaPixmap.convertToImage();
70 QImage bigAreaImage = areaImage.smoothScale(areaImage.width() * 3, areaImage.height() * 3);
71
72 QPixmap bigAreaPixmap;
73 bigAreaPixmap.convertFromImage(bigAreaImage);
74
75 QPen bigAreaPen = m_pDrawPad->pen();
76 bigAreaPen.setWidth(bigAreaPen.width() * 3);
77
78 QPainter bigAreaPainter;
79 bigAreaPainter.begin(&bigAreaPixmap);
80 bigAreaPainter.setPen(bigAreaPen);
81
82 QPointArray bigAreaPolyline(3);
83 bigAreaPolyline.setPoint(0, (m_polyline[0].x() - r.x()) * 3 + 1, (m_polyline[0].y() - r.y()) * 3 + 1);
84 bigAreaPolyline.setPoint(1, (m_polyline[1].x() - r.x()) * 3 + 1, (m_polyline[1].y() - r.y()) * 3 + 1);
85 bigAreaPolyline.setPoint(2, (m_polyline[2].x() - r.x()) * 3 + 1, (m_polyline[2].y() - r.y()) * 3 + 1);
86
87 bigAreaPainter.drawPolyline(bigAreaPolyline);
88 bigAreaPainter.end();
89
90 bigAreaImage = bigAreaPixmap.convertToImage();
91 areaImage = bigAreaImage.smoothScale(bigAreaImage.width() / 3, bigAreaImage.height() / 3);
92 areaPixmap.convertFromImage(areaImage);
93
94 painter.drawPixmap(r.x(), r.y(), areaPixmap);
95 painter.end();
96
67 QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()), 97 QRect viewportRect(m_pDrawPadCanvas->contentsToViewport(r.topLeft()),
68 m_pDrawPadCanvas->contentsToViewport(r.bottomRight())); 98 m_pDrawPadCanvas->contentsToViewport(r.bottomRight()));
69 99