Krita Source Code Documentation
Loading...
Searching...
No Matches
KisOnionSkinsDocker Class Reference

#include <KisOnionSkinsDocker.h>

+ Inheritance diagram for KisOnionSkinsDocker:

Public Member Functions

 KisOnionSkinsDocker (QWidget *parent=0)
 
QString observerName () override
 
void setCanvas (KoCanvasBase *canvas) override
 
void setViewManager (KisViewManager *kisview) override
 
void unsetCanvas () override
 
 ~KisOnionSkinsDocker () override
 
- Public Member Functions inherited from KisMainwindowObserver
 KisMainwindowObserver ()
 
 ~KisMainwindowObserver () override
 
- Public Member Functions inherited from KoCanvasObserverBase
 KoCanvasObserverBase ()
 
KoCanvasBaseobservedCanvas () const
 
void setObservedCanvas (KoCanvasBase *canvas)
 
void unsetObservedCanvas ()
 
virtual ~KoCanvasObserverBase ()
 

Private Slots

void changed ()
 
void slotFilteredColorsChanged ()
 
void slotShowAdditionalSettings (bool value)
 
void slotToggleOnionSkins ()
 
void slotUpdateIcons ()
 

Private Member Functions

void initEqualizerSettings (bool useDefaults=false)
 
void loadSettings ()
 

Private Attributes

class KisColorLabelMouseDragFilterm_dragFilter
 
KisEqualizerWidgetm_equalizerWidget
 
class KisColorLabelFilterGroupm_filterButtonGroup
 
KisActionm_toggleOnionSkinsAction
 
KisSignalCompressor m_updatesCompressor
 
Ui::OnionSkinsDocker * ui
 

Additional Inherited Members

Detailed Description

Definition at line 23 of file KisOnionSkinsDocker.h.

Constructor & Destructor Documentation

◆ KisOnionSkinsDocker()

KisOnionSkinsDocker::KisOnionSkinsDocker ( QWidget * parent = 0)
explicit

Definition at line 29 of file KisOnionSkinsDocker.cpp.

29 :
30 QDockWidget(i18n("Onion Skins"), parent),
31 ui(new Ui::OnionSkinsDocker),
34{
35 QWidget* mainWidget = new QWidget(this);
36 setWidget(mainWidget);
37
38 KisImageConfig config(true);
39 ui->setupUi(mainWidget);
40
41 mainWidget->setContentsMargins(10, 10, 10, 10);
42
43
44 ui->doubleTintFactor->setMinimum(0);
45 ui->doubleTintFactor->setMaximum(100);
46 KisSpinBoxI18nHelper::setText(ui->doubleTintFactor,
47 i18nc("{n} is the number value, % is the percent sign", "Tint: {n}%"));
48
49 ui->btnBackwardColor->setToolTip(i18n("Tint color for past frames"));
50 ui->btnForwardColor->setToolTip(i18n("Tint color for future frames"));
51
52
53 QVBoxLayout *layout = ui->slidersLayout;
54
56 connect(m_equalizerWidget, SIGNAL(sigConfigChanged()), &m_updatesCompressor, SLOT(start()));
59 });
60 layout->addWidget(m_equalizerWidget, 1);
61
62 connect(ui->btnBackwardColor, SIGNAL(changed(KoColor)), &m_updatesCompressor, SLOT(start()));
63 connect(ui->btnForwardColor, SIGNAL(changed(KoColor)), &m_updatesCompressor, SLOT(start()));
64 connect(ui->doubleTintFactor, SIGNAL(valueChanged(qreal)), &m_updatesCompressor, SLOT(start()));
65
66 connect(&m_updatesCompressor, SIGNAL(timeout()),
67 SLOT(changed()));
68
69
70 {
71 const bool isShown = config.showAdditionalOnionSkinsSettings();
72 ui->btnShowHide->setChecked(isShown);
73 connect(ui->btnShowHide, SIGNAL(toggled(bool)), SLOT(slotShowAdditionalSettings(bool)));
75 }
76
77 setEnabled(false);
78
79 {
83 m_filterButtonGroup->setExclusive(false);
85 QWidget* filterButtonContainer = ui->colorFilterGroupbox;
86 QLayout* filterButtonLayout = ui->filterButtons;
87 filterButtonLayout->setSpacing(2);
88 QVector<QColor> availableColors = scm.allColorLabels();
89 QSet<int> viableColors;
90 for (int i = 0; i < availableColors.count(); i++) {
91 KisColorLabelButton* colorLabelButton = new KisColorLabelButton(availableColors[i], 22, filterButtonContainer);
92 filterButtonLayout->addWidget(colorLabelButton);
93 m_filterButtonGroup->addButton(colorLabelButton, i);
94 colorLabelButton->installEventFilter(m_dragFilter);
95 viableColors << i;
96 }
97
99
100 connect(m_filterButtonGroup, SIGNAL(idToggled(int,bool)), this, SLOT(slotFilteredColorsChanged()));
101 connect(ui->colorFilterGroupbox, SIGNAL(toggled(bool)), this, SLOT(slotFilteredColorsChanged()));
102 connect(ui->resetFilter, SIGNAL(pressed()), m_filterButtonGroup, SLOT(reset()) );
103 }
104
105 loadSettings();
107
108 // this mostly hides the checkboxes since no filtering is done by default
110
111 resize(sizeHint());
112}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void setViableLabels(const QSet< int > &buttons)
void setMinimumRequiredChecked(int checkedBtns)
QVector< QColor > allColorLabels() const
static KisOnionSkinCompositor * instance()
class KisColorLabelMouseDragFilter * m_dragFilter
class KisColorLabelFilterGroup * m_filterButtonGroup
KisSignalCompressor m_updatesCompressor
Ui::OnionSkinsDocker * ui
void initEqualizerSettings(bool useDefaults=false)
void slotShowAdditionalSettings(bool value)
KisEqualizerWidget * m_equalizerWidget
KisAction * m_toggleOnionSkinsAction
void setText(QSpinBox *spinBox, const QStringView textTemplate)

