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

#include <KisAnimCurvesValuesHeader.h>

+ Inheritance diagram for KisAnimCurvesValuesHeader:

Classes

struct  Private
 

Signals

void scaleChanged (qreal scale)
 
void valueOffsetChanged (qreal offset)
 

Public Member Functions

qreal firstVisibleStep () const
 
 KisAnimCurvesValuesHeader (QWidget *parent)
 
void paintEvent (QPaintEvent *e) override
 
qreal pixelsToValueOffset (const int pixels) const
 
qreal scale () const
 
void setScale (qreal scale)
 
void setValueOffset (qreal valueOffset)
 
QSize sizeHint () const override
 
qreal step () const
 
qreal valueOffset () const
 
int valueToPixelOffset (const qreal value) const
 
qreal valueToWidget (qreal value) const
 valueToWidgetOffset
 
qreal visibleValueDifference () const
 
qreal visibleValueMax () const
 
qreal visibleValueMin () const
 
qreal widgetToValue (qreal position) const
 
void zoomToFitRange (qreal min, qreal max)
 
 ~KisAnimCurvesValuesHeader () override
 

Protected Member Functions

virtual void mouseMoveEvent (QMouseEvent *mouseEvent) override
 
virtual void mousePressEvent (QMouseEvent *mouseEvent) override
 

Private Member Functions

qreal pixelsPerStep (const qreal step) const
 
qreal roundDownPower10 (qreal value) const
 
qreal roundUpPower10 (qreal value) const
 
qreal scaledUnit () const
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 16 of file KisAnimCurvesValuesHeader.h.

Constructor & Destructor Documentation

◆ KisAnimCurvesValuesHeader()

KisAnimCurvesValuesHeader::KisAnimCurvesValuesHeader ( QWidget * parent)

Definition at line 37 of file KisAnimCurvesValuesHeader.cpp.

38 : QHeaderView(Qt::Vertical, parent)
39 , m_d(new Private())
40{
41 m_d->modifiersCatcher.reset(new KisCustomModifiersCatcher(parent));
42 m_d->modifiersCatcher->addModifier("pan-zoom", Qt::Key_Space);
43}
const QScopedPointer< Private > m_d
The KisCustomModifiersCatcher class is a special utility class that tracks custom modifiers pressed....

References m_d.

◆ ~KisAnimCurvesValuesHeader()

KisAnimCurvesValuesHeader::~KisAnimCurvesValuesHeader ( )
override

Definition at line 45 of file KisAnimCurvesValuesHeader.cpp.

46{}

Member Function Documentation

◆ firstVisibleStep()

qreal KisAnimCurvesValuesHeader::firstVisibleStep ( ) const
inline

Definition at line 52 of file KisAnimCurvesValuesHeader.h.

52 {
53 const qreal valueStep = step();
54 return qCeil(valueOffset() / valueStep) * valueStep;
55 }

References step(), and valueOffset().

◆ mouseMoveEvent()

void KisAnimCurvesValuesHeader::mouseMoveEvent ( QMouseEvent * mouseEvent)
overrideprotectedvirtual

Definition at line 164 of file KisAnimCurvesValuesHeader.cpp.

164 {
165 if (mouseEvent->buttons() & Qt::LeftButton) {
166 if (m_d->mouseTracking) {
167 const qreal oldValue = orientation() == Qt::Vertical ? m_d->mouseLastPos.y() : m_d->mouseLastPos.x();
168 const qreal newValue = orientation() == Qt::Vertical ? mouseEvent->pos().y() : mouseEvent->pos().x();
169 if (m_d->modifiersCatcher->modifierPressed("pan-zoom")) {
170 const qreal delta = (newValue - oldValue);
171 setValueOffset(valueOffset() + delta * step() / 64);
172 } else {
173 const qreal delta = -1 * (newValue - oldValue) / 16;
174 setScale(scale() + delta / step());
175 }
176 m_d->mouseLastPos = mouseEvent->pos();
177 }
178 } else {
179 if (m_d->mouseTracking == true) {
180 m_d->mouseTracking = false;
181 }
182 }
183
184 QHeaderView::mouseMoveEvent(mouseEvent);
185}
void setValueOffset(qreal valueOffset)

References m_d, scale(), setScale(), setValueOffset(), step(), and valueOffset().

◆ mousePressEvent()

void KisAnimCurvesValuesHeader::mousePressEvent ( QMouseEvent * mouseEvent)
overrideprotectedvirtual

Definition at line 187 of file KisAnimCurvesValuesHeader.cpp.

187 {
188 if (mouseEvent->buttons() & Qt::LeftButton) {
189 m_d->mouseTracking = true;
190 m_d->mouseLastPos = mouseEvent->pos();
191 }
192
193 QHeaderView::mousePressEvent(mouseEvent);
194}

References m_d.

◆ paintEvent()

void KisAnimCurvesValuesHeader::paintEvent ( QPaintEvent * e)
override

