-rw-r--r-- | noncore/graphics/drawpad/ellipsetool.cpp | 37 | ||||
-rw-r--r-- | noncore/graphics/drawpad/filledellipsetool.cpp | 39 |
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])); |