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

#include <kis_color_input.h>

+ Inheritance diagram for KisFloatColorInput:

Public Slots

void setValue (double)
 
void sliderChanged (int)
 
void update ()
 

Public Member Functions

 KisFloatColorInput (QWidget *parent, const KoChannelInfo *, KoColor *color, KoColorDisplayRendererInterface *displayRenderer=KoDumbColorDisplayRenderer::instance(), bool usePercentage=false)
 
- Public Member Functions inherited from KisColorInput
 KisColorInput (QWidget *parent, const KoChannelInfo *, KoColor *color, KoColorDisplayRendererInterface *displayRenderer=KoDumbColorDisplayRenderer::instance(), bool usePercentage=false)
 
virtual void setPercentageWise (bool val)
 
bool usePercentage () const
 

Protected Member Functions

QWidget * createInput () override
 
- Protected Member Functions inherited from KisColorInput
void init ()
 

Private Attributes

KisDoubleParseSpinBoxm_dblNumInput {nullptr}
 
qreal m_maxValue {0.0}
 
qreal m_minValue {0.0}
 

Additional Inherited Members

- Signals inherited from KisColorInput
void updated ()
 
- Protected Attributes inherited from KisColorInput
const KoChannelInfom_channelInfo {nullptr}
 
KoColorm_color {nullptr}
 
KoColorSliderm_colorSlider {nullptr}
 
KoColorDisplayRendererInterfacem_displayRenderer {nullptr}
 
bool m_usePercentage {false}
 

Detailed Description

Definition at line 73 of file kis_color_input.h.

Constructor & Destructor Documentation

◆ KisFloatColorInput()

KisFloatColorInput::KisFloatColorInput ( QWidget * parent,
const KoChannelInfo * channelInfo,
KoColor * color,
KoColorDisplayRendererInterface * displayRenderer = KoDumbColorDisplayRenderer::instance(),
bool usePercentage = false )

Definition at line 210 of file kis_color_input.cpp.

210 :
211 KisColorInput(parent, channelInfo, color, displayRenderer, usePercentage)
212{
213 init();
214}
KisColorInput(QWidget *parent, const KoChannelInfo *, KoColor *color, KoColorDisplayRendererInterface *displayRenderer=KoDumbColorDisplayRenderer::instance(), bool usePercentage=false)
bool usePercentage() const

References KisColorInput::init().

Member Function Documentation

◆ createInput()

QWidget * KisFloatColorInput::createInput ( )
overrideprotectedvirtual

Implements KisColorInput.

Definition at line 234 of file kis_color_input.cpp.

235{
237 m_dblNumInput->setMinimum(0);
238 m_dblNumInput->setMaximum(1.0);
239 m_dblNumInput->setSingleStep(0.01);
240 connect(m_colorSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderChanged(int)));
241 connect(m_dblNumInput, SIGNAL(valueChanged(double)), this, SLOT(setValue(double)));
242 m_dblNumInput->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
243 m_dblNumInput->setMinimumWidth(60);
244 m_dblNumInput->setMaximumWidth(60);
245
246 quint8* data = m_color->data() + m_channelInfo->pos();
247 qreal value = 1.0;
248
249 switch (m_channelInfo->channelValueType()) {
250#ifdef HAVE_OPENEXR
252 value = *(reinterpret_cast<half*>(data));
253 break;
254#endif
256 value = *(reinterpret_cast<float*>(data));
257 break;
258 default:
259 Q_ASSERT(false);
260 }
262
263 return m_dblNumInput;
264}
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
const KoChannelInfo * m_channelInfo
KoColor * m_color
KoColorSlider * m_colorSlider
The KisDoubleParseSpinBox class is a cleverer doubleSpinBox, able to parse arithmetic expressions.
void setValue(double value, bool overwriteExpression=false)
Set the value of the spinbox.
KisDoubleParseSpinBox * m_dblNumInput
qint32 pos() const
@ FLOAT32
use this for a float 32bits channel
@ FLOAT16
use this for a float 16bits channel
enumChannelValueType channelValueType() const
quint8 * data()
Definition KoColor.h:144

References KoChannelInfo::channelValueType(), connect(), KoColor::data(), KoChannelInfo::FLOAT16, KoChannelInfo::FLOAT32, KisColorInput::m_channelInfo, KisColorInput::m_color, KisColorInput::m_colorSlider, m_dblNumInput, KoChannelInfo::pos(), KisDoubleParseSpinBox::setValue(), setValue(), sliderChanged(), and value().

◆ setValue

void KisFloatColorInput::setValue ( double v)
slot

Definition at line 216 of file kis_color_input.cpp.

