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; }
void QtGradientStopsControllerPrivate::slotChangeColor(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) m_model->changeStop(s, color); } }
QtGradientStop *QtGradientStopsWidgetPrivate::stopAt(const QPoint &viewportPos) const { double posY = m_handleSize / 2; QListIterator<QtGradientStop *> itStop(m_stops); while (itStop.hasNext()) { QtGradientStop *stop = itStop.next(); double posX = toViewport(stop->position()); double x = viewportPos.x() - posX; double y = viewportPos.y() - posY; if ((m_handleSize * m_handleSize / 4) > (x * x + y * y)) return stop; } return 0; }
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); } } }
void QtGradientStopsModel::flipAll() { QMap<qreal, QtGradientStop *> stopsMap = stops(); QMapIterator<qreal, QtGradientStop *> itStop(stopsMap); itStop.toBack(); QMap<QtGradientStop *, bool> swappedList; while (itStop.hasPrevious()) { itStop.previous(); QtGradientStop *stop = itStop.value(); if (swappedList.contains(stop)) continue; const double newPos = 1.0 - itStop.key(); if (stopsMap.contains(newPos)) { QtGradientStop *swapped = stopsMap.value(newPos); swappedList[swapped] = true; swapStops(stop, swapped); } else { moveStop(stop, newPos); } } }