From 347ae0c6b819473f790db3be960afc6e734eb92d Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Mon, 20 Sep 2010 19:24:14 +0200 Subject: Fix text clipping issue Fix problem with shadow state --- src/context2d.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/context2d.cpp b/src/context2d.cpp index ec7b034..6dfc025 100644 --- a/src/context2d.cpp +++ b/src/context2d.cpp @@ -676,8 +676,9 @@ void Context2D::fillText(const QString &text, qreal x, qreal y) int yoffset = baseLineOffset(m_state.textBaseline, m_painter.fontMetrics()); int xoffset = textAlignOffset(m_state.textAlign, m_painter.fontMetrics(), text); QTextOption opt; // Adjust baseLine etc - m_painter.drawText(QRectF(x-xoffset, y-yoffset, m_pixmap.width(), m_painter.fontMetrics().height()), text, opt); + m_painter.drawText(QRectF(x-xoffset, y-yoffset, QWIDGETSIZE_MAX, m_painter.fontMetrics().height()), text, opt); m_painter.restore(); + endPainting(); scheduleChange(); } @@ -698,6 +699,7 @@ void Context2D::strokeText(const QString &text, qreal x, qreal y) textPath.addText(x-xoffset, y-yoffset+metrics.ascent(), font, text); m_painter.strokePath(textPath, QPen(m_state.fillStyle, m_state.lineWidth)); m_painter.restore(); + endPainting(); scheduleChange(); } @@ -880,6 +882,7 @@ Context2D::Context2D(QObject *parent) void Context2D::setupPainter() { + m_painter.setRenderHint(QPainter::Antialiasing, true); if ((m_state.flags & DirtyClippingRegion) && !m_state.clipPath.isEmpty()) m_painter.setClipPath(m_state.clipPath); if (m_state.flags & DirtyFillStyle) @@ -917,15 +920,13 @@ void Context2D::beginPainting() if (m_state.shadowBlur > 0) { if (m_shadowbuffer.width() != m_width || m_shadowbuffer.height() != m_height) { m_shadowbuffer = QImage(m_width, m_height, QImage::Format_ARGB32); - m_shadowbuffer.fill(Qt::transparent); } } if (!m_painter.isActive()) { - - if (m_state.shadowBlur == 0) + if (m_state.shadowBlur == 0) { m_painter.begin(&m_pixmap); - else { + } else { m_shadowbuffer.fill(Qt::transparent); m_painter.begin(&m_shadowbuffer); } @@ -944,6 +945,11 @@ void Context2D::beginPainting() pen.setMiterLimit(m_state.miterLimit); m_painter.setPen(pen); } else { + if (m_state.shadowBlur > 0 && m_painter.device() != &m_shadowbuffer) { + m_painter.end(); + m_shadowbuffer.fill(Qt::transparent); + m_painter.begin(&m_shadowbuffer); + } setupPainter(); m_state.flags = 0; } @@ -952,7 +958,6 @@ void Context2D::beginPainting() void Context2D::endPainting() { if (m_state.shadowBlur > 0) { - QImage alphaChannel = m_shadowbuffer.alphaChannel(); qt_blurImage(alphaChannel, m_state.shadowBlur, false, 1); -- cgit v1.2.3