44 m_d->globalPainter = painter;
45 m_d->alignedGlobalClipRect = globalClipRect.toAlignedRect();
47 if (!
m_d->alignedGlobalClipRect.isValid()) {
48 m_d->alignedGlobalClipRect = QRect();
50 m_d->shapeImage = QImage(
m_d->alignedGlobalClipRect.size(), QImage::Format_ARGB32);
51 m_d->maskImage = QImage(
m_d->alignedGlobalClipRect.size(), QImage::Format_ARGB32);
53 QTransform moveToBufferTransform =
54 QTransform::fromTranslate(-
m_d->alignedGlobalClipRect.x(),
55 -
m_d->alignedGlobalClipRect.y());
57 m_d->shapePainter.begin(&
m_d->shapeImage);
59 m_d->shapePainter.save();
60 m_d->shapePainter.setCompositionMode(QPainter::CompositionMode_Source);
61 m_d->shapePainter.fillRect(QRect(QPoint(),
m_d->alignedGlobalClipRect.size()), Qt::transparent);
62 m_d->shapePainter.restore();
64 m_d->shapePainter.setTransform(moveToBufferTransform);
65 m_d->shapePainter.setTransform(painter->transform(),
true);
66 if (painter->hasClipping()) {
67 m_d->shapePainter.setClipPath(painter->clipPath());
69 m_d->shapePainter.setOpacity(painter->opacity());
70 m_d->shapePainter.setBrush(painter->brush());
71 m_d->shapePainter.setPen(painter->pen());
73 m_d->maskPainter.begin(&
m_d->maskImage);
75 m_d->maskPainter.save();
76 m_d->maskPainter.setCompositionMode(QPainter::CompositionMode_Source);
77 m_d->maskPainter.fillRect(QRect(QPoint(),
m_d->alignedGlobalClipRect.size()), Qt::transparent);
78 m_d->maskPainter.restore();
80 m_d->maskPainter.setTransform(moveToBufferTransform);
81 m_d->maskPainter.setTransform(painter->transform(),
true);
82 if (painter->hasClipping()) {
83 m_d->maskPainter.setClipPath(painter->clipPath());
85 m_d->maskPainter.setOpacity(painter->opacity());
86 m_d->maskPainter.setBrush(painter->brush());
87 m_d->maskPainter.setPen(painter->pen());
111 const int nPixels =
m_d->maskImage.height() *
m_d->maskImage.width();
115 m_d->maskImage.bits(),
119 QPainterPath globalClipPath;
121 if (
m_d->globalPainter->hasClipping()) {
122 globalClipPath =
m_d->globalPainter->transform().map(
m_d->globalPainter->clipPath());
125 m_d->globalPainter->save();
127 m_d->globalPainter->setTransform(QTransform());
129 if (!globalClipPath.isEmpty()) {
130 m_d->globalPainter->setClipPath(globalClipPath);
133 m_d->globalPainter->drawImage(
m_d->alignedGlobalClipRect.topLeft(),
m_d->shapeImage);
134 m_d->globalPainter->restore();
virtual void applyLuminanceMask(quint8 *pixels, quint8 *maskPixels, const int nPixels) const =0
applyLuminanceMask This applies an ARGB32 mask to an ARGB32 image as per w3c specs....