void GradientPreview::mouseMoveEvent(QMouseEvent *m) { if (isEditable) { QRect fpo; qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); if ((!Mpressed) && (m->y() < height()) && (m->y() > 43) && (m->x() > 9) && (m->x() < width()-9)) { qApp->changeOverrideCursor(QCursor(loadIcon("AddPoint.png"), 1, 1)); for (int yg = 0; yg < static_cast<int>(StopM.count()); ++yg) { fpo = QRect(static_cast<int>(StopM[yg])-4, 43, 8, 13); if (fpo.contains(m->pos())) { qApp->changeOverrideCursor(QCursor(Qt::SizeHorCursor)); return; } } } if (m->buttons() & Qt::LeftButton) { if ((Mpressed) && (m->y() < height()) && (m->y() > 43) && (m->x() > 9) && (m->x() < width()-9) && (ActStop != -1)) { qApp->changeOverrideCursor(QCursor(Qt::SizeHorCursor)); double newStop = static_cast<double>((m->x() - 10)) / (static_cast<double>(width())-20); if (ActStop > 1) { if (StopM[ActStop-1]+2 >= m->x()) return; } if (ActStop < static_cast<int>(StopM.count()-2)) { if (StopM[ActStop+1]-2 < m->x()) return; } StopM[ActStop] = m->x(); QList<VColorStop*> cstops = fill_gradient.colorStops(); cstops.at(ActStop)->rampPoint = newStop; emit currStep(cstops.at(ActStop)->rampPoint); qSort(cstops.begin(), cstops.end()); onlyselect = false; repaint(); } if ((Mpressed) && (outside || m->y() > 60) && (ActStop > 0) && (ActStop != static_cast<int>(StopM.count()-1))) qApp->changeOverrideCursor(QCursor(loadIcon("DelPoint.png"), 1, 1)); } } }
void GradientPreview::mouseReleaseEvent(QMouseEvent *m) { qApp->restoreOverrideCursor(); QRect insideRect = QRect(10, 43, width()-20, 13); if (isEditable) { QRect fpo; if (m->button() == Qt::LeftButton) { if ((Mpressed) && (ActStop > 0) && (ActStop != static_cast<int>(StopM.count()-1)) && (outside || !insideRect.contains(m->pos()))) { onlyselect = false; fill_gradient.removeStop(ActStop); ActStop = 0; repaint(); QList<VColorStop*> cstops = fill_gradient.colorStops(); emit selectedStop(cstops.at(ActStop)); } if ((m->y() < height()) && (m->y() > 43) && (m->x() > 0) && (m->x() < width()) && (ActStop == -1)) { QList<VColorStop*> cstops = fill_gradient.colorStops(); double newStop = static_cast<double>((m->x() - 10)) / (static_cast<double>(width())-20); QColor stopColor = (cstops.count() > 0) ? cstops.at(0)->color : QColor(255, 255, 255); QString stopName = (cstops.count() > 0) ? cstops.at(0)->name : QString("White"); int stopShade = (cstops.count() > 0) ? cstops.at(0)->shade : 100; fill_gradient.addStop(stopColor, newStop, 0.5, 1.0, stopName, stopShade); repaint(); onlyselect = false; cstops = fill_gradient.colorStops(); for (int yg = 0; yg < static_cast<int>(StopM.count()); ++yg) { fpo = QRect(static_cast<int>(StopM[yg])-4, 43, 8, 13); if (fpo.contains(m->pos())) { ActStop = yg; emit selectedStop(cstops.at(ActStop)); repaint(); break; } } } } else if (m->button() == Qt::RightButton) { Mpressed = false; QList<VColorStop*> cstops = fill_gradient.colorStops(); int stop = -1; for (int yg = 0; yg < static_cast<int>(StopM.count()); ++yg) { fpo = QRect(static_cast<int>(StopM[yg])-4, 43, 8, 13); if (fpo.contains(m->pos())) { stop = yg; break; } } contextStop = stop; mPos = m->pos(); QMenu *pmen = new QMenu(); setCursor(QCursor(Qt::ArrowCursor)); pmen->addAction( tr("Add Stop"), this, SLOT(addStop())); if (stop != -1) pmen->addAction( tr("Remove Stop"), this, SLOT(removeStop())); pmen->exec(QCursor::pos()); delete pmen; } } Mpressed = false; if ((!onlyselect) && (ActStop >= 0)){ emit gradientChanged(); QList<VColorStop*> cstops = fill_gradient.colorStops(); emit currStep(cstops.at(ActStop)->rampPoint); } }