QDrawUtil: use QPainterStateGuard
Replace the internal PainterStateGuard class with the now public QPainterStateGuard. Pick-to: 6.9 Change-Id: I9c072ce6e45ddfe2d0a8aba789311193788dee5a Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
7690b6260e
commit
204df603ef
@ -5,6 +5,7 @@
|
|||||||
#include "qbitmap.h"
|
#include "qbitmap.h"
|
||||||
#include "qpixmapcache.h"
|
#include "qpixmapcache.h"
|
||||||
#include "qpainter.h"
|
#include "qpainter.h"
|
||||||
|
#include "qpainterstateguard.h"
|
||||||
#include "qpalette.h"
|
#include "qpalette.h"
|
||||||
#include "qstylehelper_p.h"
|
#include "qstylehelper_p.h"
|
||||||
#include <private/qpaintengineex_p.h>
|
#include <private/qpaintengineex_p.h>
|
||||||
@ -14,35 +15,6 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
namespace {
|
|
||||||
class PainterStateGuard {
|
|
||||||
Q_DISABLE_COPY_MOVE(PainterStateGuard)
|
|
||||||
public:
|
|
||||||
explicit PainterStateGuard(QPainter *p) : m_painter(p) {}
|
|
||||||
~PainterStateGuard()
|
|
||||||
{
|
|
||||||
for ( ; m_level > 0; --m_level)
|
|
||||||
m_painter->restore();
|
|
||||||
}
|
|
||||||
|
|
||||||
void save()
|
|
||||||
{
|
|
||||||
m_painter->save();
|
|
||||||
++m_level;
|
|
||||||
}
|
|
||||||
|
|
||||||
void restore()
|
|
||||||
{
|
|
||||||
m_painter->restore();
|
|
||||||
--m_level;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
QPainter *m_painter;
|
|
||||||
int m_level= 0;
|
|
||||||
};
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\headerfile <qdrawutil.h>
|
\headerfile <qdrawutil.h>
|
||||||
\inmodule QtWidgets
|
\inmodule QtWidgets
|
||||||
@ -92,10 +64,9 @@ void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2,
|
|||||||
qWarning("qDrawShadeLine: Invalid parameters");
|
qWarning("qDrawShadeLine: Invalid parameters");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PainterStateGuard painterGuard(p);
|
QPainterStateGuard painterGuard(p);
|
||||||
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
||||||
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
||||||
painterGuard.save();
|
|
||||||
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
||||||
p->scale(inverseScale, inverseScale);
|
p->scale(inverseScale, inverseScale);
|
||||||
x1 = qRound(devicePixelRatio * x1);
|
x1 = qRound(devicePixelRatio * x1);
|
||||||
@ -107,7 +78,6 @@ void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2,
|
|||||||
p->translate(0.5, 0.5);
|
p->translate(0.5, 0.5);
|
||||||
}
|
}
|
||||||
int tlw = lineWidth*2 + midLineWidth; // total line width
|
int tlw = lineWidth*2 + midLineWidth; // total line width
|
||||||
QPen oldPen = p->pen(); // save pen
|
|
||||||
if (sunken)
|
if (sunken)
|
||||||
p->setPen(pal.color(QPalette::Dark));
|
p->setPen(pal.color(QPalette::Dark));
|
||||||
else
|
else
|
||||||
@ -175,7 +145,6 @@ void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2,
|
|||||||
p->drawPolyline(a);
|
p->drawPolyline(a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p->setPen(oldPen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -223,10 +192,9 @@ void qDrawShadeRect(QPainter *p, int x, int y, int w, int h,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PainterStateGuard painterGuard(p);
|
QPainterStateGuard painterGuard(p);
|
||||||
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
||||||
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
||||||
painterGuard.save();
|
|
||||||
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
||||||
p->scale(inverseScale, inverseScale);
|
p->scale(inverseScale, inverseScale);
|
||||||
x = qRound(devicePixelRatio * x);
|
x = qRound(devicePixelRatio * x);
|
||||||
@ -237,8 +205,6 @@ void qDrawShadeRect(QPainter *p, int x, int y, int w, int h,
|
|||||||
midLineWidth = qRound(devicePixelRatio * midLineWidth);
|
midLineWidth = qRound(devicePixelRatio * midLineWidth);
|
||||||
p->translate(0.5, 0.5);
|
p->translate(0.5, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
QPen oldPen = p->pen();
|
|
||||||
if (sunken)
|
if (sunken)
|
||||||
p->setPen(pal.dark().color());
|
p->setPen(pal.dark().color());
|
||||||
else
|
else
|
||||||
@ -288,14 +254,11 @@ void qDrawShadeRect(QPainter *p, int x, int y, int w, int h,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fill) {
|
if (fill) {
|
||||||
QBrush oldBrush = p->brush();
|
|
||||||
int tlw = lineWidth + midLineWidth;
|
int tlw = lineWidth + midLineWidth;
|
||||||
p->setPen(Qt::NoPen);
|
p->setPen(Qt::NoPen);
|
||||||
p->setBrush(*fill);
|
p->setBrush(*fill);
|
||||||
p->drawRect(x+tlw, y+tlw, w-2*tlw, h-2*tlw);
|
p->drawRect(x+tlw, y+tlw, w-2*tlw, h-2*tlw);
|
||||||
p->setBrush(oldBrush);
|
|
||||||
}
|
}
|
||||||
p->setPen(oldPen); // restore pen
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -337,11 +300,10 @@ void qDrawShadePanel(QPainter *p, int x, int y, int w, int h,
|
|||||||
qWarning("qDrawShadePanel: Invalid parameters");
|
qWarning("qDrawShadePanel: Invalid parameters");
|
||||||
}
|
}
|
||||||
|
|
||||||
PainterStateGuard painterGuard(p);
|
QPainterStateGuard painterGuard(p);
|
||||||
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
||||||
bool isTranslated = false;
|
bool isTranslated = false;
|
||||||
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
||||||
painterGuard.save();
|
|
||||||
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
||||||
p->scale(inverseScale, inverseScale);
|
p->scale(inverseScale, inverseScale);
|
||||||
x = qRound(devicePixelRatio * x);
|
x = qRound(devicePixelRatio * x);
|
||||||
@ -361,7 +323,6 @@ void qDrawShadePanel(QPainter *p, int x, int y, int w, int h,
|
|||||||
if (fill->color() == light)
|
if (fill->color() == light)
|
||||||
light = pal.midlight().color();
|
light = pal.midlight().color();
|
||||||
}
|
}
|
||||||
QPen oldPen = p->pen(); // save pen
|
|
||||||
QList<QLineF> lines;
|
QList<QLineF> lines;
|
||||||
lines.reserve(2*lineWidth);
|
lines.reserve(2*lineWidth);
|
||||||
|
|
||||||
@ -406,7 +367,6 @@ void qDrawShadePanel(QPainter *p, int x, int y, int w, int h,
|
|||||||
p->translate(-0.5, -0.5);
|
p->translate(-0.5, -0.5);
|
||||||
p->fillRect(x+lineWidth, y+lineWidth, w-lineWidth*2, h-lineWidth*2, *fill);
|
p->fillRect(x+lineWidth, y+lineWidth, w-lineWidth*2, h-lineWidth*2, *fill);
|
||||||
}
|
}
|
||||||
p->setPen(oldPen); // restore pen
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -433,11 +393,10 @@ static void qDrawWinShades(QPainter *p,
|
|||||||
if (w < 2 || h < 2) // can't do anything with that
|
if (w < 2 || h < 2) // can't do anything with that
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PainterStateGuard painterGuard(p);
|
QPainterStateGuard painterGuard(p);
|
||||||
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
||||||
bool isTranslated = false;
|
bool isTranslated = false;
|
||||||
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
||||||
painterGuard.save();
|
|
||||||
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
||||||
p->scale(inverseScale, inverseScale);
|
p->scale(inverseScale, inverseScale);
|
||||||
x = qRound(devicePixelRatio * x);
|
x = qRound(devicePixelRatio * x);
|
||||||
@ -448,7 +407,6 @@ static void qDrawWinShades(QPainter *p,
|
|||||||
isTranslated = true;
|
isTranslated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QPen oldPen = p->pen();
|
|
||||||
QPoint a[3] = { QPoint(x, y+h-2), QPoint(x, y), QPoint(x+w-2, y) };
|
QPoint a[3] = { QPoint(x, y+h-2), QPoint(x, y), QPoint(x+w-2, y) };
|
||||||
p->setPen(c1);
|
p->setPen(c1);
|
||||||
p->drawPolyline(a, 3);
|
p->drawPolyline(a, 3);
|
||||||
@ -468,7 +426,6 @@ static void qDrawWinShades(QPainter *p,
|
|||||||
p->fillRect(QRect(x+2, y+2, w-4, h-4), *fill);
|
p->fillRect(QRect(x+2, y+2, w-4, h-4), *fill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p->setPen(oldPen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -582,8 +539,7 @@ void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &c,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PainterStateGuard painterGuard(p);
|
QPainterStateGuard painterGuard(p);
|
||||||
painterGuard.save();
|
|
||||||
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
||||||
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
||||||
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
||||||
@ -646,8 +602,7 @@ void qDrawPlainRoundedRect(QPainter *p, int x, int y, int w, int h,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PainterStateGuard painterGuard(p);
|
QPainterStateGuard painterGuard(p);
|
||||||
painterGuard.save();
|
|
||||||
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
const qreal devicePixelRatio = QStyleHelper::getDpr(p);
|
||||||
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
if (!qFuzzyCompare(devicePixelRatio, qreal(1))) {
|
||||||
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
const qreal inverseScale = qreal(1) / devicePixelRatio;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user