X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkis_curve_widget.cpp;h=73edfd5915c3e03819477f1e04595dd1510186db;hb=c3302003093710ee247ad84c0fe2ef3c579d417f;hp=6b0656ee191967af9dd0539bc3660c3d83466f73;hpb=0f1de4df82fc4c17e55fc054d39a33b31f093e13;p=kdenlive diff --git a/src/kis_curve_widget.cpp b/src/kis_curve_widget.cpp index 6b0656ee..73edfd59 100644 --- a/src/kis_curve_widget.cpp +++ b/src/kis_curve_widget.cpp @@ -74,14 +74,15 @@ KisCurveWidget::KisCurveWidget(QWidget *parent, Qt::WFlags f) 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(); @@ -95,6 +96,11 @@ KisCurveWidget::~KisCurveWidget() 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; @@ -168,7 +174,6 @@ void KisCurveWidget::setCurveGuide(const QColor & color) { d->m_guideVisible = true; d->m_colorGuide = color; - } void KisCurveWidget::setPixmap(const QPixmap & pix) @@ -202,7 +207,7 @@ void KisCurveWidget::keyPressEvent(QKeyEvent *e) } 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); @@ -269,6 +274,11 @@ void KisCurveWidget::paintEvent(QPaintEvent *) /*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; @@ -320,15 +330,23 @@ void KisCurveWidget::mousePressEvent(QMouseEvent * e) { 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; @@ -411,10 +429,11 @@ void KisCurveWidget::mouseMoveEvent(QMouseEvent * e) 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;