7#ifndef _KIS_CURVE_WIDGET_P_H_
8#define _KIS_CURVE_WIDGET_P_H_
10#include <QApplication>
30 int m_grab_point_index {-1};
31 double m_grabOffsetX {0.0};
32 double m_grabOffsetY {0.0};
33 double m_grabOriginalX {0.0};
34 double m_grabOriginalY {0.0};
36 int m_draggedAwayPointIndex {0};
38 bool m_readOnlyMode {
false};
41 bool m_splineDirty {
false};
46 bool m_pixmapDirty {
true};
47 QPixmap *m_pixmapCache {
nullptr};
50 int m_handleSize {12};
118bool KisCurveWidget::Private::jumpOverExistingPoints(QPointF &pt,
int skipIndex)
121 if (m_curve.curvePoints().indexOf(it) == skipIndex)
124 pt.rx() = pt.x() >= it.
x() ?
128 return (pt.x() >= 0 && pt.x() <= 1.);
131int KisCurveWidget::Private::nearestPointInRange(QPointF pt,
int wWidth,
int wHeight)
const
133 double nearestDistanceSquared = 1000;
134 int nearestIndex = -1;
142 double distanceSquared = (pt.x() - point.
x()) *
143 (pt.x() - point.
x()) +
144 (pt.y() - point.
y()) *
145 (pt.y() - point.
y());
147 if (distanceSquared < nearestDistanceSquared) {
149 nearestDistanceSquared = distanceSquared;
154 if (nearestIndex >= 0) {
157 QPointF distanceVector = QPointF((pt.x() - m_curve.curvePoints()[nearestIndex].x()) *(wWidth - 1),
158 (pt.y() - m_curve.curvePoints()[nearestIndex].y()) *(wHeight - 1));
160 if (distanceVector.x() > m_handleSize || distanceVector.y() > m_handleSize) {
166 double distanceInPixels = QLineF(distanceVector, QPointF(0, 0)).length();
168 if (distanceInPixels <= m_handleSize) {
177#define div2_round(x) (((x)+1)>>1)
178#define div4_round(x) (((x)+2)>>2)
180void KisCurveWidget::Private::drawGrid(QPainter &
p,
int wWidth,
int wHeight)
191 QPalette appPalette = QApplication::palette();
193 p.setPen(QPen(appPalette.color(QPalette::Window), 1, Qt::SolidLine));
204void KisCurveWidget::Private::syncIOControls()
206 Q_EMIT m_curveWidget->shouldSyncIOControls();
209void KisCurveWidget::Private::setCurveModified(
bool rewriteSpinBoxesValues)
211 if (rewriteSpinBoxesValues) {
214 m_splineDirty =
true;
215 m_curveWidget->update();
216 Q_EMIT m_curveWidget->compressorShouldEmitModified();
219void KisCurveWidget::Private::setCurveRepaint()
221 m_curveWidget->update();
224void KisCurveWidget::Private::setState(
enumState st)
230enumState KisCurveWidget::Private::state()
const
235void KisCurveWidget::Private::applyGlobalPointConstrain()
237 if (m_globalPointConstrain == PointConstrain_AlwaysCorner) {
238 for (
int i = 0; i < m_curve.points().
size(); ++i) {
239 m_curve.setPointAsCorner(i,
true);
241 }
else if (m_globalPointConstrain == PointConstrain_AlwaysSmooth) {
242 for (
int i = 0; i < m_curve.points().
size(); ++i) {
243 m_curve.setPointAsCorner(i,
false);
int size(const Forest< T > &forest)