summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/styles/qcommonstyle.cpp6
-rw-r--r--tests/auto/widgets/styles/qstyle/tst_qstyle.cpp48
2 files changed, 51 insertions, 3 deletions
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index 748cef20c1..4b6e3ac5c4 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -1597,7 +1597,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
if (!hasArrow) {
proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pm);
} else {
- drawArrow(this, toolbutton, pr, p, widget);
+ drawArrow(proxy(), toolbutton, pr, p, widget);
}
alignment |= Qt::AlignCenter;
} else {
@@ -1607,7 +1607,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
if (!hasArrow) {
proxy()->drawItemPixmap(p, QStyle::visualRect(opt->direction, rect, pr), Qt::AlignCenter, pm);
} else {
- drawArrow(this, toolbutton, pr, p, widget);
+ drawArrow(proxy(), toolbutton, pr, p, widget);
}
alignment |= Qt::AlignLeft | Qt::AlignVCenter;
}
@@ -1618,7 +1618,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
} else {
rect.translate(shiftX, shiftY);
if (hasArrow) {
- drawArrow(this, toolbutton, rect, p, widget);
+ drawArrow(proxy(), toolbutton, rect, p, widget);
} else {
proxy()->drawItemPixmap(p, rect, Qt::AlignCenter, pm);
}
diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
index 21369d4520..dafa95fb25 100644
--- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
+++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
@@ -131,6 +131,8 @@ private slots:
void defaultFont();
void testDrawingShortcuts();
void testFrameOnlyAroundContents();
+
+ void testProxyCalled();
private:
void lineUpLayoutTest(QStyle *);
QWidget *testWidget;
@@ -808,5 +810,51 @@ void tst_QStyle::testFrameOnlyAroundContents()
}
+class ProxyTest: public QProxyStyle
+{
+ Q_OBJECT
+public:
+ ProxyTest(QStyle *style = 0)
+ :QProxyStyle(style)
+ , called(false)
+ {}
+
+ void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE {
+ called = true;
+ return QProxyStyle::drawPrimitive(pe, opt, p, w);
+ }
+ mutable bool called;
+};
+
+
+void tst_QStyle::testProxyCalled()
+{
+ QToolButton b;
+ b.setArrowType(Qt::DownArrow);
+ QStyleOptionToolButton opt;
+ opt.init(&b);
+ opt.features |= QStyleOptionToolButton::Arrow;
+ QPixmap surface(QSize(200, 200));
+ QPainter painter(&surface);
+
+ QStringList keys = QStyleFactory::keys();
+ QVector<QStyle*> styles;
+ styles.reserve(keys.size() + 1);
+
+ styles << new QCommonStyle();
+
+ Q_FOREACH (const QString &key, keys) {
+ styles << QStyleFactory::create(key);
+ }
+
+ Q_FOREACH (QStyle *style, styles) {
+ ProxyTest testStyle;
+ testStyle.setBaseStyle(style);
+ style->drawControl(QStyle::CE_ToolButtonLabel, &opt, &painter, &b);
+ QVERIFY(testStyle.called);
+ delete style;
+ }
+}
+
QTEST_MAIN(tst_QStyle)
#include "tst_qstyle.moc"