From b213d5bfa3a8ed81077cd8eaf229764ff2f1b346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 15 Oct 2012 17:06:34 +0200 Subject: Make QPen default to 1-width non-cosmetic. Use the Qt4CompatiblePainting render hint when painting with QPainter to treat default constructed QPens as cosmetic still. The NonCosmeticDefaultPen render hint gets documented as obsolete, since it was in any case not respected by the raster nor OpenGL paint engine. Change-Id: I04d910e9700baf7f13a8aac07a3633014bb9283e Reviewed-by: Jens Bache-Wiig --- src/printsupport/kernel/qpaintengine_alpha.cpp | 8 ++++++-- src/printsupport/kernel/qprintengine_win.cpp | 13 ++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) (limited to 'src/printsupport') diff --git a/src/printsupport/kernel/qpaintengine_alpha.cpp b/src/printsupport/kernel/qpaintengine_alpha.cpp index e3312f2db7..387e87766b 100644 --- a/src/printsupport/kernel/qpaintengine_alpha.cpp +++ b/src/printsupport/kernel/qpaintengine_alpha.cpp @@ -45,6 +45,7 @@ #include #include "private/qpaintengine_alpha_p.h" +#include "private/qpainter_p.h" #include "private/qpicture_p.h" #include "private/qfont_p.h" #include "QtGui/qpicture.h" @@ -384,11 +385,14 @@ QAlphaPaintEnginePrivate::~QAlphaPaintEnginePrivate() QRectF QAlphaPaintEnginePrivate::addPenWidth(const QPainterPath &path) { + Q_Q(QAlphaPaintEngine); + QPainterPath tmp = path; if (m_pen.style() == Qt::NoPen) return (path.controlPointRect() * m_transform).boundingRect(); - if (m_pen.isCosmetic()) + bool cosmetic = qt_pen_is_cosmetic(m_pen, q->state->renderHints()); + if (cosmetic) tmp = path * m_transform; QPainterPathStroker stroker; @@ -399,7 +403,7 @@ QRectF QAlphaPaintEnginePrivate::addPenWidth(const QPainterPath &path) stroker.setJoinStyle(m_pen.joinStyle()); stroker.setCapStyle(m_pen.capStyle()); tmp = stroker.createStroke(tmp); - if (m_pen.isCosmetic()) + if (cosmetic) return tmp.controlPointRect(); return (tmp.controlPointRect() * m_transform).boundingRect(); diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp index 27351dee48..28e0363d6e 100644 --- a/src/printsupport/kernel/qprintengine_win.cpp +++ b/src/printsupport/kernel/qprintengine_win.cpp @@ -852,6 +852,8 @@ void QWin32PrintEnginePrivate::fillPath_dev(const QPainterPath &path, const QCol void QWin32PrintEnginePrivate::strokePath_dev(const QPainterPath &path, const QColor &color, qreal penWidth) { + Q_Q(QWin32PrintEngine); + composeGdiPath(path); LOGBRUSH brush; brush.lbStyle = BS_SOLID; @@ -868,7 +870,9 @@ void QWin32PrintEnginePrivate::strokePath_dev(const QPainterPath &path, const QC else if (pen.joinStyle() == Qt::RoundJoin) joinStyle = PS_JOIN_ROUND; - HPEN pen = ExtCreatePen(((penWidth == 0) ? PS_COSMETIC : PS_GEOMETRIC) + bool cosmetic = qt_pen_is_cosmetic(pen, q->state->renderHints()); + + HPEN pen = ExtCreatePen((cosmetic ? PS_COSMETIC : PS_GEOMETRIC) | PS_SOLID | capStyle | joinStyle, (penWidth == 0) ? 1 : penWidth, &brush, 0, 0); @@ -885,6 +889,8 @@ void QWin32PrintEnginePrivate::fillPath(const QPainterPath &path, const QColor & void QWin32PrintEnginePrivate::strokePath(const QPainterPath &path, const QColor &color) { + Q_Q(QWin32PrintEngine); + QPainterPathStroker stroker; if (pen.style() == Qt::CustomDashLine) { stroker.setDashPattern(pen.dashPattern()); @@ -898,11 +904,12 @@ void QWin32PrintEnginePrivate::strokePath(const QPainterPath &path, const QColor QPainterPath stroke; qreal width = pen.widthF(); - if (pen.style() == Qt::SolidLine && (pen.isCosmetic() || matrix.type() < QTransform::TxScale)) { + bool cosmetic = qt_pen_is_cosmetic(pen, q->state->renderHints()); + if (pen.style() == Qt::SolidLine && (cosmetic || matrix.type() < QTransform::TxScale)) { strokePath_dev(path * matrix, color, width); } else { stroker.setWidth(width); - if (pen.isCosmetic()) { + if (cosmetic) { stroke = stroker.createStroke(path * matrix); } else { stroke = stroker.createStroke(path) * painterMatrix; -- cgit v1.2.3