From f2cf56b43d80c16329bda01f9e37e52fb8546816 Mon Sep 17 00:00:00 2001
From: leseb <leseb>
Date: Wed, 19 Jun 2002 06:28:00 +0000
Subject: Anti-aliasing support

---
diff --git a/noncore/graphics/drawpad/linetool.cpp b/noncore/graphics/drawpad/linetool.cpp
index 94ca165..1480df2 100644
--- a/noncore/graphics/drawpad/linetool.cpp
+++ b/noncore/graphics/drawpad/linetool.cpp
@@ -16,6 +16,9 @@
 #include "drawpad.h"
 #include "drawpadcanvas.h"
 
+#include <qimage.h>
+#include <qpixmap.h>
+
 LineTool::LineTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
     : ShapeTool(drawPad, drawPadCanvas)
 {
@@ -29,9 +32,49 @@ void LineTool::drawFinalShape(QPainter& p)
 {
     p.setRasterOp(Qt::NotROP);
     p.drawLine(m_polyline[2], m_polyline[0]);
-    p.setPen(m_pDrawPad->pen());
+
+    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());
+
+    QPixmap areaPixmap(r.width(), r.height());
+    bitBlt(&areaPixmap, QPoint(0, 0), p.device(), r);
+
+    QImage areaImage = areaPixmap.convertToImage();
+    QImage bigAreaImage = areaImage.smoothScale(areaImage.width() * 3, areaImage.height() * 3);
+
+    QPixmap bigAreaPixmap;
+    bigAreaPixmap.convertFromImage(bigAreaImage);
+
+    QPen bigAreaPen = m_pDrawPad->pen();
+    bigAreaPen.setWidth(bigAreaPen.width() * 3);
+
+    QPainter bigAreaPainter;
+    bigAreaPainter.begin(&bigAreaPixmap);
+    bigAreaPainter.setPen(bigAreaPen);
+
+    if (((m_polyline[2].x() < m_polyline[0].x()) && (m_polyline[2].y() < m_polyline[0].y()))
+        || ((m_polyline[2].x() > m_polyline[0].x()) && (m_polyline[2].y() > m_polyline[0].y()))) {
+
+        bigAreaPainter.drawLine(bigAreaPen.width() + 1, bigAreaPen.width() + 1,
+                                bigAreaPixmap.width() - bigAreaPen.width() - 2,
+                                bigAreaPixmap.height() - bigAreaPen.width() - 2);
+    } else {
+        bigAreaPainter.drawLine(bigAreaPen.width() + 1, bigAreaPixmap.height() - bigAreaPen.width() - 2,
+                                bigAreaPixmap.width() - bigAreaPen.width() - 2, bigAreaPen.width() + 1);
+    }
+
+    bigAreaPainter.end();
+
+    bigAreaImage = bigAreaPixmap.convertToImage();
+    areaImage = bigAreaImage.smoothScale(bigAreaImage.width() / 3, bigAreaImage.height() / 3);
+    areaPixmap.convertFromImage(areaImage);
+
     p.setRasterOp(Qt::CopyROP);
-    p.drawLine(m_polyline[2], m_polyline[0]);
+    p.drawPixmap(r.x(), r.y(), areaPixmap);
 }
 
 void LineTool::drawTemporaryShape(QPainter& p)
--
cgit v0.9.0.2