References KisNodeViewColorScheme::allColorLabels(), changed(), KisOnionSkinCompositor::configChanged(), connect(), initEqualizerSettings(), KisOnionSkinCompositor::instance(), loadSettings(), m_dragFilter, m_equalizerWidget, m_filterButtonGroup, m_updatesCompressor, KisColorLabelFilterGroup::setMinimumRequiredChecked(), KisSpinBoxI18nHelper::setText(), KisColorLabelFilterGroup::setViableLabels(), KisImageConfig::showAdditionalOnionSkinsSettings(), KisEqualizerWidget::sigReset(), slotFilteredColorsChanged(), slotShowAdditionalSettings(), and ui.

◆ ~KisOnionSkinsDocker()

KisOnionSkinsDocker::~KisOnionSkinsDocker ( )
override

Definition at line 115 of file KisOnionSkinsDocker.cpp.

116{
117 delete ui;
118}

References ui.

Member Function Documentation

◆ changed

void KisOnionSkinsDocker::changed ( )
privateslot

Definition at line 188 of file KisOnionSkinsDocker.cpp.

189{
190 KisImageConfig config(false);
191
193 config.setNumberOfOnionSkins(v.maxDistance);
194
195 for (int i = -v.maxDistance; i <= v.maxDistance; i++) {
196 config.setOnionSkinOpacity(i, v.value[i] * 255.0 / 100.0);
197 config.setOnionSkinState(i, v.state[i]);
198 }
199
200 config.setOnionSkinTintFactor(ui->doubleTintFactor->value() * 255.0 / 100.0);
201 config.setOnionSkinTintColorBackward(ui->btnBackwardColor->color().toQColor());
202 config.setOnionSkinTintColorForward(ui->btnForwardColor->color().toQColor());
203
205}
qreal v
EqualizerValues getValues() const

References KisOnionSkinCompositor::configChanged(), KisEqualizerWidget::getValues(), KisOnionSkinCompositor::instance(), m_equalizerWidget, KisImageConfig::setNumberOfOnionSkins(), KisImageConfig::setOnionSkinOpacity(), KisImageConfig::setOnionSkinState(), KisImageConfig::setOnionSkinTintColorBackward(), KisImageConfig::setOnionSkinTintColorForward(), KisImageConfig::setOnionSkinTintFactor(), ui, and v.

