27 if (!g)
return result;
30 case QGradient::LinearGradient: {
31 const QLinearGradient *lgradient =
static_cast<const QLinearGradient*
>(g);
36 case QGradient::RadialGradient: {
37 const QRadialGradient *rgradient =
static_cast<const QRadialGradient*
>(g);
41 if (rgradient->center() != rgradient->focalPoint()) {
46 rgradient->center() + QPointF(rgradient->centerRadius(), 0));
49 case QGradient::ConicalGradient:
52 case QGradient::NoGradient:
57 if (g->coordinateMode() == QGradient::ObjectBoundingMode) {
59 const QTransform gradientToUser(boundingRect.width(), 0, 0, boundingRect.height(),
60 boundingRect.x(), boundingRect.y());
67 for (; it != result.end(); ++it) {
68 it->pos = t.map(it->pos);
86 const QGradient *originalGradient = wrapper.
gradient();
90 QScopedPointer<QGradient> newGradient;
92 switch (originalGradient->type()) {
93 case QGradient::LinearGradient: {
98 QLinearGradient *lgradient =
static_cast<QLinearGradient*
>(newGradient.data());
101 lgradient->setStart(
getNewHandlePos(lgradient->start(), absoluteOffset, newGradient->coordinateMode()));
103 lgradient->setFinalStop(
getNewHandlePos(lgradient->finalStop(), absoluteOffset, newGradient->coordinateMode()));
108 case QGradient::RadialGradient: {
110 QRadialGradient *rgradient =
static_cast<QRadialGradient*
>(newGradient.data());
113 rgradient->setCenter(
getNewHandlePos(rgradient->center(), absoluteOffset, newGradient->coordinateMode()));
115 rgradient->setFocalPoint(
getNewHandlePos(rgradient->focalPoint(), absoluteOffset, newGradient->coordinateMode()));
117 QPointF radiusPos = rgradient->center() + QPointF(QPointF(rgradient->radius(), 0));
118 radiusPos =
getNewHandlePos(radiusPos, absoluteOffset, newGradient->coordinateMode());
119 rgradient->setRadius(radiusPos.x() - rgradient->center().x());
123 case QGradient::ConicalGradient:
126 case QGradient::NoGradient:
131 return wrapper.
setGradient(newGradient.data(), originalTransform);
155 const QTransform offset = QTransform::fromTranslate(absoluteOffset.x(), absoluteOffset.y());
157 QTransform absoluteToLocal = localToAbsolute.inverted();
159 if (mode == QGradient::ObjectBoundingMode) {
162 localToAbsolute = gradientToUser * localToAbsolute;
167 absoluteToLocal = absoluteToLocal * userToGradient;
170 return (localToAbsolute * offset * absoluteToLocal).map(oldPos);