void QtGradientStopsWidgetPrivate::setupMove(QtGradientStop *stop, int x) { m_model->setCurrentStop(stop); int viewportX = qRound(toViewport(stop->position())); m_moveOffset = x - viewportX; QList<QtGradientStop *> stops = m_stops; m_stops.clear(); QListIterator<QtGradientStop *> itStop(stops); while (itStop.hasNext()) { QtGradientStop *s = itStop.next(); if (m_model->isSelected(s) || s == stop) { m_moveStops[s] = s->position() - stop->position(); m_stops.append(s); } else { m_moveOriginal[s->position()] = s->color(); } } itStop.toFront(); while (itStop.hasNext()) { QtGradientStop *s = itStop.next(); if (!m_model->isSelected(s)) m_stops.append(s); } m_stops.removeAll(stop); m_stops.prepend(stop); }
QGradientStops QtGradientStopsController::gradientStops() const { QGradientStops stops; QList<QtGradientStop *> stopsList = d_ptr->m_model->stops().values(); QListIterator<QtGradientStop *> itStop(stopsList); while (itStop.hasNext()) { QtGradientStop *stop = itStop.next(); stops << QPair<qreal, QColor>(stop->position(), stop->color()); } return stops; }
QtGradientStopsControllerPrivate::PositionColorMap QtGradientStopsControllerPrivate::stopsData(const PositionStopMap &stops) const { PositionColorMap data; PositionStopMap::ConstIterator itStop = stops.constBegin(); while (itStop != stops.constEnd()) { QtGradientStop *stop = itStop.value(); data[stop->position()] = stop->color(); ++itStop; } return data; }
QtGradientStop *QtGradientStopsWidgetPrivate::newStop(const QPoint &viewportPos) { QtGradientStop *copyStop = stopAt(viewportPos); double posX = fromViewport(viewportPos.x()); QtGradientStop *stop = m_model->at(posX); if (!stop) { QColor newColor; if (copyStop) newColor = copyStop->color(); else newColor = m_model->color(posX); if (!newColor.isValid()) newColor = Qt::white; stop = m_model->addStop(posX, newColor); } return stop; }
void QtGradientStopsControllerPrivate::slotChangeHue(const QColor &color) { QtGradientStop *stop = m_model->currentStop(); if (!stop) return; m_model->changeStop(stop, color); QList<QtGradientStop *> stops = m_model->selectedStops(); QListIterator<QtGradientStop *> itStop(stops); while (itStop.hasNext()) { QtGradientStop *s = itStop.next(); if (s != stop) { QColor c = s->color(); if (m_ui->hsvRadioButton->isChecked()) c.setHsvF(color.hueF(), c.saturationF(), c.valueF(), c.alphaF()); else c.setRgbF(color.redF(), c.greenF(), c.blueF(), c.alphaF()); m_model->changeStop(s, c); } } }