◆ initEqualizerSettings()

void KisOnionSkinsDocker::initEqualizerSettings ( bool useDefaults = false)
private

Definition at line 226 of file KisOnionSkinsDocker.cpp.

227{
228 KisImageConfig config(true);
229
231 v.maxDistance = 10;
232
233 for (int i = -v.maxDistance; i <= v.maxDistance; i++) {
234 int value = config.onionSkinOpacity(i, useDefaults);
235
236 v.value.insert(i, qRound(value * 100.0 / 255.0));
237 v.state.insert(i, config.onionSkinState(i));
238 }
239
241}
float value(const T *src, size_t ch)
void setValues(const EqualizerValues &values)

References m_equalizerWidget, KisEqualizerWidget::EqualizerValues::maxDistance, KisImageConfig::onionSkinOpacity(), KisImageConfig::onionSkinState(), KisEqualizerWidget::setValues(), v, and value().

◆ loadSettings()

void KisOnionSkinsDocker::loadSettings ( )
private

Definition at line 207 of file KisOnionSkinsDocker.cpp.

208{
209 KisImageConfig config(true);
210
211 KisSignalsBlocker b(ui->doubleTintFactor,
212 ui->btnBackwardColor,
213 ui->btnForwardColor,
215
216 ui->doubleTintFactor->setValue(qRound(config.onionSkinTintFactor() * 100.0 / 255));
218 bcol.fromQColor(config.onionSkinTintColorBackward());
219 ui->btnBackwardColor->setColor(bcol);
220 bcol.fromQColor(config.onionSkinTintColorForward());
221 ui->btnForwardColor->setColor(bcol);
222
224}
static KoColorSpaceRegistry * instance()

References KoColor::fromQColor(), initEqualizerSettings(), KoColorSpaceRegistry::instance(), m_equalizerWidget, KisImageConfig::onionSkinTintColorBackward(), KisImageConfig::onionSkinTintColorForward(), KisImageConfig::onionSkinTintFactor(), and ui.

◆ observerName()

QString KisOnionSkinsDocker::observerName ( )
inlineoverridevirtual

Reimplemented from KoCanvasObserverBase.

Definition at line 31 of file KisOnionSkinsDocker.h.

31{ return "OnionSkinsDocker"; }

◆ setCanvas()

void KisOnionSkinsDocker::setCanvas ( KoCanvasBase * canvas)
overridevirtual

re-implement this method in your canvas observer. It will be called whenever a canvas becomes active. Note that you are responsible for not connecting more than one time to the signals of a canvas or any of the QObjects you can access through the canvas.

Implements KoCanvasObserverBase.

Definition at line 120 of file KisOnionSkinsDocker.cpp.

121{
122 setEnabled(canvas != 0);
123}

◆ setViewManager()

void KisOnionSkinsDocker::setViewManager ( KisViewManager * kisview)
overridevirtual

Implements KisMainwindowObserver.

Definition at line 130 of file KisOnionSkinsDocker.cpp.

131{
132 KisActionManager *actionManager = view->actionManager();
133
134 m_toggleOnionSkinsAction = actionManager->createAction("toggle_onion_skin");
135 connect(m_toggleOnionSkinsAction, SIGNAL(triggered()), SLOT(slotToggleOnionSkins()));
136
138 connect(view->mainWindow(), SIGNAL(themeChanged()), this, SLOT(slotUpdateIcons()));
139}
A KisActionManager class keeps track of KisActions. These actions are always associated with the GUI....
KisAction * createAction(const QString &name)

References KisViewManager::actionManager(), connect(), KisActionManager::createAction(), m_toggleOnionSkinsAction, KisViewManager::mainWindow(), slotToggleOnionSkins(), and slotUpdateIcons().

◆ slotFilteredColorsChanged

void KisOnionSkinsDocker::slotFilteredColorsChanged ( )
privateslot

Definition at line 146 of file KisOnionSkinsDocker.cpp.

147{
148 // what colors are selected to filter??
149 QSet<int> selectedFilterColors = m_filterButtonGroup->getActiveLabels();
150
151 // show all colors if the filter is off and ignore the checkboxes
152 if(ui->colorFilterGroupbox->isChecked() == false) {
153 selectedFilterColors.clear();
154 selectedFilterColors << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8; // show everything
155 }
156
157 m_filterButtonGroup->setAllVisibility(ui->colorFilterGroupbox->isChecked());
158 ui->resetFilter->setVisible(ui->colorFilterGroupbox->isChecked());
159
160 // existing code
163}
void setAllVisibility(const bool vis)
void setColorLabelFilter(QSet< int > colors)

References KisOnionSkinCompositor::configChanged(), KisColorLabelFilterGroup::getActiveLabels(), KisOnionSkinCompositor::instance(), m_filterButtonGroup, KisColorLabelFilterGroup::setAllVisibility(), KisOnionSkinCompositor::setColorLabelFilter(), and ui.

◆ slotShowAdditionalSettings

void KisOnionSkinsDocker::slotShowAdditionalSettings ( bool value)
privateslot

Definition at line 172 of file KisOnionSkinsDocker.cpp.

173{
174 ui->lblPrevColor->setVisible(value);
175 ui->lblNextColor->setVisible(value);
176
177 ui->btnBackwardColor->setVisible(value);
178 ui->btnForwardColor->setVisible(value);
179
180 ui->doubleTintFactor->setVisible(value);
181
182 QIcon icon = KisIconUtils::loadIcon(value ? "arrow-down" : "arrow-up");
183 ui->btnShowHide->setIcon(icon);
184
186}
void setShowAdditionalOnionSkinsSettings(bool value)
QIcon loadIcon(const QString &name)

References KisIconUtils::loadIcon(), KisImageConfig::setShowAdditionalOnionSkinsSettings(), ui, and value().

◆ slotToggleOnionSkins

void KisOnionSkinsDocker::slotToggleOnionSkins ( )
privateslot

◆ slotUpdateIcons

void KisOnionSkinsDocker::slotUpdateIcons ( )
privateslot

Definition at line 165 of file KisOnionSkinsDocker.cpp.

166{
168 m_toggleOnionSkinsAction->setIcon(KisIconUtils::loadIcon("onion_skin_options"));
169 }
170}

