#include "FluWatermark.h" #include "FluTextStyle.h" FluWatermark::FluWatermark(QQuickItem *parent) : QQuickPaintedItem(parent) { _gap = QPoint(100, 100); _offset = QPoint(_gap.x() / 2, _gap.y() / 2); _rotate = 22; _textColor = QColor(222, 222, 222, 222); _textSize = 16; setZ(9999); connect(this, &FluWatermark::textColorChanged, this, [=] { update(); }); connect(this, &FluWatermark::gapChanged, this, [=] { update(); }); connect(this, &FluWatermark::offsetChanged, this, [=] { update(); }); connect(this, &FluWatermark::textChanged, this, [=] { update(); }); connect(this, &FluWatermark::rotateChanged, this, [=] { update(); }); connect(this, &FluWatermark::textSizeChanged, this, [=] { update(); }); } void FluWatermark::paint(QPainter *painter) { QFont font; font.setFamily(FluTextStyle::getInstance()->family()); font.setPixelSize(_textSize); painter->setFont(font); painter->setPen(_textColor); QFontMetricsF fontMetrics(font); qreal fontWidth = fontMetrics.horizontalAdvance(_text); qreal fontHeight = fontMetrics.height(); int stepX = qRound(fontWidth + _gap.x()); int stepY = qRound(fontHeight + _gap.y()); int rowCount = qRound(width() / stepX + 1); int colCount = qRound(height() / stepY + 1); for (int r = 0; r < rowCount; r++) { for (int c = 0; c < colCount; c++) { qreal centerX = stepX * r + _offset.x() + fontWidth / 2.0; qreal centerY = stepY * c + _offset.y() + fontHeight / 2.0; painter->save(); painter->translate(centerX, centerY); painter->rotate(_rotate); painter->drawText(QRectF(-fontWidth / 2.0, -fontHeight / 2.0, fontWidth, fontHeight), _text); painter->restore(); } } }