Krita Source Code Documentation
Loading...
Searching...
No Matches
DefaultTool.h
Go to the documentation of this file.
1/* This file is part of the KDE project
2
3 SPDX-FileCopyrightText: 2006-2008 Thorsten Zachmann <zachmann@kde.org>
4 SPDX-FileCopyrightText: 2006-2008 Thomas Zander <zander@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7*/
8
9#ifndef DEFAULTTOOL_H
10#define DEFAULTTOOL_H
11
12#include <KoInteractionTool.h>
13#include <KoFlake.h>
16#include "SelectionDecorator.h"
20
21#include <QPolygonF>
22#include <QTime>
23#include <QCursor>
24
25class KisSignalMapper;
28class KoSelection;
30class KisViewManager;
32
42{
43 Q_OBJECT
44public:
50 explicit DefaultTool(KoCanvasBase *canvas, bool connectToSelectedShapesProxy = false);
51 ~DefaultTool() override;
52
54 HotPosition = 1410100299
55 };
56
57public:
58
59 bool wantsAutoScroll() const override;
60 void paint(QPainter &painter, const KoViewConverter &converter) override;
61
62 QRectF decorationsRect() const override;
63
65 void copy() const override;
66
68 void deleteSelection() override;
69
71 bool paste() override;
72
74 bool selectAll() override;
75
77 void deselect() override;
78
80 KoToolSelection *selection() override;
81
82 QMenu *popupActionsMenu() override;
83
92 KoFlake::SelectionHandle handleAt(const QPointF &point, bool *innerHandleMeaning = 0);
93
95
97
98public Q_SLOTS:
99 void activate(const QSet<KoShape *> &shapes) override;
100 void deactivate() override;
101
102Q_SIGNALS:
104
105private Q_SLOTS:
106 void selectionAlign(int _align);
107 void selectionDistribute(int _distribute);
108
110 void selectionSendToBack();
111 void selectionMoveUp();
112 void selectionMoveDown();
113
114 void selectionGroup();
115 void selectionUngroup();
116
117 void selectionTransform(int transformAction);
118 void selectionBooleanOp(int booleanOp);
120
123
126
127 void slotChangeTextType(int index);
128 void slotAddShapesToFlow();
129 void slotPutTextOnPath();
133 void slotReorderFlowShapes(int type);
134
135protected Q_SLOTS:
137 void updateActions();
138
139public: // Events
140
141 void mousePressEvent(KoPointerEvent *event) override;
142 void mouseMoveEvent(KoPointerEvent *event) override;
143 void mouseReleaseEvent(KoPointerEvent *event) override;
144 void mouseDoubleClickEvent(KoPointerEvent *event) override;
145
146 void keyPressEvent(QKeyEvent *event) override;
147
148 void explicitUserStrokeEndRequest() override;
149protected:
151
153
154protected:
156 virtual bool isValidForCurrentLayer() const;
157 virtual KoShapeManager *shapeManager() const;
158 virtual KoSelection *koSelection() const;
159
163 virtual void updateDistinctiveActions(const QList<KoShape*> &editableShapes);
164
165 void addTransformActions(QMenu *menu) const;
166 QScopedPointer<QMenu> m_contextMenu;
167
168private:
171
172private:
173 void setupActions();
175 void updateCursor();
177 qreal rotationOfHandle(KoFlake::SelectionHandle handle, bool useEdgeRotation);
178
179 void addMappedAction(KisSignalMapper *mapper, const QString &actionId, int type);
180
182 bool moveSelection(int direction, Qt::KeyboardModifiers modifiers);
183
185 QRectF handlesSize();
186
187
188 void canvasResourceChanged(int key, const QVariant &res) override;
189
193 QPointF m_selectionBox[8];
195 QPointF m_lastPoint;
196
197 QScopedPointer<SelectionDecorator> m_decorator;
198 QScopedPointer<KoSvgTextShapeOutlineHelper> m_textOutlineHelper;
199
202
203 // TODO alter these 3 arrays to be static const instead
204 QCursor m_sizeCursors[8];
205 QCursor m_rotateCursors[8];
206 QCursor m_shearCursors[8];
207 qreal m_angle;
209 friend class SelectionHandler;
210
212
219
221};
222
223#include <KoSvgTextShape.h>
224
227{
228 Q_OBJECT
229public:
235 virtual void setPropertiesOnSelected(KoSvgTextProperties properties, QSet<KoSvgTextProperties::PropertyId> removeProperties = QSet<KoSvgTextProperties::PropertyId>()) override;
236 virtual void setCharacterPropertiesOnSelected(KoSvgTextProperties properties, QSet<KoSvgTextProperties::PropertyId> removeProperties = QSet<KoSvgTextProperties::PropertyId>()) override;
237 virtual bool spanSelection() override;
238 virtual bool characterPropertiesEnabled() override;
239
240 virtual void notifyCursorPosChanged(int pos, int anchor) override;
241 virtual void notifyMarkupChanged() override;
242 virtual void notifyShapeChanged(KoShape::ChangeType type, KoShape *shape) override;
243
244 void clearSelection();
245public Q_SLOTS:
247private:
248 struct Private;
249 const QScopedPointer<Private> d;
250};
251
252
253#endif
float value(const T *src, size_t ch)
virtual void updateDistinctiveActions(const QList< KoShape * > &editableShapes)
void addMappedAction(KisSignalMapper *mapper, const QString &actionId, int type)
KoFlake::SelectionHandle m_lastHandle
virtual bool isValidForCurrentLayer() const
void selectionSendToBack()
void explicitUserStrokeEndRequest() override
explicitUserStrokeEndRequest is called by the input manager when the user presses Enter key or any eq...
void slotActivateEditStrokeGradient(bool value)
void canvasResourceChanged(int key, const QVariant &res) override
bool m_mouseWasInsideHandles
QScopedPointer< QMenu > m_contextMenu
KoFlake::AnchorPosition m_hotPosition
KisSignalMapper * m_textTypeSignalsMapper
void deleteSelection() override
reimplemented
void selectionDistribute(int _distribute)
bool paste() override
reimplemented
void deselect() override
reimplemented
KisSignalMapper * m_booleanSignalsMapper
void updateActions()
Update actions on selection change.
KisSignalMapper * m_distributeSignalsMapper
QCursor m_shearCursors[8]
KoFlake::SelectionHandle handleAt(const QPointF &point, bool *innerHandleMeaning=0)
void keyPressEvent(QKeyEvent *event) override
~DefaultTool() override
QCursor m_sizeCursors[8]
bool moveSelection(int direction, Qt::KeyboardModifiers modifiers)
KoShapeMeshGradientHandles::Handle m_selectedMeshHandle
void mousePressEvent(KoPointerEvent *event) override
bool wantsAutoScroll() const override
DefaultToolTabbedWidget * m_tabbedOptionWidget
void slotRemoveShapesFromFlow()
virtual KoSelection * koSelection() const
DefaultTool(KoCanvasBase *canvas, bool connectToSelectedShapesProxy=false)
void slotAddShapesToFlow()
qreal rotationOfHandle(KoFlake::SelectionHandle handle, bool useEdgeRotation)
Returns rotation angle of given handle of the current selection.
void slotReorderFlowShapes(int type)
QList< QPointer< QWidget > > createOptionWidgets() override
QRectF decorationsRect() const override
void mouseMoveEvent(KoPointerEvent *event) override
void mouseDoubleClickEvent(KoPointerEvent *event) override
void selectionTransform(int transformAction)
QPointF m_lastPoint
void addTransformActions(QMenu *menu) const
QPointF m_selectionBox[8]
KoToolSelection * selection() override
reimplemented
void slotActivateEditFillMeshGradient(bool value)
void slotSubtractShapesFromFlow()
void slotPutTextOnPath()
void selectionGroup()
QMenu * popupActionsMenu() override
QRectF handlesSize()
Returns selection rectangle adjusted by handle proximity threshold.
void paint(QPainter &painter, const KoViewConverter &converter) override
void deactivate() override
DefaultToolTextPropertiesInterface * m_textPropertyInterface
bool selectAll() override
reimplemented
void selectionAlign(int _align)
void selectionMoveDown()
void slotActivateEditFillGradient(bool value)
void slotToggleFlowShapeType()
bool updateTextContourMode()
void recalcSelectionBox(KoSelection *selection)
void selectionBooleanOp(int booleanOp)
QScopedPointer< KoSvgTextShapeOutlineHelper > m_textOutlineHelper
KisSignalMapper * m_alignSignalsMapper
KisSignalMapper * m_textFlowSignalsMapper
QCursor m_rotateCursors[8]
void meshgradientHandleSelected(KoShapeMeshGradientHandles::Handle)
QScopedPointer< SelectionDecorator > m_decorator
void slotResetMeshGradientState()
void updateCursor()
void setupActions()
void activate(const QSet< KoShape * > &shapes) override
KisSignalMapper * m_transformSignalsMapper
void selectionReorder(KoShapeReorderCommand::MoveShapeType order)
void mouseReleaseEvent(KoPointerEvent *event) override
void copy() const override
reimplemented
KoToolSelection * m_selectionHandler
void selectionBringToFront()
QPolygonF m_selectionOutline
virtual KoShapeManager * shapeManager() const
void selectionUngroup()
KoShapeMeshGradientHandles::Handle m_hoveredMeshHandle
KoSvgTextShape * tryFetchCurrentShapeManagerOwnerTextShape() const
void slotChangeTextType(int index)
void selectionSplitShapes()
void selectionMoveUp()
KoInteractionStrategy * createStrategy(KoPointerEvent *event) override
The KisSignalMapper class bundles signals from identifiable senders.
The undo / redo command for shape moving.
MoveShapeType
An enum for defining what kind of reordering to use.
ChangeType
Used by shapeChanged() to select which change was made.
Definition KoShape.h:92
The KoSvgTextPropertiesInterface class.
KoCanvasBase * canvas() const
Returns the canvas the tool is working on.
AnchorPosition
Definition KoFlake.h:85
SelectionHandle
Enum determining which handle is meant, used in KoInteractionTool.
Definition KoFlake.h:55
Interface to interact with the text property manager.
virtual bool spanSelection() override
Whether the tool is currently selecting a set of characters instead of whole paragraphs.
virtual bool characterPropertiesEnabled() override
Whether character selections are possible at all.
virtual QList< KoSvgTextProperties > getSelectedProperties() override
getSelectedProperties
const QScopedPointer< Private > d
virtual void notifyShapeChanged(KoShape::ChangeType type, KoShape *shape) override
DefaultToolTextPropertiesInterface(DefaultTool *parent)
virtual KoSvgTextProperties getInheritedProperties() override
getInheritedProperties The properties that should be visible when a given property isn't available in...
virtual void notifyCursorPosChanged(int pos, int anchor) override
virtual void notifyMarkupChanged() override
virtual void setCharacterPropertiesOnSelected(KoSvgTextProperties properties, QSet< KoSvgTextProperties::PropertyId > removeProperties=QSet< KoSvgTextProperties::PropertyId >()) override
setCharacterPropertiesOnSelected This sets the properties for a character selection instead of the fu...
virtual QList< KoSvgTextProperties > getCharacterProperties() override
getSelectedProperties
virtual void setPropertiesOnSelected(KoSvgTextProperties properties, QSet< KoSvgTextProperties::PropertyId > removeProperties=QSet< KoSvgTextProperties::PropertyId >()) override
setPropertiesOnSelected This sets the properties on the selection. The implementation is responsible ...
ShapeChangeListener so we can inform any text cursors that the cursor needs updating.