void Lighting::animate() { angle += (M_PI / 30); qreal xs = 200 * sin(angle) - 40 + 25; qreal ys = 200 * cos(angle) - 40 + 25; m_lightSource->setPos(xs, ys); for (int i = 0; i < m_items.size(); ++i) { QGraphicsItem *item = m_items.at(i); Q_ASSERT(item); QGraphicsDropShadowEffect *effect = static_cast<QGraphicsDropShadowEffect *>(item->graphicsEffect()); Q_ASSERT(effect); QPointF delta(item->x() - xs, item->y() - ys); effect->setOffset(delta.toPoint() / 30); qreal dx = delta.x(); qreal dy = delta.y(); qreal dd = sqrt(dx * dx + dy * dy); QColor color = effect->color(); color.setAlphaF(qBound(0.4, 1 - dd / 200.0, 0.7)); effect->setColor(color); } m_scene.update(); }
void BlurPicker::setIndex(qreal index) { m_index = index; qreal baseline = 0; for (int i = 0; i < m_icons.count(); ++i) { QGraphicsItem *icon = m_icons[i]; qreal a = ((i + m_index) * 2 * M_PI) / m_icons.count(); qreal xs = 170 * sin(a); qreal ys = 100 * cos(a); QPointF pos(xs, ys); pos = QTransform().rotate(-20).map(pos); pos -= QPointF(40, 40); icon->setPos(pos); baseline = qMax(baseline, ys); static_cast<BlurEffect *>(icon->graphicsEffect())->setBaseLine(baseline); } scene()->update(); }