File indexing completed on 2024-06-16 04:17:42

0001 /*
0002  *  kis_tool_ellipse.cc - part of Krayon
0003  *
0004  *  SPDX-FileCopyrightText: 2000 John Califf <jcaliff@compuzone.net>
0005  *  SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
0006  *  SPDX-FileCopyrightText: 2004 Boudewijn Rempt <boud@valdyas.org>
0007  *  SPDX-FileCopyrightText: 2004 Clarence Dang <dang@kde.org>
0008  *  SPDX-FileCopyrightText: 2009 Lukáš Tvrdý <lukast.dev@gmail.com>
0009  *  SPDX-FileCopyrightText: 2010 Cyrille Berger <cberger@cberger.net>
0010  *
0011  *  SPDX-License-Identifier: GPL-2.0-or-later
0012  */
0013 
0014 #include "kis_tool_ellipse.h"
0015 #include <KoCanvasBase.h>
0016 #include <KoShapeStroke.h>
0017 
0018 #include <KisViewManager.h>
0019 #include <canvas/kis_canvas2.h>
0020 #include <kis_canvas_resource_provider.h>
0021 #include <kis_shape_tool_helper.h>
0022 #include "kis_figure_painting_tool_helper.h"
0023 #include <brushengine/kis_paintop_preset.h>
0024 
0025 KisToolEllipse::KisToolEllipse(KoCanvasBase * canvas)
0026         : KisToolEllipseBase(canvas, KisToolEllipseBase::PAINT, KisCursor::load("tool_ellipse_cursor.png", 6, 6))
0027 {
0028     setObjectName("tool_ellipse");
0029     setSupportOutline(true);
0030 
0031     KisCanvas2 *kritaCanvas = dynamic_cast<KisCanvas2*>(canvas);
0032 
0033     connect(kritaCanvas->viewManager()->canvasResourceProvider(), SIGNAL(sigEffectiveCompositeOpChanged()), SLOT(resetCursorStyle()));
0034 }
0035 
0036 KisToolEllipse::~KisToolEllipse()
0037 {
0038 }
0039 
0040 void KisToolEllipse::resetCursorStyle()
0041 {
0042     if (isEraser() && (nodePaintAbility() == NodePaintAbility::PAINT)) {
0043         useCursor(KisCursor::load("tool_ellipse_eraser_cursor.png", 6, 6));
0044     } else {
0045         KisToolEllipseBase::resetCursorStyle();
0046     }
0047 
0048     overrideCursorIfNotEditable();
0049 }
0050 
0051 void KisToolEllipse::finishRect(const QRectF& rect, qreal roundCornersX, qreal roundCornersY)
0052 {
0053     Q_UNUSED(roundCornersX);
0054     Q_UNUSED(roundCornersY);
0055 
0056     if (rect.isEmpty())
0057         return;
0058 
0059     const KisToolShape::ShapeAddInfo info =
0060         shouldAddShape(currentNode());
0061 
0062     if (!info.shouldAddShape) {
0063         KisFigurePaintingToolHelper helper(kundo2_i18n("Draw Ellipse"),
0064                                            image(),
0065                                            currentNode(),
0066                                            canvas()->resourceManager(),
0067                                            strokeStyle(),
0068                                            fillStyle(),
0069                                            fillTransform());
0070         QPainterPath path;
0071         path.addEllipse(rect);
0072         getRotatedPath(path, rect.center(), getRotationAngle());
0073         helper.paintPainterPath(path);
0074     } else {
0075         QRectF r = convertToPt(rect);
0076         KoShape* shape = KisShapeToolHelper::createEllipseShape(r);
0077         shape->rotate(qRadiansToDegrees(getRotationAngle()));
0078         KoShapeStrokeSP border(new KoShapeStroke(currentStrokeWidth(), currentFgColor().toQColor()));
0079         shape->setStroke(border);
0080 
0081         info.markAsSelectionShapeIfNeeded(shape);
0082 
0083         addShape(shape);
0084     }
0085 }
0086