Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_phong_bumpmap_config_widget.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010-2011 José Luis Vergara <pentalis@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
9#include <kis_size_group.h>
11#include "KoChannelInfo.h"
12#include "KoColorSpace.h"
14
16 : KisConfigWidget(parent, f)
17 , m_device(dev)
18{
19 Q_ASSERT(m_device);
20 m_page = new KisPhongBumpmapWidget(this);
21
22 KisSizeGroup *matPropLabelsGroup = new KisSizeGroup(this);
23 matPropLabelsGroup->addWidget(m_page->lblAmbientReflectivity);
24 matPropLabelsGroup->addWidget(m_page->lblDiffuseReflectivity);
25 matPropLabelsGroup->addWidget(m_page->lblSpecularReflectivity);
26 matPropLabelsGroup->addWidget(m_page->lblSpecularShinyExp);
27
28 //Let widgets warn the preview of when they are updated
29 connect(m_page->azimuthAngleSelector1, SIGNAL(angleChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
30 connect(m_page->azimuthAngleSelector2, SIGNAL(angleChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
31 connect(m_page->azimuthAngleSelector3, SIGNAL(angleChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
32 connect(m_page->azimuthAngleSelector4, SIGNAL(angleChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
33
34 connect(m_page->lightKColorCombo1, SIGNAL(currentIndexChanged(int)), SIGNAL(sigConfigurationItemChanged()));
35 connect(m_page->lightKColorCombo2, SIGNAL(currentIndexChanged(int)), SIGNAL(sigConfigurationItemChanged()));
36 connect(m_page->lightKColorCombo3, SIGNAL(currentIndexChanged(int)), SIGNAL(sigConfigurationItemChanged()));
37 connect(m_page->lightKColorCombo4, SIGNAL(currentIndexChanged(int)), SIGNAL(sigConfigurationItemChanged()));
38
39 connect(m_page->elevationAngleSelector1, SIGNAL(angleChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
40 connect(m_page->elevationAngleSelector2, SIGNAL(angleChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
41 connect(m_page->elevationAngleSelector3, SIGNAL(angleChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
42 connect(m_page->elevationAngleSelector4, SIGNAL(angleChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
43
44 connect(m_page->useNormalMap, SIGNAL(toggled(bool)), SIGNAL(sigConfigurationItemChanged()));
45 connect(m_page->diffuseReflectivityGroup, SIGNAL(toggled(bool)), SIGNAL(sigConfigurationItemChanged()));
46 connect(m_page->specularReflectivityGroup, SIGNAL(toggled(bool)), SIGNAL(sigConfigurationItemChanged()));
47
48 connect(m_page->ambientReflectivityKisDoubleSliderSpinBox, SIGNAL(valueChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
49 connect(m_page->diffuseReflectivityKisDoubleSliderSpinBox, SIGNAL(valueChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
50 connect(m_page->specularReflectivityKisDoubleSliderSpinBox, SIGNAL(valueChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
51 connect(m_page->shininessExponentKisSliderSpinBox, SIGNAL(valueChanged(int)), SIGNAL(sigConfigurationItemChanged()));
52
53 connect(m_page->heightChannelComboBox, SIGNAL(currentIndexChanged(int)), SIGNAL(sigConfigurationItemChanged()));
54
55 connect(m_page->lightSourceGroupBox1, SIGNAL(toggled(bool)), SIGNAL(sigConfigurationItemChanged()));
56 connect(m_page->lightSourceGroupBox2, SIGNAL(toggled(bool)), SIGNAL(sigConfigurationItemChanged()));
57 connect(m_page->lightSourceGroupBox3, SIGNAL(toggled(bool)), SIGNAL(sigConfigurationItemChanged()));
58 connect(m_page->lightSourceGroupBox4, SIGNAL(toggled(bool)), SIGNAL(sigConfigurationItemChanged()));
59
60
61 QVBoxLayout *l = new QVBoxLayout(this);
62 Q_CHECK_PTR(l);
63
64 l->addWidget(m_page);
65
66 /* fill in the channel chooser */
68 for (quint8 ch = 0; ch < m_device->colorSpace()->colorChannelCount(); ch++)
69 m_page->heightChannelComboBox->addItem(channels.at(ch)->name());
70
71 connect(m_page->useNormalMap, SIGNAL(toggled(bool)), this, SLOT(slotDisableHeightChannelCombobox(bool)) );
72
73
74}
75
77{
78 if (!config) return;
79
80 QVariant tempcolor;
81 if (config->getBool(USE_NORMALMAP_IS_ENABLED)) {
82 m_page->heightChannelComboBox->setEnabled(false);
83 } else {
84 m_page->heightChannelComboBox->setEnabled(true);
85 }
86 m_page->ambientReflectivityKisDoubleSliderSpinBox->setValue( config->getDouble(PHONG_AMBIENT_REFLECTIVITY) );
87 m_page->diffuseReflectivityKisDoubleSliderSpinBox->setValue( config->getDouble(PHONG_DIFFUSE_REFLECTIVITY) );
88 m_page->specularReflectivityKisDoubleSliderSpinBox->setValue( config->getDouble(PHONG_SPECULAR_REFLECTIVITY) );
89 m_page->shininessExponentKisSliderSpinBox->setValue( config->getInt(PHONG_SHINYNESS_EXPONENT) );
90 m_page->useNormalMap->setChecked( config->getBool(USE_NORMALMAP_IS_ENABLED) );
91 m_page->diffuseReflectivityGroup->setChecked( config->getBool(PHONG_DIFFUSE_REFLECTIVITY_IS_ENABLED) );
92 m_page->specularReflectivityGroup->setChecked( config->getBool(PHONG_SPECULAR_REFLECTIVITY_IS_ENABLED) );
93 // NOTE: Indexes are off by 1 simply because arrays start at 0 and the GUI naming scheme started at 1
94 m_page->lightSourceGroupBox1->setChecked( config->getBool(PHONG_ILLUMINANT_IS_ENABLED[0]) );
95 m_page->lightSourceGroupBox2->setChecked( config->getBool(PHONG_ILLUMINANT_IS_ENABLED[1]) );
96 m_page->lightSourceGroupBox3->setChecked( config->getBool(PHONG_ILLUMINANT_IS_ENABLED[2]) );
97 m_page->lightSourceGroupBox4->setChecked( config->getBool(PHONG_ILLUMINANT_IS_ENABLED[3]) );
98 config->getProperty(PHONG_ILLUMINANT_COLOR[0], tempcolor);
99 m_page->lightKColorCombo1->setColor(tempcolor.value<QColor>());
100 config->getProperty(PHONG_ILLUMINANT_COLOR[1], tempcolor);
101 m_page->lightKColorCombo2->setColor(tempcolor.value<QColor>());
102 config->getProperty(PHONG_ILLUMINANT_COLOR[2], tempcolor);
103 m_page->lightKColorCombo3->setColor(tempcolor.value<QColor>());
104 config->getProperty(PHONG_ILLUMINANT_COLOR[3], tempcolor);
105 m_page->lightKColorCombo4->setColor(tempcolor.value<QColor>());
106 m_page->azimuthAngleSelector1->setAngle( config->getDouble(PHONG_ILLUMINANT_AZIMUTH[0]) );
107 m_page->azimuthAngleSelector2->setAngle( config->getDouble(PHONG_ILLUMINANT_AZIMUTH[1]) );
108 m_page->azimuthAngleSelector3->setAngle( config->getDouble(PHONG_ILLUMINANT_AZIMUTH[2]) );
109 m_page->azimuthAngleSelector4->setAngle( config->getDouble(PHONG_ILLUMINANT_AZIMUTH[3]) );
110 m_page->elevationAngleSelector1->setAngle( config->getDouble(PHONG_ILLUMINANT_INCLINATION[0]) );
111 m_page->elevationAngleSelector2->setAngle( config->getDouble(PHONG_ILLUMINANT_INCLINATION[1]) );
112 m_page->elevationAngleSelector3->setAngle( config->getDouble(PHONG_ILLUMINANT_INCLINATION[2]) );
113 m_page->elevationAngleSelector4->setAngle( config->getDouble(PHONG_ILLUMINANT_INCLINATION[3]) );
114}
115
117{
119 config->setProperty(PHONG_HEIGHT_CHANNEL, m_page->heightChannelComboBox->currentText());
120 config->setProperty(USE_NORMALMAP_IS_ENABLED, m_page->useNormalMap->isChecked());
121
122 config->setProperty(PHONG_AMBIENT_REFLECTIVITY, m_page->ambientReflectivityKisDoubleSliderSpinBox->value());
123 config->setProperty(PHONG_DIFFUSE_REFLECTIVITY, m_page->diffuseReflectivityKisDoubleSliderSpinBox->value());
124 config->setProperty(PHONG_SPECULAR_REFLECTIVITY, m_page->specularReflectivityKisDoubleSliderSpinBox->value());
125 config->setProperty(PHONG_SHINYNESS_EXPONENT, m_page->shininessExponentKisSliderSpinBox->value());
126 config->setProperty(PHONG_DIFFUSE_REFLECTIVITY_IS_ENABLED, m_page->diffuseReflectivityGroup->isChecked());
127 config->setProperty(PHONG_SPECULAR_REFLECTIVITY_IS_ENABLED, m_page->specularReflectivityGroup->isChecked());
128 //config->setProperty(PHONG_SHINYNESS_EXPONENT_IS_ENABLED, m_page->specularReflectivityCheckBox->isChecked());
129 // Indexes are off by 1 simply because arrays start at 0 and the GUI naming scheme started at 1
130 config->setProperty(PHONG_ILLUMINANT_IS_ENABLED[0], m_page->lightSourceGroupBox1->isChecked());
131 config->setProperty(PHONG_ILLUMINANT_IS_ENABLED[1], m_page->lightSourceGroupBox2->isChecked());
132 config->setProperty(PHONG_ILLUMINANT_IS_ENABLED[2], m_page->lightSourceGroupBox3->isChecked());
133 config->setProperty(PHONG_ILLUMINANT_IS_ENABLED[3], m_page->lightSourceGroupBox4->isChecked());
134 config->setProperty(PHONG_ILLUMINANT_COLOR[0], m_page->lightKColorCombo1->color());
135 config->setProperty(PHONG_ILLUMINANT_COLOR[1], m_page->lightKColorCombo2->color());
136 config->setProperty(PHONG_ILLUMINANT_COLOR[2], m_page->lightKColorCombo3->color());
137 config->setProperty(PHONG_ILLUMINANT_COLOR[3], m_page->lightKColorCombo4->color());
138 config->setProperty(PHONG_ILLUMINANT_AZIMUTH[0], m_page->azimuthAngleSelector1->angle());
139 config->setProperty(PHONG_ILLUMINANT_AZIMUTH[1], m_page->azimuthAngleSelector2->angle());
140 config->setProperty(PHONG_ILLUMINANT_AZIMUTH[2], m_page->azimuthAngleSelector3->angle());
141 config->setProperty(PHONG_ILLUMINANT_AZIMUTH[3], m_page->azimuthAngleSelector4->angle());
142 config->setProperty(PHONG_ILLUMINANT_INCLINATION[0], m_page->elevationAngleSelector1->angle());
143 config->setProperty(PHONG_ILLUMINANT_INCLINATION[1], m_page->elevationAngleSelector2->angle());
144 config->setProperty(PHONG_ILLUMINANT_INCLINATION[2], m_page->elevationAngleSelector3->angle());
145 config->setProperty(PHONG_ILLUMINANT_INCLINATION[3], m_page->elevationAngleSelector4->angle());
146
147 // Read configuration
148 /*
149 QMap<QString, QVariant> rofl = QMap<QString, QVariant>(config->getProperties());
150
151 QMap<QString, QVariant>::const_iterator i;
152 for (i = rofl.constBegin(); i != rofl.constEnd(); ++i)
153 dbgKrita << i.key() << ":" << i.value();
154 */
155 return config;
156}
157
159 if (normalmapchecked) {
160 m_page->heightChannelComboBox->setEnabled(false);
161 } else {
162 m_page->heightChannelComboBox->setEnabled(true);
163 }
164}
165
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void sigConfigurationItemChanged()
static KisResourcesInterfaceSP instance()
const KoColorSpace * colorSpace() const
KisPropertiesConfigurationSP configuration() const override
void setConfiguration(const KisPropertiesConfigurationSP config) override
KisPhongBumpmapConfigWidget(const KisPaintDeviceSP dev, QWidget *parent, Qt::WindowFlags f=Qt::WindowFlags())
void slotDisableHeightChannelCombobox(bool normalmapchecked)
void addWidget(QWidget *widget)
QList< KoChannelInfo * > channels
const QString PHONG_SPECULAR_REFLECTIVITY_IS_ENABLED
const QString PHONG_DIFFUSE_REFLECTIVITY_IS_ENABLED
const QString PHONG_HEIGHT_CHANNEL
const QString PHONG_ILLUMINANT_AZIMUTH[]
const QString PHONG_ILLUMINANT_INCLINATION[]
const QString PHONG_ILLUMINANT_COLOR[]
const QString PHONG_SHINYNESS_EXPONENT
const QString PHONG_DIFFUSE_REFLECTIVITY
const QString PHONG_ILLUMINANT_IS_ENABLED[]
const QString USE_NORMALMAP_IS_ENABLED
const QString PHONG_SPECULAR_REFLECTIVITY
const QString PHONG_AMBIENT_REFLECTIVITY