void Context2D::setShadowOffsetX(qreal x) { if (m_state.shadowOffsetX == x) return; m_state.shadowOffsetX = x; updateShadowBuffer(); if (m_painter.device() == &m_shadowbuffer && m_state.shadowBlur>0) endPainting(); m_state.flags |= DirtyShadowOffsetX; }
void Context2D::setShadowBlur(qreal b) { if (m_state.shadowBlur == b) return; m_state.shadowBlur = b; updateShadowBuffer(); if (m_painter.device() == &m_shadowbuffer && m_state.shadowBlur>0) endPainting(); m_state.flags |= DirtyShadowBlur; }
void Context2D::beginPainting() { if (m_width <= 0 || m_height <=0) return; if (m_pixmap.width() != m_width || m_pixmap.height() != m_height) { if (m_painter.isActive()) m_painter.end(); m_pixmap = QPixmap(m_width, m_height); m_pixmap.fill(parent()->property("color").value<QColor>()); } if (m_state.shadowBlur > 0 && m_painter.device() != &m_shadowbuffer) { if (m_painter.isActive()) m_painter.end(); updateShadowBuffer(); m_painter.begin(&m_shadowbuffer); m_painter.setViewport(m_state.shadowOffsetX, m_state.shadowOffsetY, m_shadowbuffer.width(), m_shadowbuffer.height()); m_shadowbuffer.fill(Qt::transparent); } if (!m_painter.isActive()) { m_painter.begin(&m_pixmap); m_painter.setRenderHint(QPainter::Antialiasing); if (!m_state.clipPath.isEmpty()) m_painter.setClipPath(m_state.clipPath); m_painter.setBrush(m_state.fillStyle); m_painter.setOpacity(m_state.globalAlpha); QPen pen; pen.setBrush(m_state.strokeStyle); if (pen.style() == Qt::NoPen) pen.setStyle(Qt::SolidLine); pen.setCapStyle(m_state.lineCap); pen.setJoinStyle(m_state.lineJoin); pen.setWidthF(m_state.lineWidth); pen.setMiterLimit(m_state.miterLimit); m_painter.setPen(pen); } else { setupPainter(); m_state.flags = 0; } }