Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_control_frame.cpp
Go to the documentation of this file.
1/*
2 * kis_control_frame.cc - part of Krita
3 *
4 * SPDX-FileCopyrightText: 1999 Matthias Elter <elter@kde.org>
5 * SPDX-FileCopyrightText: 2003 Patrick Julien <freak@codepimps.org>
6 * SPDX-FileCopyrightText: 2004 Sven Langkamp <sven.langkamp@gmail.com>
7 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org>
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 */
11
12#include "kis_control_frame.h"
13
14#include <stdlib.h>
15
16#include <QApplication>
17#include <QLayout>
18#include <QTabWidget>
19#include <QWidget>
20#include <QEvent>
21#include <QHBoxLayout>
22#include <QWidgetAction>
23
24#include <klocalizedstring.h>
25#include <QAction>
26#include <kactioncollection.h>
27#include <KoDualColorButton.h>
29#include <KoResourceServer.h>
32#include <kis_image.h>
33
34#include <resources/KoPattern.h>
37
39
41#include "KisViewManager.h"
42#include "kis_config.h"
43#include "kis_paintop_box.h"
44#include "KisDockerHud.h"
45#include "kis_custom_pattern.h"
49#include <kis_canvas2.h>
50#include "kis_action_registry.h"
51
52
53KisControlFrame::KisControlFrame(KisViewManager *view, QWidget *parent, const char* name)
54 : QObject(view)
55 , m_viewManager(view)
56 , m_checkersPainter(4)
57{
58 setObjectName(name);
59
61 m_patternWidget->setToolTip(i18n("Fill Patterns"));
62 m_patternWidget->setFixedSize(32, 32);
63
65 m_gradientWidget->setToolTip(i18n("Fill Gradients"));
66 m_gradientWidget->setFixedSize(32, 32);
67}
68
69void KisControlFrame::setup(QWidget *parent)
70{
73
74 QWidgetAction *action = new QWidgetAction(this);
75 action->setText(i18n("&Patterns"));
77 action->setDefaultWidget(m_patternWidget);
78 connect(action, SIGNAL(triggered()), m_patternWidget, SLOT(showPopupWidget()));
79 m_patternChooserPopup->addAction(action);
80
81 action = new QWidgetAction(this);
82 action->setText(i18n("&Gradients"));
84 action->setDefaultWidget(m_gradientWidget);
85 connect(action, SIGNAL(triggered()), m_gradientWidget, SLOT(showPopupWidget()));
86 m_gradientChooserPopup->addAction(action);
87
88
89 // XXX: KOMVC we don't have a canvas here yet, needs a setImageView
90 const KoColorDisplayRendererInterface *displayRenderer = \
91 KisDisplayColorConverter::dumbConverterInstance()->displayRendererInterface();
93 m_viewManager->canvasResourceProvider()->bgColor(), displayRenderer,
95 m_dual->setPopDialog(true);
96 action = new QWidgetAction(this);
97 action->setText(i18n("&Choose foreground and background colors"));
98 m_viewManager->actionCollection()->addAction("dual", action);
99 action->setDefaultWidget(m_dual);
100 connect(m_dual, SIGNAL(foregroundColorChanged(KoColor)), m_viewManager->canvasResourceProvider(), SLOT(slotSetFGColor(KoColor)));
101 connect(m_dual, SIGNAL(backgroundColorChanged(KoColor)), m_viewManager->canvasResourceProvider(), SLOT(slotSetBGColor(KoColor)));
102 connect(m_viewManager->canvasResourceProvider(), SIGNAL(sigBGColorChanged(KoColor)), m_dual, SLOT(setBackgroundColor(KoColor)));
103 connect(m_viewManager->canvasResourceProvider(), SIGNAL(sigFGColorChanged(KoColor)), m_dual, SLOT(setForegroundColor(KoColor)));
104 connect(m_viewManager->canvasResourceProvider(), SIGNAL(sigFGColorChanged(KoColor)), m_gradientWidget, SLOT(update()));
105 connect(m_viewManager->canvasResourceProvider(), SIGNAL(sigBGColorChanged(KoColor)), m_gradientWidget, SLOT(update()));
106 m_dual->setFixedSize(28, 28);
107 connect(m_viewManager, SIGNAL(viewChanged()), SLOT(slotUpdateDisplayRenderer()));
108
109 m_paintopBox = new KisPaintopBox(m_viewManager, parent, "paintopbox");
110
111 action = new QWidgetAction(this);
112 action->setText(i18n("&Painter's Tools"));
113 m_viewManager->actionCollection()->addAction("paintops", action);
114 action->setDefaultWidget(m_paintopBox);
115
116 action = new QWidgetAction(this);
117 action->setText(i18n("&Open Foreground color selector"));
118 m_viewManager->actionCollection()->addAction("chooseForegroundColor", action);
119 connect(action, SIGNAL(triggered()), m_dual, SLOT(openForegroundDialog()));
120
121 action = new QWidgetAction(this);
122 action->setText(i18n("&Open Background color selector"));
123 m_viewManager->actionCollection()->addAction("chooseBackgroundColor", action);
124 connect(action, SIGNAL(triggered()), m_dual, SLOT(openBackgroundDialog()));
125
127
128 action = new QWidgetAction(this);
129 action->setText(i18n("&Docker Box"));
130 m_viewManager->actionCollection()->addAction("dockerBox", action);
131 action->setDefaultWidget(m_dockerPopupButton);
132}
133
135{
139 m_viewManager->canvasBase()->image()->disconnect(m_dual);
140 connect(m_viewManager->canvasBase()->image(), SIGNAL(sigColorSpaceChanged(const KoColorSpace*)), m_dual, SLOT(setColorSpace(const KoColorSpace*)), Qt::UniqueConnection);
141 } else if (m_viewManager->viewCount()==0) {
143 }
144}
145
152
154{
156
157 QImage icon(iconSize, QImage::Format_ARGB32);
158
159 {
160 QPainter gc(&icon);
161 m_checkersPainter.paint(gc, QRect(QPoint(), iconSize));
162 gc.drawImage(QPoint(),
163 gradient->generatePreview(iconSize.width(), iconSize.height(),
165 resourceManager()->canvasResourcesInterface()));
166 }
167
168
170}
171
173{
176 m_patternChooserPopup->setMinimumSize(450, 400);
177 m_patternChooserPopup->setObjectName("pattern_chooser_popup");
178 QHBoxLayout * l2 = new QHBoxLayout(m_patternChooserPopup);
179 l2->setObjectName("patternpopuplayout");
180
181 m_patternsTab = new QTabWidget(m_patternChooserPopup);
182 m_patternsTab->setObjectName("patternstab");
183 m_patternsTab->setFocusPolicy(Qt::NoFocus);
184 l2->addWidget(m_patternsTab);
185
187 m_patternChooser->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
188 QWidget *patternChooserPage = new QWidget(m_patternChooserPopup);
189 QHBoxLayout *patternChooserPageLayout = new QHBoxLayout(patternChooserPage);
190 patternChooserPageLayout->addWidget(m_patternChooser);
191 m_patternsTab->addTab(patternChooserPage, i18n("Patterns"));
192
193 KisCustomPattern *customPatterns = new KisCustomPattern(0, "custompatterns",
194 i18n("Custom Pattern"), m_viewManager);
195 m_patternsTab->addTab(customPatterns, i18n("Custom Pattern"));
196
197 connect(m_patternChooser, SIGNAL(resourceSelected(KoResourceSP )),
198 view->canvasResourceProvider(), SLOT(slotPatternActivated(KoResourceSP )));
199
200 connect(customPatterns, SIGNAL(activatedResource(KoResourceSP )),
201 view->canvasResourceProvider(), SLOT(slotPatternActivated(KoResourceSP )));
202
203 connect(customPatterns, SIGNAL(patternAdded(KoResourceSP)), m_patternChooser, SLOT(setCurrentPattern(KoResourceSP)));
204 connect(customPatterns, SIGNAL(patternUpdated(KoResourceSP)), m_patternChooser, SLOT(setCurrentPattern(KoResourceSP)));
205
208 this,
210
214 }
215
217
218
219}
220
222{
226 }
227
229 m_gradientChooserPopup->setObjectName("gradient_chooser_popup");
230 QHBoxLayout * l2 = new QHBoxLayout(m_gradientChooserPopup);
231 l2->setObjectName("gradientpopuplayout");
232
233 m_gradientTab = new QTabWidget(m_gradientChooserPopup);
234 m_gradientTab->setObjectName("gradientstab");
235 m_gradientTab->setFocusPolicy(Qt::NoFocus);
236 l2->addWidget(m_gradientTab);
237
240 QWidget *gradientChooserPage = new QWidget(m_gradientChooserPopup);
241 QHBoxLayout *gradientChooserPageLayout = new QHBoxLayout(gradientChooserPage);
242 gradientChooserPageLayout->addWidget(m_gradientChooser);
243 m_gradientTab->addTab(gradientChooserPage, i18n("Gradients"));
244
245 connect(m_gradientChooser, SIGNAL(resourceSelected(KoResourceSP)),
246 view->canvasResourceProvider(), SLOT(slotGradientActivated(KoResourceSP)));
247 connect (view->mainWindowAsQWidget(), SIGNAL(themeChanged()), m_gradientChooser, SLOT(slotUpdateIcons()));
248 connect(view->canvasResourceProvider(), SIGNAL(sigGradientChanged(KoAbstractGradientSP)),
250 connect(m_gradientChooser, SIGNAL(gradientEdited(KoAbstractGradientSP)),
252
253
254 // set the Foreground to Transparent gradient as default on startup
256 QVector<KoResourceSP> resources = resModel.resourcesForFilename("Foreground to Transparent.svg");
257 if (resources.size() > 0) {
259 }
260
263 }
265
266}
267
268
270{
271 KConfigGroup grp = KSharedConfig::openConfig()->group("krita").group("Toolbar BrushesAndStuff");
272 int iconsize = grp.readEntry("IconSize", 22);
273 // NOTE: buttonsize should be the same value as the one used in ktoolbar for all QToolButton
274 int buttonsize = grp.readEntry("ButtonSize", 32);
275
277 m_dockerPopupButton->setIcon(KisIconUtils::loadIcon("view-list-details"));
278 m_dockerPopupButton->setToolTip(i18n("Docker box"));
279 m_dockerPopupButton->setFixedSize(buttonsize, buttonsize);
280 m_dockerPopupButton->setIconSize(QSize(iconsize, iconsize));
281 m_dockerPopupButton->setAutoRaise(true);
283
284 m_dockerPopup = new KisDockerHud(i18n("Toolbar Docker Box"), "toolbar");
285 // Set a reasonable minimum size so that dockers capable of being tiny are not,
286 // but are not too big either
287 m_dockerPopup->setMinimumHeight(300);
288 m_dockerPopup->setMinimumWidth(300);
290
291 QWidgetAction* action = new QWidgetAction(this);
292 KisActionRegistry::instance()->propertizeAction("docker_box", action);
293 view->actionCollection()->addAction("docker_box", action);
294 connect(action, SIGNAL(triggered()), m_dockerPopupButton, SLOT(showPopupWidget()));
295 m_dockerPopup->addAction(action);
296}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
int iconSize(qreal width, qreal height)
bool propertizeAction(const QString &name, QAction *a)
static KisActionRegistry * instance()
KisDisplayColorConverter displayColorConverter
KisImageWSP image() const
KoCanvasResourceProvider * resourceManager()
void slotPatternActivated(KoResourceSP pattern)
void sigPatternChanged(KoPatternSP)
void slotGradientActivated(KoResourceSP gradient)
KisIconWidget * m_patternWidget
QWidget * m_gradientChooserPopup
void createGradientsChooser(KisViewManager *view)
KoCheckerBoardPainter m_checkersPainter
void createDockerBox(KisViewManager *view)
KisDockerHud * m_dockerPopup
void createPatternsChooser(KisViewManager *view)
KisPaintopBox * m_paintopBox
KisGradientChooser * m_gradientChooser
void slotSetPattern(KoPatternSP pattern)
KisControlFrame(KisViewManager *view, QWidget *parent=0, const char *name=0)
KisViewManager * m_viewManager
void slotSetGradient(KoAbstractGradientSP gradient)
KisPatternChooser * m_patternChooser
QWidget * m_patternChooserPopup
QTabWidget * m_patternsTab
KoDualColorButton * m_dual
QTabWidget * m_gradientTab
KisIconWidget * m_gradientWidget
KisIconWidget * m_dockerPopupButton
void setup(QWidget *parent)
KoColorDisplayRendererInterface * displayRendererInterface() const
void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
void setCurrentResource(KoResourceSP resource)
KoResourceSP currentResource(bool includeHidden=false)
QSize preferredIconSize() const
void setThumbnail(const QImage &thumbnail)
const KoColorSpace * colorSpace() const
Q_INVOKABLE QAction * addAction(const QString &name, QAction *action)
void setCurrentItem(int row)
void setCurrentPattern(KoResourceSP resource)
KoResourceSP currentResource(bool includeHidden=false)
void setPopupWidget(QWidget *widget)
void setArrowVisible(bool v)
The KisResourceModel class provides the main access to resources. It is possible to filter the resour...
QVector< KoResourceSP > resourcesForFilename(QString fileName) const
int viewCount() const
KisCanvas2 * canvasBase() const
Return the canvas base class.
virtual KisKActionCollection * actionCollection() const
QWidget * mainWindowAsQWidget() const
KisCanvasResourceProvider * canvasResourceProvider()
KoCanvasResourcesInterfaceSP canvasResourcesInterface() const
void paint(QPainter &painter, const QRectF &rect, const QPointF &patternOrigin) const
A widget for selecting two related colors.
void setPopDialog(bool popDialog)
void setColorSpace(const KoColorSpace *cs)
setColorSpace set ColorSpace so we can lock the selector. Right now this'll be changed per view-chang...
void setDisplayRenderer(const KoColorDisplayRendererInterface *displayRenderer=KoDumbColorDisplayRenderer::instance())
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
QIcon loadIcon(const QString &name)
const QString Patterns
const QString Gradients