217{
218 quint8* data = m_color->data() + m_channelInfo->pos();
219 switch (m_channelInfo->channelValueType()) {
220#ifdef HAVE_OPENEXR
222 *(reinterpret_cast<half*>(data)) = v;
223 break;
224#endif
226 *(reinterpret_cast<float*>(data)) = v;
227 break;
228 default:
229 Q_ASSERT(false);
230 }
231 emit(updated());
232}
qreal v

References KoChannelInfo::channelValueType(), KoColor::data(), KoChannelInfo::FLOAT16, KoChannelInfo::FLOAT32, KisColorInput::m_channelInfo, KisColorInput::m_color, KoChannelInfo::pos(), KisColorInput::updated(), and v.

◆ sliderChanged

void KisFloatColorInput::sliderChanged ( int i)
slot

Definition at line 266 of file kis_color_input.cpp.

267{
268 const qreal floatRange = m_maxValue - m_minValue;
269 m_dblNumInput->setValue(m_minValue + (i / 255.0) * floatRange);
270}

References m_dblNumInput, m_maxValue, m_minValue, and KisDoubleParseSpinBox::setValue().

◆ update

void KisFloatColorInput::update ( )
slot

Definition at line 272 of file kis_color_input.cpp.

273{
276 quint8* data = m_color->data() + m_channelInfo->pos();
277 quint8* dataMin = min.data() + m_channelInfo->pos();
278 quint8* dataMax = max.data() + m_channelInfo->pos();
279
280 qreal value = 1.0;
283 m_dblNumInput->blockSignals(true);
284 m_colorSlider->blockSignals(true);
285
286 switch (m_channelInfo->channelValueType()) {
287#ifdef HAVE_OPENEXR
289 value = *(reinterpret_cast<half*>(data));
290 m_minValue = qMin(value, m_minValue);
291 m_maxValue = qMax(value, m_maxValue);
292 *(reinterpret_cast<half*>(dataMin)) = m_minValue;
293 *(reinterpret_cast<half*>(dataMax)) = m_maxValue;
294 break;
295#endif
297 value = *(reinterpret_cast<float*>(data));
298 m_minValue = qMin(value, m_minValue);
299 m_maxValue = qMax(value, m_maxValue);
300 *(reinterpret_cast<float*>(dataMin)) = m_minValue;
301 *(reinterpret_cast<float*>(dataMax)) = m_maxValue;
302 break;
303 default:
304 Q_ASSERT(false);
305 }
306
307 if (m_minValue != m_dblNumInput->minimum()) {
308 m_dblNumInput->setMinimum(m_minValue);
309 }
310 if (m_maxValue != m_dblNumInput->maximum()) {
311 m_dblNumInput->setMaximum(m_maxValue);
312 }
313
314 // ensure at least 3 significant digits are always shown
315 int newPrecision = 2 + qMax(qreal(0.0), std::ceil(-std::log10(m_maxValue)));
316 if (newPrecision != m_dblNumInput->decimals()) {
317 m_dblNumInput->setDecimals(newPrecision);
318 m_dblNumInput->updateGeometry();
319 }
321
322 m_colorSlider->setColors(min, max);
323
324 const qreal floatRange = m_maxValue - m_minValue;
325 m_colorSlider->setValue((value - m_minValue) / floatRange * 255);
326 m_dblNumInput->blockSignals(false);
327 m_colorSlider->blockSignals(false);
328}
KoColorDisplayRendererInterface * m_displayRenderer
virtual qreal minVisibleFloatValue(const KoChannelInfo *chaninfo) const =0
virtual qreal maxVisibleFloatValue(const KoChannelInfo *chaninfo) const =0
T min(T a, T b, T c)
constexpr std::enable_if< sizeof...(values)==0, size_t >::type max()
void setColors(const KoColor &minColor, const KoColor &maxColor)

References KoChannelInfo::channelValueType(), KoColor::data(), KoChannelInfo::FLOAT16, KoChannelInfo::FLOAT32, KisColorInput::m_channelInfo, KisColorInput::m_color, KisColorInput::m_colorSlider, m_dblNumInput, KisColorInput::m_displayRenderer, m_maxValue, m_minValue, KoColorDisplayRendererInterface::maxVisibleFloatValue(), KoColorDisplayRendererInterface::minVisibleFloatValue(), KoChannelInfo::pos(), KoColorSlider::setColors(), KisDoubleParseSpinBox::setValue(), and value().

Member Data Documentation

◆ m_dblNumInput

KisDoubleParseSpinBox* KisFloatColorInput::m_dblNumInput {nullptr}
private

Definition at line 85 of file kis_color_input.h.

85{nullptr};

◆ m_maxValue

qreal KisFloatColorInput::m_maxValue {0.0}
private

Definition at line 87 of file kis_color_input.h.

87{0.0};

◆ m_minValue

qreal KisFloatColorInput::m_minValue {0.0}
private

Definition at line 86 of file kis_color_input.h.

86{0.0};

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