Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_painting_assistants_decoration.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
3 * SPDX-FileCopyrightText: 2017 Scott Petrovic <scottpetrovic@gmail.com>
4 * SPDX-FileCopyrightText: 2026 Ayanami Kaine <personal@ayanamikaine.com>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9#ifndef _KIS_PAINTING_ASSISTANTS_MANAGER_H_
10#define _KIS_PAINTING_ASSISTANTS_MANAGER_H_
11
12#include <optional>
13
14#include <QPointF>
15#include <QColor>
16
17#include "KoPointerEvent.h"
18#include "KoSnapGuide.h"
19#include "kis_icon_utils.h"
23#include <kritaui_export.h>
24
25class KisView;
27
30
31// Data for editor widget. This is shared between the decoration and assistant tool which needs hit box information
33 //button count to loop over
34 unsigned int buttoncount = 6;
35 //button icon size
36 const int buttonSize = 24;
37 //boolean values track which buttons are enabled within the editor widget
43 bool widgetActivated = true;
44 const int widgetOffset = 10;
45 //padding for dynamic positioning between buttons
46 const int buttonPadding = 7;
47 //button positions
48 QPointF moveIconPosition = QPointF(0, 0);
49 QPointF snapIconPosition = QPointF(0, 0);
50 QPointF lockedIconPosition = QPointF(0, 0);
51 QPointF duplicateIconPosition = QPointF(0, 0);
52 QPointF deleteIconPosition = QPointF(0, 0);
53 QSize boundingSize = QSize(0, 0);
54 //size of the side drag decoration
55 const int dragDecorationWidth = 15;
56 //QPixMaps representing icons for buttons
57 const QIcon m_iconMove = KisIconUtils::loadIcon("transform-move");
58 const QIcon m_iconSnapOn = KisIconUtils::loadIcon("visible");
59 const QIcon m_iconSnapOff = KisIconUtils::loadIcon("novisible");
60 const QIcon m_iconLockOn = KisIconUtils::loadIcon("layer-locked");
61 const QIcon m_iconLockOff = KisIconUtils::loadIcon("layer-unlocked");
62 const QIcon m_iconDuplicate = KisIconUtils::loadIcon("duplicateitem");
63 const QIcon m_iconDelete = KisIconUtils::loadIcon("deletelayer");
64 //how many buttons fit horizontally before extending to the next row
65 const int horizontalButtonLimit = 3;
66};
67
79{
80 Q_OBJECT
81public:
84 void addAssistant(KisPaintingAssistantSP assistant);
85 void raiseAssistant(KisPaintingAssistantSP assistant);
86 void removeAssistant(KisPaintingAssistantSP assistant);
87 void removeAll();
88 void setAssistants(const QList<KisPaintingAssistantSP> &assistants);
89 QPointF adjustPosition(const QPointF& point, const QPointF& strokeBegin);
90 void adjustLine(QPointF &point, QPointF& strokeBegin);
91 void setAdjustedBrushPosition(const QPointF position);
92 void endStroke();
93 void setTemporaryConstraint(std::optional<KisTemporaryPaintConstraint> constraint);
94 std::optional<KisTemporaryPaintConstraint> temporaryConstraint() const;
96 QList<KisPaintingAssistantSP> assistants() const;
97 //store the editor data to be used to control the render/interaction of the editor widget.
98 struct AssistantEditorData globalEditorWidgetData;
99 bool hasPaintableAssistants() const;
100
101
104 KisPaintingAssistantSP selectedAssistant();
105 void setSelectedAssistant(KisPaintingAssistantSP assistant);
106 void deselectAssistant();
107
108
111 void activateAssistantsEditor();
112
113
116 void deactivateAssistantsEditor();
117
120 bool isEditingAssistants();
121
122
124 void setAssistantVisible(bool set);
125
127 void setOutlineVisible(bool set);
128
130 void setOnlyOneAssistantSnap(bool assistant);
131
133 void setEraserSnap(bool assistant);
134
136 bool assistantVisibility();
137
139 bool outlineVisibility();
140
142 void uncache();
143
144 int handleSize();
145 void setHandleSize(int handleSize);
146
147 QColor globalAssistantsColor();
148 void setGlobalAssistantsColor(QColor color);
149
150Q_SIGNALS:
154
155public Q_SLOTS:
156
158 void toggleAssistantVisible();
159
161 void toggleOutlineVisible();
162 QPointF snapToGuide(KoPointerEvent *e, const QPointF &offset, bool useModifiers);
163 QPointF snapToGuide(const QPointF& pt, const QPointF &offset);
164
165 void slotUpdateDecorationVisibility();
166 void slotConfigChanged();
167
168protected:
169 void drawDecoration(QPainter& gc, const QRectF& updateRect, const KisCoordinatesConverter *converter,KisCanvas2* canvas) override;
170 void drawHandles(KisPaintingAssistantSP assistant, QPainter& gc, const KisCoordinatesConverter *converter, const KoColorDisplayRendererInterface *renderInterface);
171 void drawEditorWidget(KisPaintingAssistantSP assistant, QPainter& gc, const KisCoordinatesConverter *converter, const KoColorDisplayRendererInterface *renderInterface);
172
173private:
174 struct Private;
175 Private* const d;
176};
177
178#endif
virtual void drawDecoration(QPainter &gc, const QRectF &updateArea, const KisCoordinatesConverter *converter, KisCanvas2 *canvas)=0
KisSharedPtr< KisPaintingAssistantsDecoration > KisPaintingAssistantsDecorationSP
QIcon loadIcon(const QString &name)