void PathDeformRenderer::mouseMoveEvent(QMouseEvent *e) { if (!m_mouseDrag && (QLineF(m_mousePress, e->pos()).length() > 25.0) ) m_mouseDrag = true; if (m_mouseDrag) { QRect rectBefore = circle_bounds(m_pos, m_radius, m_fontSize); if (e->type() == QEvent::MouseMove) { QLineF line(m_pos, e->pos() + m_offset); line.setLength(line.length() * .1); QPointF dir(line.dx(), line.dy()); m_direction = (m_direction + dir) / 2; } m_pos = e->pos() + m_offset; #ifdef QT_OPENGL_SUPPORT if (usesOpenGL()) { update(); } else #endif { QRect rectAfter = circle_bounds(m_pos, m_radius, m_fontSize); update(rectBefore | rectAfter); } } }
void PathDeformRenderer::timerEvent(QTimerEvent *e) { if (e->timerId() == m_repaintTimer.timerId()) { if (QLineF(QPointF(0,0), m_direction).length() > 1) m_direction *= 0.995; qreal time = m_repaintTracker.restart(); QRect rectBefore = circle_bounds(m_pos, m_radius, m_fontSize); qreal dx = m_direction.x(); qreal dy = m_direction.y(); if (time > 0) { dx = dx * time * .1; dy = dy * time * .1; } m_pos += QPointF(dx, dy); if (m_pos.x() - m_radius < 0) { m_direction.setX(-m_direction.x()); m_pos.setX(m_radius); } else if (m_pos.x() + m_radius > width()) { m_direction.setX(-m_direction.x()); m_pos.setX(width() - m_radius); } if (m_pos.y() - m_radius < 0) { m_direction.setY(-m_direction.y()); m_pos.setY(m_radius); } else if (m_pos.y() + m_radius > height()) { m_direction.setY(-m_direction.y()); m_pos.setY(height() - m_radius); } #ifdef QT_OPENGL_SUPPORT if (usesOpenGL()) { update(); } else #endif { QRect rectAfter = circle_bounds(m_pos, m_radius, m_fontSize); update(rectAfter | rectBefore); QApplication::syncX(); } } // else if (e->timerId() == m_fpsTimer.timerId()) { // printf("fps: %d\n", m_fpsCounter); // emit frameRate(m_fpsCounter); // m_fpsCounter = 0; // } }
void PathDeformRenderer::generateLensPixmap() { qreal rad = m_radius + LENS_EXTENT; QRect bounds = circle_bounds(QPointF(), rad, 0); QPainter painter; if (preferImage()) { m_lens_image = QImage(bounds.size(), QImage::Format_ARGB32_Premultiplied); m_lens_image.fill(0); painter.begin(&m_lens_image); } else { m_lens_pixmap = QPixmap(bounds.size()); m_lens_pixmap.fill(Qt::transparent); painter.begin(&m_lens_pixmap); } QRadialGradient gr(rad, rad, rad, 3 * rad / 5, 3 * rad / 5); gr.setColorAt(0.0, QColor(255, 255, 255, 191)); gr.setColorAt(0.2, QColor(255, 255, 127, 191)); gr.setColorAt(0.9, QColor(150, 150, 200, 63)); gr.setColorAt(0.95, QColor(0, 0, 0, 127)); gr.setColorAt(1, QColor(0, 0, 0, 0)); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(gr); painter.setPen(Qt::NoPen); painter.drawEllipse(0, 0, bounds.width(), bounds.height()); }
void PathDeformRenderer::setIntensity(int intensity) { m_intensity = intensity; if (!m_animated) { #ifdef QT_OPENGL_SUPPORT if (usesOpenGL()) { update(); return; } #endif update(circle_bounds(m_pos, m_radius, m_fontSize)); } }
void PathDeformRenderer::setRadius(int radius) { qreal max = qMax(m_radius, (qreal)radius); m_radius = radius; generateLensPixmap(); if (!m_animated || m_radius < max) { #ifdef QT_OPENGL_SUPPORT if (usesOpenGL()){ update(); return; } #endif update(circle_bounds(m_pos, max, m_fontSize)); } }