Definition at line 113 of file KisAnimCurvesValuesHeader.cpp.

114{
115 QPainter painter(viewport());
116
117 // Colors.
118 const QColor textColor = qApp->palette().color(QPalette::ButtonText);
119 const QColor majorNotchColor = QColor(textColor.red(), textColor.green(), textColor.blue(), 192);
120 const QColor minorNotchColor = QColor(textColor.red(), textColor.green(), textColor.blue(), 128);
121 const QColor zeroColor = qApp->palette().highlight().color();
122
123 const qreal valueStep = step();
124 const qreal firstVisibleValue = firstVisibleStep();
125
126 const int visibleSteps = visibleValueDifference() / valueStep;
127 const int minorNotches = pixelsPerStep(valueStep) >= (UNIT_SIZE_PIXELS * 2) ? 9 : 3;
128 const int majorNotchLength = rect().width();
129 const int minorNotchLength = 12;
130
131 // Draw notch at each major step.
132 //const qreal upperValueThreshold = firstVisibleValue + (visibleSteps + 2) * valueStep;
133 for (int major = 0; major <= visibleSteps + 1; major++) {
134 const qreal value = firstVisibleValue + valueStep * major;
135
136 const QPoint majorRight = QPoint(majorNotchLength, valueToWidget(value));
137 const QPoint majorLeft = QPoint(0, valueToWidget(value));
138
139 painter.setPen(value != 0 ? majorNotchColor : zeroColor);
140 painter.drawLine(majorLeft, majorRight);
141
142 // Draw interior notches at minor substeps.
143 const qreal pixelsPerMinorNotch = pixelsPerStep(valueStep) / (minorNotches + 1);
144 for (int minor = 0; minor < minorNotches; minor++) {
145 const QPoint minorRight = QPoint(rect().width(), majorRight.y() + pixelsPerMinorNotch * (minor + 1));
146 const QPoint minorLeft = QPoint(minorRight.x() - minorNotchLength, minorRight.y());
147
148 painter.setPen(minorNotchColor);
149 painter.drawLine(minorLeft, minorRight);
150 }
151
152 { // Draw label.
153 const int padding = 4;
154
155 const QString label = QString::number(value, 'f', valueStep < 1 ? 2 : 0);
156 const QRect textRect = QRect(0, majorLeft.y(), rect().width() - minorNotchLength - padding, 32);
157
158 painter.setPen(value != 0 ? textColor : zeroColor);
159 painter.drawText(textRect, label, QTextOption(Qt::AlignRight));
160 }
161 }
162}
float value(const T *src, size_t ch)
const int UNIT_SIZE_PIXELS
qreal valueToWidget(qreal value) const
valueToWidgetOffset
qreal pixelsPerStep(const qreal step) const

References firstVisibleStep(), pixelsPerStep(), step(), UNIT_SIZE_PIXELS, value(), valueToWidget(), and visibleValueDifference().

◆ pixelsPerStep()

qreal KisAnimCurvesValuesHeader::pixelsPerStep ( const qreal step) const
inlineprivate

Definition at line 81 of file KisAnimCurvesValuesHeader.h.

81 {
82 return step * scaledUnit();
83 }

References scaledUnit(), and step().

◆ pixelsToValueOffset()

qreal KisAnimCurvesValuesHeader::pixelsToValueOffset ( const int pixels) const
inline

Definition at line 57 of file KisAnimCurvesValuesHeader.h.

57 {
58 return (qreal(pixels) * -1 / scaledUnit());
59 }

References scaledUnit().

◆ roundDownPower10()

qreal KisAnimCurvesValuesHeader::roundDownPower10 ( qreal value) const
inlineprivate

Definition at line 89 of file KisAnimCurvesValuesHeader.h.

89 {
90 return qPow(10.0, (qreal)qFloor(log10(value))) / 10.0;
91 }

References value().

◆ roundUpPower10()

qreal KisAnimCurvesValuesHeader::roundUpPower10 ( qreal value) const
inlineprivate

Definition at line 85 of file KisAnimCurvesValuesHeader.h.

85 {
86 return qPow(10.0, (qreal)qCeil(log10(value))) / 10.0;
87 }

References value().

◆ scale()

qreal KisAnimCurvesValuesHeader::scale ( ) const

Definition at line 56 of file KisAnimCurvesValuesHeader.cpp.

57{
58 return m_d->scale;
59}

References m_d.

◆ scaleChanged

void KisAnimCurvesValuesHeader::scaleChanged ( qreal scale)
signal

◆ scaledUnit()

qreal KisAnimCurvesValuesHeader::scaledUnit ( ) const
inlineprivate

Definition at line 77 of file KisAnimCurvesValuesHeader.h.

77 {
78 return UNIT_SIZE_PIXELS * scale();
79 }

References scale(), and UNIT_SIZE_PIXELS.

◆ setScale()

void KisAnimCurvesValuesHeader::setScale ( qreal scale)

