Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_tool_crop.h
Go to the documentation of this file.
1/*
2 * kis_tool_crop.h - part of Krita
3 *
4 * SPDX-FileCopyrightText: 2004 Boudewijn Rempt <boud@valdyas.org>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9#ifndef KIS_TOOL_CROP_H_
10#define KIS_TOOL_CROP_H_
11
12#include <QPoint>
13#include <QPainterPath>
14
15#include <kis_icon.h>
16
17#include <kconfig.h>
18#include <kconfiggroup.h>
19
20#include <QKeySequence>
21#include <KoToolFactoryBase.h>
22#include "kis_tool.h"
24#include "ui_wdg_tool_crop.h"
26#include "kis_action.h"
28
29class QRect;
30struct DecorationLine;
31
32
36class KisToolCrop : public KisTool
37{
38
39 Q_OBJECT
43 Q_PROPERTY(int cropX READ cropX WRITE setCropX NOTIFY cropXChanged);
44 Q_PROPERTY(int cropY READ cropY WRITE setCropY NOTIFY cropYChanged);
45 Q_PROPERTY(int cropWidth READ cropWidth WRITE setCropWidth NOTIFY cropWidthChanged);
46 Q_PROPERTY(bool lockWidth READ lockWidth WRITE setLockWidth NOTIFY lockWidthChanged);
47 Q_PROPERTY(int cropHeight READ cropHeight WRITE setCropHeight NOTIFY cropHeightChanged);
48 Q_PROPERTY(bool lockHeight READ lockHeight WRITE setLockHeight NOTIFY lockHeightChanged);
49 Q_PROPERTY(double ratio READ ratio WRITE setRatio NOTIFY ratioChanged);
50 Q_PROPERTY(bool lockRatio READ lockRatio WRITE setLockRatio NOTIFY lockRatioChanged);
51 Q_PROPERTY(int decoration READ decoration WRITE setDecoration NOTIFY decorationChanged);
52
53public:
60
62 ~KisToolCrop() override;
63
64 QWidget* createOptionWidget() override;
65
66 void beginPrimaryAction(KoPointerEvent *event) override;
67 void continuePrimaryAction(KoPointerEvent *event) override;
68 void endPrimaryAction(KoPointerEvent *event) override;
70
71 void mouseMoveEvent(KoPointerEvent *e) override;
72 void canvasResourceChanged(int key, const QVariant &res) override;
73
74 void paint(QPainter &painter, const KoViewConverter &converter) override;
75
76 QMenu *popupActionsMenu() override;
77
78 CropToolType cropType() const;
79 bool cropTypeSelectable() const;
80 int cropX() const;
81 int cropY() const;
82 int cropWidth() const;
83 bool lockWidth() const;
84 int cropHeight() const;
85 bool lockHeight() const;
86 double ratio() const;
87 bool lockRatio() const;
88 int decoration() const;
89 bool growCenter() const;
90 bool allowGrow() const;
91
92Q_SIGNALS:
96
101
102 void ratioChanged(double value);
103
107
110
111public Q_SLOTS:
112
113 void activate(const QSet<KoShape*> &shapes) override;
114 void deactivate() override;
115
116 void requestStrokeEnd() override;
117 void requestStrokeCancellation() override;
118 void requestUndoDuringStroke() override;
119 void requestRedoDuringStroke() override;
120
121 void crop();
122
123 void showSizeOnCanvas();
124
125 void setCropTypeLegacy(int cropType);
127 void setCropTypeSelectable(bool selectable);
128 void setCropX(int x);
129 void setCropY(int y);
130 void setCropWidth(int x);
131 void setLockWidth(bool lock);
132 void setCropHeight(int y);
133 void setLockHeight(bool lock);
134 void setRatio(double ratio);
135 void setLockRatio(bool lock);
136 void setDecoration(int i);
137 void setAllowGrow(bool g);
138 void setGrowCenter(bool g);
139
140 void slotRectChanged();
141
142private:
143 void doCanvasUpdate(const QRect &updateRect);
144
145private:
146 void cancelStroke();
147 QRectF boundingRect();
148 QRectF borderLineRect();
149 QPainterPath handlesPath();
150 void paintOutlineWithHandles(QPainter& gc);
151 qint32 mouseOnHandle(const QPointF currentViewPoint);
152 void setMoveResizeCursor(qint32 handle);
153 QRectF lowerRightHandleRect(QRectF cropBorderRect);
154 QRectF upperRightHandleRect(QRectF cropBorderRect);
155 QRectF lowerLeftHandleRect(QRectF cropBorderRect);
156 QRectF upperLeftHandleRect(QRectF cropBorderRect);
157 QRectF lowerHandleRect(QRectF cropBorderRect);
158 QRectF rightHandleRect(QRectF cropBorderRect);
159 QRectF upperHandleRect(QRectF cropBorderRect);
160 QRectF leftHandleRect(QRectF cropBorderRect);
161 void drawDecorationLine(QPainter *p, DecorationLine *decorLine, QRectF rect);
162
164
165private:
167
168 qint32 m_handleSize {13};
171
174
176 bool m_resettingStroke {false};
178
179 KConfigGroup configGroup;
181
182 QScopedPointer<QMenu> m_contextMenu;
189
203
207};
208
210{
211
212public:
214 : KoToolFactoryBase("KisToolCrop") {
215 setToolTip(i18n("Crop Tool"));
218 setPriority(11);
219 setIconName(koIconNameCStr("tool_crop"));
220 setShortcut(QKeySequence("C"));
221 }
222
224
226 return new KisToolCrop(canvas);
227 }
228
229};
230
231
232
233#endif // KIS_TOOL_CROP_H_
234
float value(const T *src, size_t ch)
const Params2D p
~KisToolCropFactory() override
KoToolBase * createTool(KoCanvasBase *canvas) override
void requestStrokeCancellation() override
void setAllowGrow(bool g)
KisAction * lockRatioToggleOption
bool m_resettingStroke
void requestUndoDuringStroke() override
void setGrowCenter(bool g)
void cropWidthChanged(int value)
bool tryContinueLastCropAction()
QRectF lowerRightHandleRect(QRectF cropBorderRect)
void requestRedoDuringStroke() override
QWidget * createOptionWidget() override
void paint(QPainter &painter, const KoViewConverter &converter) override
void slotRectChanged()
void requestStrokeEnd() override
QRect m_lastCanvasUpdateRect
bool m_cropTypeSelectable
void setLockHeight(bool lock)
void setCropHeight(int y)
KisAction * centerToggleOption
QRect m_initialDragRect
void decorationChanged(int value)
QRectF upperRightHandleRect(QRectF cropBorderRect)
void setCropX(int x)
KisToolCrop(KoCanvasBase *canvas)
void setCropType(CropToolType cropType)
KisAction * lockHeightToggleOption
void cropTypeChanged(int value)
void ratioChanged(double value)
void beginPrimaryAction(KoPointerEvent *event) override
bool growCenter() const
void setMoveResizeCursor(qint32 handle)
~KisToolCrop() override
void activate(const QSet< KoShape * > &shapes) override
void setCropTypeLegacy(int cropType)
void cropXChanged(int value)
CropToolType m_cropType
QRectF lowerLeftHandleRect(QRectF cropBorderRect)
QList< DecorationLine * > m_decorations
QRectF upperHandleRect(QRectF cropBorderRect)
void doCanvasUpdate(const QRect &updateRect)
qint32 mouseOnHandle(const QPointF currentViewPoint)
QPoint m_dragStart
QMenu * popupActionsMenu() override
void deactivate() override
void canGrowChanged(bool value)
void canvasResourceChanged(int key, const QVariant &res) override
void setDecoration(int i)
void continuePrimaryAction(KoPointerEvent *event) override
qint32 m_handleSize
CropToolType cropType
Q_ENUMS(CropToolType)
KisToolCropConfigWidget * optionsWidget
QRectF leftHandleRect(QRectF cropBorderRect)
void mouseMoveEvent(KoPointerEvent *e) override
QRectF boundingRect()
void setRatio(double ratio)
QRectF borderLineRect()
void endPrimaryAction(KoPointerEvent *event) override
void lockRatioChanged(bool value)
qint32 m_mouseOnHandleType
KConfigGroup configGroup
void isCenteredChanged(bool value)
void cancelStroke()
QRectF rightHandleRect(QRectF cropBorderRect)
void drawDecorationLine(QPainter *p, DecorationLine *decorLine, QRectF rect)
void cropYChanged(int value)
void setCropWidth(int x)
bool m_haveCropSelection
QPointF m_dragOffsetDoc
bool cropTypeSelectable
void cropHeightChanged(int value)
void setCropY(int y)
KisAction * applyCrop
QRectF lowerHandleRect(QRectF cropBorderRect)
bool allowGrow() const
KisAction * growToggleOption
QScopedPointer< QMenu > m_contextMenu
KisAction * lockWidthToggleOption
void paintOutlineWithHandles(QPainter &gc)
QPainterPath handlesPath()
void cropTypeSelectableChanged()
void lockHeightChanged(bool value)
QRectF upperLeftHandleRect(QRectF cropBorderRect)
KisConstrainedRect m_finalRect
void showSizeOnCanvas()
void setLockWidth(bool lock)
void lockWidthChanged(bool value)
void setLockRatio(bool lock)
void setCropTypeSelectable(bool selectable)
void beginPrimaryDoubleClickAction(KoPointerEvent *event) override
void setShortcut(const QKeySequence &shortcut)
void setSection(const QString &section)
void setActivationShapeId(const QString &activationShapeId)
void setIconName(const char *iconName)
void setToolTip(const QString &tooltip)
void setPriority(int newPriority)
#define koIconNameCStr(name)
Definition kis_icon.h:28
static const QString KRITA_TOOL_ACTIVATION_ID
Definition kis_tool.h:37
static const QString Transform
Tools that transform the layer.
KisCanvas2 * canvas