summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/graphics/qt/StillImageQt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/graphics/qt/StillImageQt.cpp')
-rw-r--r--WebCore/platform/graphics/qt/StillImageQt.cpp33
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);
}
}