summaryrefslogtreecommitdiff
authorleseb <leseb>2002-06-18 19:27:40 (UTC)
committer leseb <leseb>2002-06-18 19:27:40 (UTC)
commitbcd6776c3e70efa41e759ac7707b2cae74f56f9c (patch) (side-by-side diff)
treefcfebc17eb30b04eaaba51e740be6ead1ee5aa53
parent0e0abb9c315ac64f483e127f377ac933878e3519 (diff)
downloadopie-bcd6776c3e70efa41e759ac7707b2cae74f56f9c.zip
opie-bcd6776c3e70efa41e759ac7707b2cae74f56f9c.tar.gz
opie-bcd6776c3e70efa41e759ac7707b2cae74f56f9c.tar.bz2
Anti-aliasing version!!!
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/ellipsetool.cpp37
-rw-r--r--noncore/graphics/drawpad/filledellipsetool.cpp39
2 files changed, 69 insertions, 7 deletions
diff --git a/noncore/graphics/drawpad/ellipsetool.cpp b/noncore/graphics/drawpad/ellipsetool.cpp
index c3badc3..733bade 100644
--- a/noncore/graphics/drawpad/ellipsetool.cpp
+++ b/noncore/graphics/drawpad/ellipsetool.cpp
@@ -13,13 +13,13 @@
#include "ellipsetool.h"
#include "drawpad.h"
#include "drawpadcanvas.h"
-#include <qpainter.h>
+#include <qimage.h>
#include <qpixmap.h>
EllipseTool::EllipseTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
: ShapeTool(drawPad, drawPadCanvas)
{
}
@@ -29,15 +29,46 @@ EllipseTool::~EllipseTool()
}
void EllipseTool::drawFinalShape(QPainter& p)
{
p.setRasterOp(Qt::NotROP);
p.drawRect(QRect(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);
+ bigAreaPainter.drawEllipse(QRect(bigAreaPen.width() + 1, bigAreaPen.width() + 1,
+ bigAreaPixmap.width() - 2 * (bigAreaPen.width() + 1),
+ bigAreaPixmap.height() - 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.drawEllipse(QRect(m_polyline[2], m_polyline[0]));
+ p.drawPixmap(r.x(), r.y(), areaPixmap);
}
void EllipseTool::drawTemporaryShape(QPainter& p)
{
p.setRasterOp(Qt::NotROP);
p.drawRect(QRect(m_polyline[2], m_polyline[1]));
diff --git a/noncore/graphics/drawpad/filledellipsetool.cpp b/noncore/graphics/drawpad/filledellipsetool.cpp
index b446000..2f7ec8f 100644
--- a/noncore/graphics/drawpad/filledellipsetool.cpp
+++ b/noncore/graphics/drawpad/filledellipsetool.cpp
@@ -13,13 +13,13 @@
#include "filledellipsetool.h"
#include "drawpad.h"
#include "drawpadcanvas.h"
-#include <qpainter.h>
+#include <qimage.h>
#include <qpixmap.h>
FilledEllipseTool::FilledEllipseTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas)
: ShapeTool(drawPad, drawPadCanvas)
{
}
@@ -29,16 +29,47 @@ FilledEllipseTool::~FilledEllipseTool()
}
void FilledEllipseTool::drawFinalShape(QPainter& p)
{
p.setRasterOp(Qt::NotROP);
p.drawRect(QRect(m_polyline[2], m_polyline[0]));
- p.setPen(m_pDrawPad->pen());
- p.setBrush(m_pDrawPad->brush());
+
+ 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);
+ bigAreaPainter.setBrush(m_pDrawPad->brush());
+ bigAreaPainter.drawEllipse(QRect(bigAreaPen.width() + 1, bigAreaPen.width() + 1,
+ bigAreaPixmap.width() - 2 * (bigAreaPen.width() + 1),
+ bigAreaPixmap.height() - 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.drawEllipse(QRect(m_polyline[2], m_polyline[0]));
+ p.drawPixmap(r.x(), r.y(), areaPixmap);
}
void FilledEllipseTool::drawTemporaryShape(QPainter& p)
{
p.setRasterOp(Qt::NotROP);
p.drawRect(QRect(m_polyline[2], m_polyline[1]));