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