Definition at line 48 of file KisAnimCurvesValuesHeader.cpp.

49{
50 const qreal minimumScale = 0.001f;
51 m_d->scale = qMax(scale, minimumScale);
52 viewport()->update();
53 Q_EMIT scaleChanged(m_d->scale);
54}
void scaleChanged(qreal scale)

References m_d, scale(), and scaleChanged().

◆ setValueOffset()

void KisAnimCurvesValuesHeader::setValueOffset ( qreal valueOffset)

Definition at line 61 of file KisAnimCurvesValuesHeader.cpp.

62{
63 m_d->valueOffset = offset;
64 viewport()->update();
65 valueOffsetChanged(m_d->valueOffset);
66}
void valueOffsetChanged(qreal offset)

References m_d, and valueOffsetChanged().

◆ sizeHint()

QSize KisAnimCurvesValuesHeader::sizeHint ( ) const
inlineoverride

Definition at line 65 of file KisAnimCurvesValuesHeader.h.

65{return QSize(64, 0);}

◆ step()

qreal KisAnimCurvesValuesHeader::step ( ) const

Definition at line 73 of file KisAnimCurvesValuesHeader.cpp.

74{
75 const int MIN_PIXEL_PER_STEP = UNIT_SIZE_PIXELS - 8;
76 const int MAX_PIXEL_PER_STEP = UNIT_SIZE_PIXELS * 10;
77
78 const qreal valueSpan = visibleValueDifference();
79 qreal step = roundDownPower10(valueSpan * 5);
80
81 if (pixelsPerStep(step) < MIN_PIXEL_PER_STEP) {
82 step *= 10;
83 } else if (pixelsPerStep(step) >= MAX_PIXEL_PER_STEP) {
84 step /= 10;
85 }
86
87 return step;
88}
qreal roundDownPower10(qreal value) const

References pixelsPerStep(), roundDownPower10(), step(), UNIT_SIZE_PIXELS, and visibleValueDifference().

◆ valueOffset()

qreal KisAnimCurvesValuesHeader::valueOffset ( ) const

Definition at line 68 of file KisAnimCurvesValuesHeader.cpp.

69{
70 return m_d->valueOffset;
71}

References m_d.

◆ valueOffsetChanged

void KisAnimCurvesValuesHeader::valueOffsetChanged ( qreal offset)
signal

◆ valueToPixelOffset()

int KisAnimCurvesValuesHeader::valueToPixelOffset ( const qreal value) const
inline

Definition at line 61 of file KisAnimCurvesValuesHeader.h.

61 {
62 return (value * scaledUnit()) / -1;
63 }

References scaledUnit(), and value().

◆ valueToWidget()

qreal KisAnimCurvesValuesHeader::valueToWidget ( qreal value) const

valueToWidgetOffset

Parameters
valueY value in ruler units.
Returns
Pixel offset relative to widget.

Definition at line 90 of file KisAnimCurvesValuesHeader.cpp.

91{
92 return rect().height() - (value - valueOffset()) * scaledUnit();
93}

References scaledUnit(), value(), and valueOffset().

◆ visibleValueDifference()

qreal KisAnimCurvesValuesHeader::visibleValueDifference ( ) const

Definition at line 100 of file KisAnimCurvesValuesHeader.cpp.

References visibleValueMax(), and visibleValueMin().

◆ visibleValueMax()

qreal KisAnimCurvesValuesHeader::visibleValueMax ( ) const
inline

Definition at line 40 of file KisAnimCurvesValuesHeader.h.

40 {
41 return widgetToValue(rect().top());
42 }
qreal widgetToValue(qreal position) const

References widgetToValue().

◆ visibleValueMin()

qreal KisAnimCurvesValuesHeader::visibleValueMin ( ) const
inline

Definition at line 44 of file KisAnimCurvesValuesHeader.h.

44 {
45 return widgetToValue(rect().bottom());
46 }

References widgetToValue().

◆ widgetToValue()

qreal KisAnimCurvesValuesHeader::widgetToValue ( qreal position) const

Definition at line 95 of file KisAnimCurvesValuesHeader.cpp.

96{
97 return (position - rect().height()) / (scaledUnit() * -1) + valueOffset();
98}

References scaledUnit(), and valueOffset().

◆ zoomToFitRange()

void KisAnimCurvesValuesHeader::zoomToFitRange ( qreal min,
qreal max )

Definition at line 105 of file KisAnimCurvesValuesHeader.cpp.

106{
107 const qreal range = (max-min);
108 const qreal rangePixels = range * UNIT_SIZE_PIXELS;
109 setValueOffset(min);
110 setScale(rect().height() / rangePixels);
111}
T min(T a, T b, T c)
constexpr std::enable_if< sizeof...(values)==0, size_t >::type max()

References setScale(), setValueOffset(), and UNIT_SIZE_PIXELS.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisAnimCurvesValuesHeader::m_d
private

Definition at line 94 of file KisAnimCurvesValuesHeader.h.


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