#include "eleborder.h" #include #include #include #include EleBorder::EleBorder(QString path, QString eff, int speed, QWidget *parent) : QWidget{parent}, speed(speed) { img.load(path); if(eff.startsWith("ro")) this->eff = 'r'; else if(eff.startsWith("bl")) this->eff = 'b'; } void EleBorder::paintEvent(QPaintEvent *) { if(eff=='b' && off > 0) return; if(timerId==0) { if(eff=='r') timerId = startTimer(speed==1 ? 66 : (speed==2 ? 33 : 16), Qt::PreciseTimer); else if(eff=='b') timerId = startTimer(speed==1 ? 500 : (speed==2 ? 250 : 66)); } int bdWidth = img.height(); int halfBdWidth = (bdWidth+1)/2; QBrush brush(img); QTransform transTop = QTransform::fromTranslate(halfBdWidth+off, 0); QTransform transRight = QTransform::fromTranslate(width() - bdWidth, halfBdWidth*3-width()+off); transRight.rotate(90); QTransform transBottom = QTransform::fromTranslate(halfBdWidth*3-height()-off, height() - bdWidth); transBottom.rotate(180); QTransform transLeft = QTransform::fromTranslate(0, halfBdWidth-off); transLeft.rotate(270); QPainter painter(this); brush.setTransform(transTop); QPainterPath path(QPointF(0, 0)); path.lineTo(width(), 0); path.lineTo(width() - bdWidth, bdWidth); path.lineTo(bdWidth, bdWidth); path.closeSubpath(); painter.fillPath(path, brush); brush.setTransform(transRight); path = QPainterPath(QPointF(width(), 0)); path.lineTo(width(), height()); path.lineTo(width() - bdWidth, height() - bdWidth); path.lineTo(width() - bdWidth, bdWidth); path.closeSubpath(); painter.fillPath(path, brush); brush.setTransform(transBottom); path = QPainterPath(QPointF(width(), height())); path.lineTo(0, height()); path.lineTo(bdWidth, height() - bdWidth); path.lineTo(width() - bdWidth, height() - bdWidth); path.closeSubpath(); painter.fillPath(path, brush); brush.setTransform(transLeft); path = QPainterPath(QPointF(0, height())); path.lineTo(0, 0); path.lineTo(bdWidth, bdWidth); path.lineTo(bdWidth, height() - bdWidth); path.closeSubpath(); painter.fillPath(path, brush); } void EleBorder::timerEvent(QTimerEvent *) { if(isVisible()) { if(eff=='r') { if(off >= img.width() - 1) off = 0; else off++; } else off = off==0 ? 1 : 0; update(); } else if(timerId!=0) { killTimer(timerId); timerId = 0; } }