summaryrefslogtreecommitdiff
path: root/noncore
authorleseb <leseb>2002-06-19 07:10:53 (UTC)
committer leseb <leseb>2002-06-19 07:10:53 (UTC)
commit1d60bfb5925c5009122ae04009f8e99658436b35 (patch) (unidiff)
treeb2f81f2bda14b2228fb1d70dc194a4e112f0f66b /noncore
parentb1fd4450c70522551361c6138688777cb29e1e2f (diff)
downloadopie-1d60bfb5925c5009122ae04009f8e99658436b35.zip
opie-1d60bfb5925c5009122ae04009f8e99658436b35.tar.gz
opie-1d60bfb5925c5009122ae04009f8e99658436b35.tar.bz2
Anti-aliasing support
Diffstat (limited to 'noncore') (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
@@ -14,12 +14,13 @@
14#include "pointtool.h" 14#include "pointtool.h"
15 15
16#include "drawpad.h" 16#include "drawpad.h"
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)
23 : Tool(drawPad, drawPadCanvas) 24 : Tool(drawPad, drawPadCanvas)
24{ 25{
25 m_mousePressed = false; 26 m_mousePressed = false;
@@ -45,28 +46,57 @@ void PointTool::mouseReleaseEvent(QMouseEvent* e)
45 m_pDrawPadCanvas->backupPage(); 46 m_pDrawPadCanvas->backupPage();
46} 47}
47 48
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();
62 r.setLeft(r.left() - m_pDrawPad->pen().width()); 61 r.setLeft(r.left() - m_pDrawPad->pen().width());
63 r.setTop(r.top() - m_pDrawPad->pen().width()); 62 r.setTop(r.top() - m_pDrawPad->pen().width());
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
70 bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(), 100 bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(),
71 m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height()); 101 m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height());
72 102