References KisIconUtils::loadIcon(), and m_toggleOnionSkinsAction.

◆ unsetCanvas()

void KisOnionSkinsDocker::unsetCanvas ( )
overridevirtual

Re-implement to notify the observer that its canvas is no longer among the living. The daisies, it is pushing up. This means you don't have to disconnect, it's dead.

The old canvas should be deleted already, so if you stored a pointer to it, don't touch!

Note that currently there is a bug where in certain specific circumstances unsetCanvas can be called when it shouldn't, see for example KWStatisticsDocker for a workaround for this problem.

Implements KoCanvasObserverBase.

Definition at line 125 of file KisOnionSkinsDocker.cpp.

126{
127 setCanvas(0);
128}
void setCanvas(KoCanvasBase *canvas) override

References setCanvas().

Member Data Documentation

◆ m_dragFilter

class KisColorLabelMouseDragFilter* KisOnionSkinsDocker::m_dragFilter
private

Definition at line 44 of file KisOnionSkinsDocker.h.

◆ m_equalizerWidget

KisEqualizerWidget* KisOnionSkinsDocker::m_equalizerWidget
private

Definition at line 40 of file KisOnionSkinsDocker.h.

◆ m_filterButtonGroup

class KisColorLabelFilterGroup* KisOnionSkinsDocker::m_filterButtonGroup
private

Definition at line 43 of file KisOnionSkinsDocker.h.

◆ m_toggleOnionSkinsAction

KisAction* KisOnionSkinsDocker::m_toggleOnionSkinsAction
private

Definition at line 41 of file KisOnionSkinsDocker.h.

◆ m_updatesCompressor

KisSignalCompressor KisOnionSkinsDocker::m_updatesCompressor
private

Definition at line 39 of file KisOnionSkinsDocker.h.

◆ ui

Ui::OnionSkinsDocker* KisOnionSkinsDocker::ui
private

Definition at line 37 of file KisOnionSkinsDocker.h.


The documentation for this class was generated from the following files: