d->m_intIn = NULL;
d->m_intOut = NULL;
+ d->m_maxPoints = -1;
+
setMouseTracking(true);
setAutoFillBackground(false);
setAttribute(Qt::WA_OpaquePaintEvent);
setMinimumSize(150, 150);
- setMaximumSize(250, 250);
+ setMaximumSize(1000, 1000);
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
d->setCurveModified();
delete d;
}
+QSize KisCurveWidget::sizeHint() const
+{
+ return QSize(500, 500);
+}
+
void KisCurveWidget::setupInOutControls(QSpinBox *in, QSpinBox *out, int min, int max)
{
d->m_intIn = in;
{
d->m_guideVisible = true;
d->m_colorGuide = color;
-
}
void KisCurveWidget::setPixmap(const QPixmap & pix)
}
d->setCurveModified();
} else if (e->key() == Qt::Key_Escape && d->state() != ST_NORMAL) {
- d->m_curve.setPoint(d->m_grab_point_index, QPointF(d->m_grabOriginalX, d->m_grabOriginalY) );
+ d->m_curve.setPoint(d->m_grab_point_index, QPointF(d->m_grabOriginalX, d->m_grabOriginalY));
setCursor(Qt::ArrowCursor);
d->setState(ST_NORMAL);
/*KisConfig cfg;
if (cfg.antialiasCurves())
p.setRenderHint(QPainter::Antialiasing);*/
+ p.setRenderHint(QPainter::Antialiasing);
+
+ // Draw default line
+ p.setPen(QPen(Qt::gray, 1, Qt::SolidLine));
+ p.drawLine(QLineF(0, wHeight, wWidth, 0));
// Draw curve.
double prevY = wHeight - d->m_curve.value(0.) * wHeight;
{
if (d->m_readOnlyMode) return;
- if (e->button() != Qt::LeftButton)
- return;
-
double x = e->pos().x() / (double)(width() - 1);
double y = 1.0 - e->pos().y() / (double)(height() - 1);
int closest_point_index = d->nearestPointInRange(QPointF(x, y), width(), height());
+
+ if (e->button() == Qt::RightButton && closest_point_index > 0 && closest_point_index < d->m_curve.points().count() - 1) {
+ d->m_curve.removePoint(closest_point_index);
+ setCursor(Qt::ArrowCursor);
+ d->setState(ST_NORMAL);
+ if (closest_point_index < d->m_grab_point_index)
+ --d->m_grab_point_index;
+ d->setCurveModified();
+ return;
+ } else if (e->button() != Qt::LeftButton) return;
+
if (closest_point_index < 0) {
+ if (d->m_maxPoints > 0 && d->m_curve.points().count() >= d->m_maxPoints)
+ return;
QPointF newPoint(x, y);
if (!d->jumpOverExistingPoints(newPoint, -1))
return;
double rightX;
if (d->m_grab_point_index == 0) {
leftX = 0.0;
- if (d->m_curve.points().count() > 1)
+ rightX = 0.0;
+ /*if (d->m_curve.points().count() > 1)
rightX = d->m_curve.points()[d->m_grab_point_index + 1].x() - POINT_AREA;
else
- rightX = 1.0;
+ rightX = 1.0;*/
} else if (d->m_grab_point_index == d->m_curve.points().count() - 1) {
leftX = d->m_curve.points()[d->m_grab_point_index - 1].x() + POINT_AREA;
rightX = 1.0;
{
}
+void KisCurveWidget::setMaxPoints(int max)
+{
+ d->m_maxPoints = max;
+}
+
#include "kis_curve_widget.moc"