Krita Source Code Documentation
Loading...
Searching...
No Matches
dlg_feather_selection.cc
Go to the documentation of this file.
1/*
2 * dlg_feather_selection.cc - part of Krita
3 *
4 * SPDX-FileCopyrightText: 2009 Edward Apap <schumifer@hotmail.com>
5 * SPDX-FileCopyrightText: 2013 Juan Palacios <jpalaciosdev@gmail.com>
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
11
12#include <KoUnit.h>
13#include <kis_size_group.h>
14#include <KisViewManager.h>
15#include <kis_image.h>
17
18
20 : KisOperationUIWidget(i18n("Feather Selection"), parent)
21 , m_radius(config->getInt("radius", 5))
22{
23 Q_ASSERT(view);
24 KisImageWSP image = view->image();
25 Q_ASSERT(image);
26 m_resolution = image->yRes();
27
28 setupUi(this);
29
30 spbRadius->setValue(m_radius);
31 spbRadius->setFocus();
32 spbRadius->setVisible(true);
33 spbRadiusDouble->setVisible(false);
34
35 cmbUnit->addItems(KoUnit::listOfUnitNameForUi());
36 cmbUnit->setCurrentIndex(KoUnit(KoUnit::Pixel).indexInListForUi());
37
38 // ensure that both spinboxes request the same horizontal size
39 KisSizeGroup *spbGroup = new KisSizeGroup(this);
40 spbGroup->addWidget(spbRadius);
41 spbGroup->addWidget(spbRadiusDouble);
42
43 connect(spbRadius, SIGNAL(valueChanged(int)), this, SLOT(slotRadiusChanged(int)));
44 connect(spbRadiusDouble, SIGNAL(valueChanged(double)), this, SLOT(slotRadiusChanged(double)));
45 connect(cmbUnit, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUnitChanged(int)));
46}
47
49{
50 slotRadiusChanged((double) radius);
51}
52
54{
55 const KoUnit selectedUnit = KoUnit::fromListForUi(cmbUnit->currentIndex());
56 const double resRadius = (selectedUnit == KoUnit(KoUnit::Pixel)) ? radius : (radius * m_resolution);
57 m_radius = qRound(selectedUnit.fromUserValue(resRadius));
58}
59
61{
63
64 const KoUnit selectedUnit = KoUnit::fromListForUi(index);
65 if (selectedUnit != KoUnit(KoUnit::Pixel)) {
66 spbRadius->setVisible(false);
67 spbRadiusDouble->setVisible(true);
68 } else {
69 spbRadius->setVisible(true);
70 spbRadiusDouble->setVisible(false);
71 }
72}
73
75{
76 const KoUnit selectedUnit = KoUnit::fromListForUi(cmbUnit->currentIndex());
77 if (selectedUnit != KoUnit(KoUnit::Pixel)) {
78 spbRadiusDouble->blockSignals(true);
79 spbRadiusDouble->setValue(selectedUnit.toUserValue(value / m_resolution));
80 spbRadiusDouble->blockSignals(false);
81 } else {
82 const int finalValue = (selectedUnit == KoUnit(KoUnit::Point)) ? qRound(value / m_resolution) : value;
83 spbRadius->blockSignals(true);
84 spbRadius->setValue(selectedUnit.toUserValue(finalValue));
85 spbRadius->blockSignals(false);
86 }
87}
88
90{
91 config->setProperty("radius", m_radius);
92}
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
double yRes() const
void addWidget(QWidget *widget)
KisImageWSP image() const
Return the image this view is displaying.
qreal fromUserValue(qreal value) const
Definition KoUnit.cpp:201
static KoUnit fromListForUi(int index, ListOptions listOptions=ListAll, qreal factor=1.0)
Definition KoUnit.cpp:80
@ Point
Postscript point, 1/72th of an Inco.
Definition KoUnit.h:76
@ Pixel
Definition KoUnit.h:82
static QStringList listOfUnitNameForUi(ListOptions listOptions=ListAll)
Returns the list of unit types for the UI, controlled with the given listOptions.
Definition KoUnit.cpp:69
qreal toUserValue(qreal ptValue, bool rounding=true) const
Definition KoUnit.cpp:186
void getConfiguration(KisOperationConfigurationSP config) override
void updateRadiusUIValue(double value)
void slotRadiusChanged(int radius)
WdgFeatherSelection(QWidget *parent, KisViewManager *view, KisOperationConfigurationSP config)
void slotUnitChanged(int index)