diff options
Diffstat (limited to 'src/gui/effects/qgraphicseffect.cpp')
-rw-r--r-- | src/gui/effects/qgraphicseffect.cpp | 180 |
1 files changed, 0 insertions, 180 deletions
diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp index b04af7a..c1f8f06 100644 --- a/src/gui/effects/qgraphicseffect.cpp +++ b/src/gui/effects/qgraphicseffect.cpp @@ -63,8 +63,6 @@ \o QGraphicsColorizeEffect - renders the item in shades of any given color \o QGraphicsPixelizeEffect - pixelizes the item with any pixel size \o QGraphicsBlurEffect - blurs the item by a given radius - \o QGraphicsBloomEffect - applies a blooming / glowing effect - \o QGraphicsFrameEffect - adds a frame to the item \o QGraphicsShadowEffect - renders a dropshadow behind the item \endlist @@ -580,184 +578,6 @@ void QGraphicsBlurEffect::draw(QPainter *painter, QGraphicsEffectSource *source) painter->setWorldTransform(restoreTransform); } -QGraphicsBloomEffect::QGraphicsBloomEffect() - : QGraphicsEffect(*new QGraphicsBloomEffectPrivate) -{ -} - -QGraphicsBloomEffect::~QGraphicsBloomEffect() -{ -} - -int QGraphicsBloomEffect::blurRadius() const -{ - Q_D(const QGraphicsBloomEffect); - return d->blurRadius; -} - -void QGraphicsBloomEffect::setBlurRadius(int radius) -{ - Q_D(QGraphicsBloomEffect); - d->blurRadius = radius; - updateBoundingRect(); -} - -qreal QGraphicsBloomEffect::opacity() const -{ - Q_D(const QGraphicsBloomEffect); - return d->opacity; -} - -void QGraphicsBloomEffect::setOpacity(qreal alpha) -{ - Q_D(QGraphicsBloomEffect); - d->opacity = alpha; -} - -QRectF QGraphicsBloomEffect::boundingRectFor(const QRectF &rect) const -{ - Q_D(const QGraphicsBloomEffect); - const qreal delta = d->blurRadius * 3; - return rect.adjusted(-delta, -delta, delta, delta); -} - -// Change brightness (positive integer) of each pixel -static QImage brightened(const QImage& image, int brightness) -{ - int tab[ 256 ]; - for (int i = 0; i < 256; ++i) - tab[i] = qMin(i + brightness, 255); - - QImage img = image.convertToFormat(QImage::Format_ARGB32); - for (int y = 0; y < img.height(); y++) { - QRgb* line = (QRgb*)(img.scanLine(y)); - for (int x = 0; x < img.width(); x++) { - QRgb c = line[x]; - line[x] = qRgba(tab[qRed(c)], tab[qGreen(c)], tab[qBlue(c)], qAlpha(c)); - } - } - - return img; -} - -// Composite two QImages using given composition mode and opacity -static QImage composited(const QImage& img1, const QImage& img2, qreal opacity, QPainter::CompositionMode mode) -{ - QImage result = img1.convertToFormat(QImage::Format_ARGB32_Premultiplied); - QPainter painter(&result); - painter.setCompositionMode(mode); - painter.setOpacity(opacity); - painter.drawImage(0, 0, img2); - painter.end(); - return result; -} - -void QGraphicsBloomEffect::draw(QPainter *painter, QGraphicsEffectSource *source) -{ - Q_D(QGraphicsBloomEffect); - if (d->blurRadius <= 0) { - source->draw(painter); - return; - } - - QPoint offset; - const int radius = d->blurRadius; - - if (source->isPixmap()) { - // No point in drawing in device coordinates (pixmap will be scaled anyways). - const QPixmap pixmap = source->pixmap(Qt::LogicalCoordinates, &offset); - - // bloom routine - QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied); - QImage overlay = blurred(img, img.rect(), radius); - overlay = brightened(overlay, 70); - img = composited(img, overlay, d->opacity, QPainter::CompositionMode_Overlay); - - painter->drawImage(offset, img); - return; - } - - // Draw pixmap in device coordinates to avoid pixmap scaling. - const QPixmap pixmap = source->pixmap(Qt::DeviceCoordinates, &offset); - - // bloom routine - QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied); - QImage overlay = blurred(img, img.rect(), radius); - overlay = brightened(overlay, 70); - img = composited(img, overlay, d->opacity, QPainter::CompositionMode_Overlay); - - // Draw using an untransformed painter. - QTransform restoreTransform = painter->worldTransform(); - painter->setWorldTransform(QTransform()); - painter->drawImage(offset, img); - painter->setWorldTransform(restoreTransform); -} - -QGraphicsFrameEffect::QGraphicsFrameEffect() - : QGraphicsEffect(*new QGraphicsFrameEffectPrivate) -{ -} - -QGraphicsFrameEffect::~QGraphicsFrameEffect() -{ -} - -QColor QGraphicsFrameEffect::frameColor() const -{ - Q_D(const QGraphicsFrameEffect); - return d->color; -} - -void QGraphicsFrameEffect::setFrameColor(const QColor &c) -{ - Q_D(QGraphicsFrameEffect); - d->color = c; -} - -qreal QGraphicsFrameEffect::frameWidth() const -{ - Q_D(const QGraphicsFrameEffect); - return d->width; -} - -void QGraphicsFrameEffect::setFrameWidth(qreal frameWidth) -{ - Q_D(QGraphicsFrameEffect); - d->width = frameWidth; - updateBoundingRect(); -} - -qreal QGraphicsFrameEffect::frameOpacity() const -{ - Q_D(const QGraphicsFrameEffect); - return d->alpha; -} - -void QGraphicsFrameEffect::setFrameOpacity(qreal opacity) -{ - Q_D(QGraphicsFrameEffect); - d->alpha = opacity; -} - -QRectF QGraphicsFrameEffect::boundingRectFor(const QRectF &rect) const -{ - Q_D(const QGraphicsFrameEffect); - return rect.adjusted(-d->width, -d->width, d->width, d->width); -} - -void QGraphicsFrameEffect::draw(QPainter *painter, QGraphicsEffectSource *source) -{ - Q_D(QGraphicsFrameEffect); - painter->save(); - painter->setOpacity(painter->opacity() * d->alpha); - painter->setPen(Qt::NoPen); - painter->setBrush(d->color); - painter->drawRoundedRect(boundingRect(), 20, 20, Qt::RelativeSize); - painter->restore(); - - source->draw(painter); -} - QGraphicsShadowEffect::QGraphicsShadowEffect() : QGraphicsEffect(*new QGraphicsShadowEffectPrivate) { |