150 vgSetPaint(opacityPaint(), VG_FILL_PATH);
151 vgSeti(VG_IMAGE_MODE, VG_DRAW_IMAGE_MULTIPLY);
153 vgSeti(VG_IMAGE_MODE, VG_DRAW_IMAGE_NORMAL);
156 if (m_linear_filtering)
157 vgSeti(VG_IMAGE_QUALITY, VG_IMAGE_QUALITY_BETTER);
159 vgSeti(VG_IMAGE_QUALITY, VG_IMAGE_QUALITY_NONANTIALIASED);
162 vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);
165 vgDrawImage(
static_cast<VGImage>(m_texture->comparisonKey()));
170 QRect dirtyRect = m_dirtyRect.isNull() ? QRect(0, 0, m_size.width(), m_size.height()) : m_dirtyRect;
174 painter.begin(&m_image);
175 if (m_smoothPainting) {
176 painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
181 if (m_contentsScale == 1) {
182 qreal scaleX = m_textureSize.width() / (qreal) m_size.width();
183 qreal scaleY = m_textureSize.height() / (qreal) m_size.height();
184 painter.scale(scaleX, scaleY);
185 clipRect = dirtyRect;
187 painter.scale(m_contentsScale, m_contentsScale);
189 QRect sclip(qFloor(dirtyRect.x()/m_contentsScale),
190 qFloor(dirtyRect.y()/m_contentsScale),
191 qCeil(dirtyRect.width()/m_contentsScale+dirtyRect.x()/m_contentsScale-qFloor(dirtyRect.x()/m_contentsScale)),
192 qCeil(dirtyRect.height()/m_contentsScale+dirtyRect.y()/m_contentsScale-qFloor(dirtyRect.y()/m_contentsScale)));
197 if (!m_dirtyRect.isNull())
198 painter.setClipRect(clipRect);
200 painter.setCompositionMode(QPainter::CompositionMode_Source);
201 painter.fillRect(clipRect, m_fillColor);
202 painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
204 m_item->paint(&painter);
207 m_dirtyRect = QRect();
212 uint textureFlags = m_opaquePainting ? 0 : QSGRenderContext::CreateTexture_Alpha;
213 m_texture =
new QSGOpenVGTexture(m_image, textureFlags);