Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_tool_rectangle.cc
Go to the documentation of this file.
1/*
2 * kis_tool_rectangle.cc - part of Krita
3 *
4 * SPDX-FileCopyrightText: 2000 John Califf <jcaliff@compuzone.net>
5 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
6 * SPDX-FileCopyrightText: 2004 Boudewijn Rempt <boud@valdyas.org>
7 * SPDX-FileCopyrightText: 2004 Clarence Dang <dang@k.org>
8 * SPDX-FileCopyrightText: 2009 Lukáš Tvrdý <lukast.dev@gmail.com>
9 * SPDX-FileCopyrightText: 2010 Cyrille Berger <cberger@cberger.net>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 */
13
14#include "kis_tool_rectangle.h"
15
16#include <kis_debug.h>
18#include "KoCanvasBase.h"
19
20#include <KisViewManager.h>
21#include <canvas/kis_canvas2.h>
25
26#include <KoCanvasController.h>
27#include <KoShapeStroke.h>
28
29
31 : KisToolRectangleBase(canvas, KisToolRectangleBase::PAINT, KisCursor::load("tool_rectangle_cursor.png", 6, 6))
32{
34 setObjectName("tool_rectangle");
36
37 KisCanvas2 *kritaCanvas = dynamic_cast<KisCanvas2*>(canvas);
38
39 connect(kritaCanvas->viewManager()->canvasResourceProvider(), SIGNAL(sigEffectiveCompositeOpChanged()), SLOT(resetCursorStyle()));
40}
41
45
47{
49 useCursor(KisCursor::load("tool_rectangle_eraser_cursor.png", 6, 6));
50 } else {
52 }
53
55}
56
57void KisToolRectangle::finishRect(const QRectF &rect, qreal roundCornersX, qreal roundCornersY)
58{
59 if (rect.isNull())
60 return;
61
64
65 if (!info.shouldAddShape) {
66 KisFigurePaintingToolHelper helper(kundo2_i18n("Draw Rectangle"),
67 image(),
69 canvas()->resourceManager(),
71 fillStyle(),
73
74 QPainterPath path;
75
76 if (roundCornersX > 0 || roundCornersY > 0) {
77 path.addRoundedRect(rect, roundCornersX, roundCornersY);
78 } else {
79 path.addRect(rect);
80 }
81 getRotatedPath(path, rect.center(), getRotationAngle());
82 helper.paintPainterPath(path);
83 } else {
84 const QRectF r = convertToPt(rect);
85 const qreal docRoundCornersX = convertToPt(roundCornersX);
86 const qreal docRoundCornersY = convertToPt(roundCornersY);
87 KoShape* shape = KisShapeToolHelper::createRectangleShape(r, docRoundCornersX, docRoundCornersY);
88 shape->rotate(qRadiansToDegrees(getRotationAngle()));
89
90 KoShapeStrokeSP border;
93 canvas()->resourceManager()->foregroundColor().toQColor() :
94 canvas()->resourceManager()->backgroundColor().toQColor();
95
96 border = toQShared(new KoShapeStroke(currentStrokeWidth(), color));
97 }
98 shape->setStroke(border);
99
101
102 addShape(shape);
103 }
104}
105
107{
108 return true;
109}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisViewManager * viewManager() const
static QCursor load(const QString &cursorName, int hotspotX=-1, int hotspotY=-1)
void paintPainterPath(const QPainterPath &path)
static KoShape * createRectangleShape(const QRectF &rect, qreal roundCornersX, qreal roundCornersY)
void setSupportOutline(bool supportOutline)
bool isEraser() const
void getRotatedPath(QPainterPath &path, const QPointF &center, const qreal &angle)
void resetCursorStyle() override
KisToolRectangle(KoCanvasBase *canvas)
void finishRect(const QRectF &rect, qreal roundCornersX, qreal roundCornersY) override
bool supportsPaintingAssistants() const override
KisToolShapeUtils::StrokeStyle strokeStyle()
ShapeAddInfo shouldAddShape(KisNodeSP currentNode) const
qreal currentStrokeWidth() const
QTransform fillTransform()
void addShape(KoShape *shape)
KisToolShapeUtils::FillStyle fillStyle()
KisCanvasResourceProvider * canvasResourceProvider()
QPointer< KoCanvasResourceProvider > resourceManager
void rotate(qreal angle)
Rotate the shape (relative)
Definition KoShape.cpp:250
virtual void setStroke(KoShapeStrokeModelSP stroke)
Definition KoShape.cpp:1081
void setIsOpacityPresetMode(bool value)
void useCursor(const QCursor &cursor)
QSharedPointer< T > toQShared(T *ptr)
KUndo2MagicString kundo2_i18n(const char *text)
void markAsSelectionShapeIfNeeded(KoShape *shape) const
KisTool::NodePaintAbility nodePaintAbility()
Definition kis_tool.cc:539
virtual void resetCursorStyle()
Definition kis_tool.cc:613
KisNodeSP currentNode() const
Definition kis_tool.cc:370
bool overrideCursorIfNotEditable()
Override the cursor appropriately if current node is not editable.
Definition kis_tool.cc:618
QRectF convertToPt(const QRectF &rect)
Definition kis_tool.cc:252
KisImageWSP image() const
Definition kis_tool.cc:332
KisCanvas2 * canvas