diff options
Diffstat (limited to 'WebCore/platform/graphics/qt/StillImageQt.cpp')
-rw-r--r-- | WebCore/platform/graphics/qt/StillImageQt.cpp | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/WebCore/platform/graphics/qt/StillImageQt.cpp b/WebCore/platform/graphics/qt/StillImageQt.cpp index 3038356..51c9499 100644 --- a/WebCore/platform/graphics/qt/StillImageQt.cpp +++ b/WebCore/platform/graphics/qt/StillImageQt.cpp @@ -28,6 +28,7 @@ #include "config.h" #include "StillImageQt.h" +#include "ContextShadow.h" #include "GraphicsContext.h" #include "IntSize.h" @@ -67,34 +68,26 @@ void StillImage::draw(GraphicsContext* ctxt, const FloatRect& dst, if (m_pixmap->isNull()) return; - FloatRect normalizedSrc = src.normalized(); FloatRect normalizedDst = dst.normalized(); - QPainter* painter = ctxt->platformContext(); - QPainter::CompositionMode oldCompositionMode = painter->compositionMode(); - + CompositeOperator previousOperator = ctxt->compositeOperation(); ctxt->setCompositeOperation(op); - FloatSize shadowOffset; - float shadowBlur; - Color shadowColor; - if (ctxt->getShadow(shadowOffset, shadowBlur, shadowColor)) { - FloatRect shadowImageRect(normalizedDst); - shadowImageRect.move(shadowOffset.width(), shadowOffset.height()); - - QImage shadowImage(QSize(static_cast<int>(normalizedSrc.width()), static_cast<int>(normalizedSrc.height())), QImage::Format_ARGB32_Premultiplied); - QPainter p(&shadowImage); - p.setCompositionMode(QPainter::CompositionMode_Source); - p.fillRect(shadowImage.rect(), shadowColor); - p.setCompositionMode(QPainter::CompositionMode_DestinationIn); - p.drawPixmap(QRect(0, 0, normalizedDst.width(), normalizedDst.height()), *m_pixmap, normalizedSrc); - p.end(); - painter->drawImage(shadowImageRect, shadowImage, normalizedSrc); + QPainter* painter = ctxt->platformContext(); + + ContextShadow* shadow = ctxt->contextShadow(); + if (shadow->m_type != ContextShadow::NoShadow) { + QPainter* shadowPainter = shadow->beginShadowLayer(painter, normalizedDst); + if (shadowPainter) { + shadowPainter->setOpacity(static_cast<qreal>(shadow->m_color.alpha()) / 255); + shadowPainter->drawPixmap(normalizedDst, *m_pixmap, normalizedSrc); + shadow->endShadowLayer(painter); + } } painter->drawPixmap(normalizedDst, *m_pixmap, normalizedSrc); - painter->setCompositionMode(oldCompositionMode); + ctxt->setCompositeOperation(previousOperator); } } |