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 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef _KIS_PAINTING_ASSISTANTS_MANAGER_H_
9#define _KIS_PAINTING_ASSISTANTS_MANAGER_H_
10
11#include <QPointF>
12#include <QColor>
13
14#include "KoPointerEvent.h"
15#include "KoSnapGuide.h"
16#include "kis_icon_utils.h"
19#include <kritaui_export.h>
20
21class KisView;
22
25
26// Data for editor widget. This is shared between the decoration and assistant tool which needs hit box information
28 //button count to loop over
29 unsigned int buttoncount = 6;
30 //button icon size
31 const int buttonSize = 24;
32 //boolean values track which buttons are enabled within the editor widget
38 bool widgetActivated = true;
39 const int widgetOffset = 10;
40 //padding for dynamic positioning between buttons
41 const int buttonPadding = 7;
42 //button positions
43 QPointF moveIconPosition = QPointF(0, 0);
44 QPointF snapIconPosition = QPointF(0, 0);
45 QPointF lockedIconPosition = QPointF(0, 0);
46 QPointF duplicateIconPosition = QPointF(0, 0);
47 QPointF deleteIconPosition = QPointF(0, 0);
48 QSize boundingSize = QSize(0, 0);
49 //size of the side drag decoration
50 const int dragDecorationWidth = 15;
51 //QPixMaps representing icons for buttons
52 const QPixmap m_iconMove = KisIconUtils::loadIcon("transform-move").pixmap(buttonSize+10, buttonSize+10);
53 const QPixmap m_iconSnapOn = KisIconUtils::loadIcon("visible").pixmap(buttonSize, buttonSize);
54 const QPixmap m_iconSnapOff = KisIconUtils::loadIcon("novisible").pixmap(buttonSize, buttonSize);
55 const QPixmap m_iconLockOn = KisIconUtils::loadIcon("layer-locked").pixmap(buttonSize, buttonSize);
56 const QPixmap m_iconLockOff = KisIconUtils::loadIcon("layer-unlocked").pixmap(buttonSize, buttonSize);
57 const QPixmap m_iconDuplicate = KisIconUtils::loadIcon("duplicateitem").pixmap(buttonSize, buttonSize);
58 const QPixmap m_iconDelete = KisIconUtils::loadIcon("deletelayer").pixmap(buttonSize, buttonSize);
59 //how many buttons fit horizontally before extending to the next row
60 const int horizontalButtonLimit = 3;
61};
62
74{
75 Q_OBJECT
76public:
79 void addAssistant(KisPaintingAssistantSP assistant);
80 void raiseAssistant(KisPaintingAssistantSP assistant);
81 void removeAssistant(KisPaintingAssistantSP assistant);
82 void removeAll();
83 void setAssistants(const QList<KisPaintingAssistantSP> &assistants);
84 QPointF adjustPosition(const QPointF& point, const QPointF& strokeBegin);
85 void adjustLine(QPointF &point, QPointF& strokeBegin);
86 void setAdjustedBrushPosition(const QPointF position);
87 void endStroke();
89 QList<KisPaintingAssistantSP> assistants() const;
90 //store the editor data to be used to control the render/interaction of the editor widget.
91 struct AssistantEditorData globalEditorWidgetData;
92 bool hasPaintableAssistants() const;
93
94
97 KisPaintingAssistantSP selectedAssistant();
98 void setSelectedAssistant(KisPaintingAssistantSP assistant);
99 void deselectAssistant();
100
101
104 void activateAssistantsEditor();
105
106
109 void deactivateAssistantsEditor();
110
113 bool isEditingAssistants();
114
115
117 void setAssistantVisible(bool set);
118
120 void setOutlineVisible(bool set);
121
123 void setOnlyOneAssistantSnap(bool assistant);
124
126 void setEraserSnap(bool assistant);
127
129 bool assistantVisibility();
130
132 bool outlineVisibility();
133
135 void uncache();
136
137 int handleSize();
138 void setHandleSize(int handleSize);
139
140 QColor globalAssistantsColor();
141 void setGlobalAssistantsColor(QColor color);
142
143Q_SIGNALS:
146
147public Q_SLOTS:
148
150 void toggleAssistantVisible();
151
153 void toggleOutlineVisible();
154 QPointF snapToGuide(KoPointerEvent *e, const QPointF &offset, bool useModifiers);
155 QPointF snapToGuide(const QPointF& pt, const QPointF &offset);
156
157 void slotUpdateDecorationVisibility();
158 void slotConfigChanged();
159
160protected:
161 void drawDecoration(QPainter& gc, const QRectF& updateRect, const KisCoordinatesConverter *converter,KisCanvas2* canvas) override;
162 void drawHandles(KisPaintingAssistantSP assistant, QPainter& gc, const KisCoordinatesConverter *converter);
163 void drawEditorWidget(KisPaintingAssistantSP assistant, QPainter& gc, const KisCoordinatesConverter *converter);
164
165private:
166 struct Private;
167 Private* const d;
168};
169
170#endif
virtual void drawDecoration(QPainter &gc, const QRectF &updateArea, const KisCoordinatesConverter *converter, KisCanvas2 *canvas)=0
KisSharedPtr< KisPaintingAssistantsDecoration > KisPaintingAssistantsDecorationSP
QIcon loadIcon(const QString &name)