summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Bache-Wiig <jbache@trolltech.com>2010-09-20 19:24:14 +0200
committerJens Bache-Wiig <jbache@trolltech.com>2010-09-20 19:24:14 +0200
commit347ae0c6b819473f790db3be960afc6e734eb92d (patch)
tree87e278556f0857e9817a2c6c83f2aaa60094677a
parentd9e5871377f87ced422c1d1763671e07175ccab9 (diff)
Fix text clipping issue
Fix problem with shadow state
-rw-r--r--src/context2d.cpp17
1 files 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);