Diffstat (limited to 'noncore/graphics/drawpad/filledellipsetool.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/graphics/drawpad/filledellipsetool.cpp | 39 |
1 files changed, 35 insertions, 4 deletions
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 @@ -7,40 +7,71 @@ * 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 "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) { } 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])); p.drawRect(QRect(m_polyline[2], m_polyline[0])); } |