void FadeMetro::paintEvent(QPaintEvent* /*event*/) { QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing); QPainterPath clip; clip.addRoundedRect(m_MetroRect, ROUNDED, ROUNDED); painter.setClipPath(clip); const QPixmap &pixmap = m_Images[m_ImageIndex].pixmap; if( !pixmap.isNull() ) { painter.drawPixmap( m_MetroRect.x() + qRound((m_MetroRect.width()-pixmap.width())*0.5), m_MetroRect.y() + qRound((m_MetroRect.height()-pixmap.height())*0.5), pixmap ); } painter.setClipping(false); float brightness = m_Click; if(m_Hover > 0) brightness += (m_Hover*0.2f); QColor color( palette().color(QPalette::Button) ); if(brightness > 0) { qreal t = (brightness * BUTTON_BRIGHTESS); color.setRedF( qMin(color.redF()+t,1.0) ); color.setGreenF( qMin(color.greenF()+t,1.0) ); color.setBlueF( qMin(color.blueF()+t,1.0) ); } float t = sinf(m_Pos); const float TRAVEL_45_DEGREES_IN_RADIANS = 0.785398163f; float radians = (t * TRAVEL_45_DEGREES_IN_RADIANS); float armPenWidth = (BORDER * 2); QPointF base(m_MetroRect.x()+m_MetroRect.width()*0.5, m_MetroRect.bottom()); QColor axisColor(color); axisColor.setAlpha(180); painter.setPen( QPen(axisColor,HALF_BORDER) ); painter.drawLine(base.x(), base.y(), base.x(), m_MetroRect.y()); painter.setPen( QPen(color,BORDER,Qt::SolidLine,Qt::SquareCap,Qt::RoundJoin) ); painter.setBrush(Qt::NoBrush); painter.drawRoundedRect(m_MetroRect, ROUNDED, ROUNDED); QPointF tip(base.x() + m_ArmLength*sinf(radians), m_MetroRect.height() - m_ArmLength*cosf(radians)); painter.setPen( QPen(color,armPenWidth,Qt::SolidLine,Qt::RoundCap) ); painter.drawLine(base, tip); if( !text().isEmpty() ) { int hoverRaise = qRound(m_Hover * BUTTON_RAISE); painter.setFont( font() ); painter.setPen( palette().color(QPalette::ButtonText) ); painter.drawText(QRect(0,0,width(),m_MetroRect.y()-hoverRaise), Qt::AlignCenter|Qt::TextWordWrap|Qt::TextDontClip, text()); if( !m_Label.isEmpty() ) painter.drawText(QRect(0,m_MetroRect.bottom(),width(),height()-m_MetroRect.bottom()+hoverRaise), Qt::AlignCenter|Qt::TextWordWrap|Qt::TextDontClip, m_Label); } else if( !m_Label.isEmpty() ) { int hoverRaise = qRound(m_Hover * BUTTON_RAISE); painter.setFont( font() ); painter.setPen( palette().color(QPalette::ButtonText) ); painter.drawText(QRect(0,m_MetroRect.bottom(),width(),height()-m_MetroRect.bottom()+hoverRaise), Qt::AlignCenter|Qt::TextWordWrap|Qt::TextDontClip, m_Label); } if( m_Paused ) { painter.setOpacity(0.8); color = color.lighter(250); painter.setPen(color); painter.setBrush(BG_COLOR); int pauseSize = qRound(0.6 * qMin(m_MetroRect.width(),m_MetroRect.height())); QRect pauseRect( m_MetroRect.x() + qRound((m_MetroRect.width()-pauseSize)*0.5), m_MetroRect.y() + qRound((m_MetroRect.height()-pauseSize)*0.5), pauseSize, pauseSize ); painter.drawRoundedRect(pauseRect, ROUNDED, ROUNDED); int w = qRound(pauseSize * 0.35); int h = qRound(pauseSize * 0.7); pauseRect.adjust(w, h, -w, -h); painter.setPen( QPen(color,pauseSize*0.1,Qt::SolidLine,Qt::RoundCap) ); painter.drawLine(pauseRect.left(), pauseRect.top(), pauseRect.left(), pauseRect.bottom()); painter.drawLine(pauseRect.right(), pauseRect.top(), pauseRect.right(), pauseRect.bottom()); } }
void FadeFlicker::paintEvent(QPaintEvent* /*event*/) { QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing); QPainterPath clip; clip.addRoundedRect(m_FlickerRect, ROUNDED, ROUNDED); painter.setClipPath(clip); const QPixmap &pixmap = m_Images[m_ImageIndex].pixmap; if( !pixmap.isNull() ) { painter.drawPixmap( m_FlickerRect.x() + qRound((m_FlickerRect.width()-pixmap.width())*0.5), m_FlickerRect.y() + qRound((m_FlickerRect.height()-pixmap.height())*0.5), pixmap ); } painter.setClipping(false); float brightness = m_Click; if(m_Hover > 0) brightness += (m_Hover*0.2f); QColor color( palette().color(QPalette::Button) ); if(brightness > 0) { qreal t = (brightness * BUTTON_BRIGHTESS); color.setRedF( qMin(color.redF()+t,1.0) ); color.setGreenF( qMin(color.greenF()+t,1.0) ); color.setBlueF( qMin(color.blueF()+t,1.0) ); } painter.setPen( QPen(color,BORDER,Qt::SolidLine,Qt::SquareCap,Qt::RoundJoin) ); painter.setBrush(Qt::NoBrush); painter.drawRoundedRect(m_FlickerRect, ROUNDED, ROUNDED); painter.setClipPath(clip); int h = qRound(m_FlickerRect.height() * m_Value); painter.fillRect(m_FlickerRect.x(), m_FlickerRect.bottom()-h, m_FlickerRect.width(), h, color); painter.setClipping(false); if( !text().isEmpty() ) { int hoverRaise = qRound(m_Hover * BUTTON_RAISE); painter.setFont( font() ); painter.setPen( palette().color(QPalette::ButtonText) ); painter.drawText(QRect(0,0,width(),m_FlickerRect.y()-hoverRaise), Qt::AlignCenter|Qt::TextWordWrap|Qt::TextDontClip, text()); if( !m_Label.isEmpty() ) painter.drawText(QRect(0,m_FlickerRect.bottom(),width(),height()-m_FlickerRect.bottom()+hoverRaise), Qt::AlignCenter|Qt::TextWordWrap|Qt::TextDontClip, m_Label); } else if( !m_Label.isEmpty() ) { int hoverRaise = qRound(m_Hover * BUTTON_RAISE); painter.setFont( font() ); painter.setPen( palette().color(QPalette::ButtonText) ); painter.drawText(QRect(0,m_FlickerRect.bottom(),width(),height()-m_FlickerRect.bottom()+hoverRaise), Qt::AlignCenter|Qt::TextWordWrap|Qt::TextDontClip, m_Label); } if( m_Paused ) { painter.setOpacity(0.8); color = color.lighter(250); painter.setPen(color); painter.setBrush(BG_COLOR); int pauseSize = qRound(0.6 * qMin(m_FlickerRect.width(),m_FlickerRect.height())); QRect pauseRect( m_FlickerRect.x() + qRound((m_FlickerRect.width()-pauseSize)*0.5), m_FlickerRect.y() + qRound((m_FlickerRect.height()-pauseSize)*0.5), pauseSize, pauseSize ); painter.drawRoundedRect(pauseRect, ROUNDED, ROUNDED); int pw = qRound(pauseSize * 0.35); int ph = qRound(pauseSize * 0.7); pauseRect.adjust(pw, ph, -pw, -ph); painter.setPen( QPen(color,pauseSize*0.1,Qt::SolidLine,Qt::RoundCap) ); painter.drawLine(pauseRect.left(), pauseRect.top(), pauseRect.left(), pauseRect.bottom()); painter.drawLine(pauseRect.right(), pauseRect.top(), pauseRect.right(), pauseRect.bottom()); } }