63 #include <QtTest/private/qtesthelpers_p.h>
72 void drawItemPixmap();
74 #ifndef QT_NO_STYLE_FUSION
75 void testFusionStyle();
77 void testWindowsStyle();
78 #if defined(Q_OS_WIN) && !defined(QT_NO_STYLE_WINDOWSVISTA)
79 void testWindowsVistaStyle();
84 void testStyleFactory();
85 void testProxyStyle();
86 #if !defined(QT_NO_STYLE_WINDOWS) && !defined(QT_NO_STYLE_FUSION)
87 void progressBarChangeStyle();
90 void testDrawingShortcuts();
91 void testFrameOnlyAroundContents();
93 void testProxyCalled();
94 void testStyleOptionInit();
96 void sliderPositionFromValue_data();
97 void sliderPositionFromValue();
98 void sliderValueFromPosition_data();
99 void sliderValueFromPosition();
101 bool testAllFunctions(
QStyle *);
102 bool testScrollBarSubControls(
const QStyle *
style);
104 void lineUpLayoutTest(
QStyle *);
116 void tst_QStyle::cleanup()
121 void tst_QStyle::testStyleFactory()
124 #ifndef QT_NO_STYLE_FUSION
127 #ifndef QT_NO_STYLE_WINDOWS
141 const QWidget *
widget =
nullptr)
const override
149 void tst_QStyle::testProxyStyle()
161 QVERIFY(testAllFunctions(proxyStyle));
170 QVERIFY(testAllFunctions(&doubleProxy));
179 void tst_QStyle::drawItemPixmap()
183 testWidget.
resize(300, 300);
186 QImage
image = testWidget.
grab().toImage();
200 testWidget.setStyle(
style);
216 QPixmap surface(QSize(200, 200));
223 QPixmap surface(QSize(200, 200));
232 QStyleOptionSlider copt4;
233 copt4.initFrom(&testWidget);
236 copt4.tickInterval = 25;
237 copt4.sliderValue = 50;
238 QStyleOptionSpinBox copt5;
239 copt5.initFrom(&testWidget);
261 qWarning(
"missing StandardPixmap: %d",
i);
273 return testScrollBarSubControls(
style);
276 bool tst_QStyle::testScrollBarSubControls(
const QStyle *
style)
284 for (
int sc : {1, 2, 4, 8}) {
291 qWarning() <<
"Unexpected null rect for subcontrol" << subControl;
299 #ifndef QT_NO_STYLE_FUSION
300 void tst_QStyle::testFusionStyle()
304 QVERIFY(testAllFunctions(fstyle.data()));
305 lineUpLayoutTest(fstyle.data());
309 void tst_QStyle::testWindowsStyle()
313 QVERIFY(testAllFunctions(wstyle.data()));
314 lineUpLayoutTest(wstyle.data());
318 pb.
rect = QRect(0,0,-9,0);
319 QPixmap surface(QSize(200, 200));
324 #if defined(Q_OS_WIN) && !defined(QT_NO_STYLE_WINDOWSVISTA)
325 void tst_QStyle::testWindowsVistaStyle()
329 QVERIFY(testAllFunctions(vistastyle.data()));
334 void tst_QStyle::testMacStyle()
337 QVERIFY(testAllFunctions(mstyle));
346 QPixmap big(400,400);
352 #if !defined(QT_NO_STYLE_WINDOWS) && !defined(QT_NO_STYLE_FUSION)
353 void tst_QStyle::progressBarChangeStyle()
385 font.setPointSize(9);
387 QSpinBox spinbox(&
widget);
390 combo.setEditable(
true);
391 layout.addWidget(&spinbox);
392 layout.addWidget(&lineedit);
398 for (QWidget *
w : children)
408 const int slDiff =
qAbs(spinbox.height() - lineedit.height());
409 const int scDiff =
qAbs(spinbox.height() - combo.height());
418 void tst_QStyle::defaultFont()
421 QFont pointFont = defaultFont;
422 pointFont.setPixelSize(9);
449 void tst_QStyle::testDrawingShortcuts()
482 static const int SCROLLBAR_SPACING = 33;
499 return SCROLLBAR_SPACING;
504 void tst_QStyle::testFrameOnlyAroundContents()
507 area.setGeometry(0, 0, 200, 200);
510 QWidget *
widget =
new QWidget(&area);
512 area.setStyle(winStyle.data());
513 area.verticalScrollBar()->setStyle(winStyle.data());
515 area.setVisible(
true);
516 int viewPortWidth = area.viewport()->width();
517 area.verticalScrollBar()->setStyle(&frameStyle);
518 area.setStyle(&frameStyle);
520 QCOMPARE(viewPortWidth, area.viewport()->width() + SCROLLBAR_SPACING);
531 const QWidget *
w)
const override
537 mutable bool called =
false;
541 void tst_QStyle::testProxyCalled()
548 QPixmap surface(QSize(200, 200));
574 mutable bool invalidOptionsDetected =
false;
579 checkStyleEnum<QStyle::PrimitiveElement>(pe,
opt);
584 checkStyleEnum<QStyle::ControlElement>(element,
opt);
589 checkStyleEnum<QStyle::SubElement>(subElement,
option);
594 checkStyleEnum<QStyle::ComplexControl>(cc,
opt);
599 checkStyleEnum<QStyle::ComplexControl>(cc,
opt);
604 checkStyleEnum<QStyle::PixelMetric>(metric,
option);
609 checkStyleEnum<QStyle::ContentsType>(ct,
opt);
614 checkStyleEnum<QStyle::StyleHint>(stylehint,
opt);
619 checkStyleEnum<QStyle::StandardPixmap>(standardPixmap,
opt);
624 checkStyleEnum<QStyle::StandardPixmap>(standardIcon,
option);
634 checkStyle(
QString::asprintf(
"QSizePolicy::ControlType(%i), QSizePolicy::ControlType(%i)", control1, control2).toLatin1(),
option);
641 invalidOptionsDetected =
true;
642 qWarning() << baseStyle()->metaObject()->className()
643 <<
"Invalid QStyleOption found for"
649 template<
typename MEnum>
651 static QMetaEnum _enum = QMetaEnum::fromType<MEnum>();
656 void tst_QStyle::testStyleOptionInit()
665 testAllFunctions(
style);
670 void tst_QStyle::sliderPositionFromValue_data()
672 QTest::addColumn<int>(
"min");
673 QTest::addColumn<int>(
"max");
674 QTest::addColumn<int>(
"value");
675 QTest::addColumn<int>(
"span");
676 QTest::addColumn<bool>(
"upsideDown");
677 QTest::addColumn<int>(
"position");
679 QTest::addRow(
"no span") << 12 << 56 << 34 << 0 <<
false << 0;
680 QTest::addRow(
"no span inverse") << 12 << 56 << 34 << 0 <<
true << 0;
682 QTest::addRow(
"value too small") << 34 << 56 << 12 << 2000 <<
false << 0;
684 QTest::addRow(
"no-range") << 12 << 12 << 12 << 2000 <<
false << 0;
685 QTest::addRow(
"no-range-inverse") << 12 << 12 << 12 << 2000 <<
true << 0;
687 QTest::addRow(
"close-to-max") << 12 << 34 << 33 << 2000 <<
false << 1909;
688 QTest::addRow(
"at-max") << 12 << 34 << 34 << 2000 <<
false << 2000;
689 QTest::addRow(
"close-to-max-inverse") << 12 << 34 << 33 << 2000 <<
true << 91;
690 QTest::addRow(
"at-max-inverse") << 12 << 34 << 34 << 2000 <<
true << 0;
692 QTest::addRow(
"big-range") << 100000 << 700000 << 250000 << 2000 <<
false << 500;
693 QTest::addRow(
"big-range-inverse") << 100000 << 700000 << 250000 << 2000 <<
true << 1500;
695 QTest::addRow(
"across-zero") << -1000 << 1000 << -500 << 100 <<
false << 25;
696 QTest::addRow(
"across-zero-inverse") << -1000 << 1000 << -500 << 100 <<
true << 75;
698 QTest::addRow(
"span>range") << 0 << 100 << 60 << 2000 <<
false << 1200;
699 QTest::addRow(
"span>range-inverse") << 0 << 100 << 60 << 2000 <<
true << 800;
701 QTest::addRow(
"overflow1 (QTBUG-101581)") << -1 << INT_MAX << 235 << 891 <<
false << 0;
702 QTest::addRow(
"overflow2") << INT_MIN << INT_MAX << 10 << 100 <<
false << 50;
703 QTest::addRow(
"overflow2-inverse") << INT_MIN << INT_MAX << 10 << 100 <<
true << 49;
704 QTest::addRow(
"overflow3") << INT_MIN << INT_MAX << -10 << 100 <<
false << 49;
705 QTest::addRow(
"overflow3-inverse") << INT_MIN << INT_MAX << -10 << 100 <<
true << 50;
708 void tst_QStyle::sliderPositionFromValue()
720 void tst_QStyle::sliderValueFromPosition_data()
722 QTest::addColumn<int>(
"min");
723 QTest::addColumn<int>(
"max");
724 QTest::addColumn<int>(
"position");
725 QTest::addColumn<int>(
"span");
726 QTest::addColumn<bool>(
"upsideDown");
727 QTest::addColumn<int>(
"value");
729 QTest::addRow(
"position zero") << 0 << 100 << 0 << 2000 <<
false << 0;
730 QTest::addRow(
"position zero inverse") << 0 << 100 << 0 << 2000 <<
true << 100;
732 QTest::addRow(
"span zero") << 0 << 100 << 1200 << 0 <<
false << 0;
733 QTest::addRow(
"span zero inverse") << 0 << 100 << 1200 << 0 <<
true << 100;
735 QTest::addRow(
"position > span") << -300 << -200 << 2 << 1 <<
false << -200;
736 QTest::addRow(
"position > span inverse") << -300 << -200 << 2 << 1 <<
true << -300;
738 QTest::addRow(
"large") << 0 << 100 << 1200 << 2000 <<
false << 60;
739 QTest::addRow(
"large-inverse") << 0 << 100 << 1200 << 2000 <<
true << 40;
741 QTest::addRow(
"normal") << 0 << 100 << 12 << 20 <<
false << 60;
742 QTest::addRow(
"inverse") << 0 << 100 << 12 << 20 <<
true << 40;
744 QTest::addRow(
"overflow1") << -1 << INT_MAX << 10 << 10 <<
false << INT_MAX;
745 QTest::addRow(
"overflow1-inverse") << -1 << INT_MAX << 10 << 10 <<
true << -1;
746 QTest::addRow(
"overflow2") << INT_MIN << INT_MAX << 5 << 10 <<
false << 0;
747 QTest::addRow(
"overflow2-inverse") << INT_MIN << INT_MAX << 5 << 10 <<
true << -1;
748 QTest::addRow(
"overflow3") << INT_MIN << 0 << 0 << 10 <<
false << INT_MIN;
749 QTest::addRow(
"overflow3-inverse") << INT_MIN << 0 << 0 << 10 <<
true << 0;
751 QTest::addRow(
"overflow4") << 0 << INT_MAX << INT_MAX/2-6 << INT_MAX/2-5 <<
false << INT_MAX-2;
752 QTest::addRow(
"overflow4-inverse") << 0 << INT_MAX << INT_MAX/2-6 << INT_MAX/2-5 <<
true << 2;
754 QTest::addRow(
"overflow5") << 0 << 4 << INT_MAX/4 << INT_MAX <<
false << 1;
755 QTest::addRow(
"overflow5-inverse") << 0 << 4 << INT_MAX/4 << INT_MAX <<
true << 3;
758 void tst_QStyle::sliderValueFromPosition()
771 #include "tst_qstyle.moc"
small capitals from c petite p scientific i
[1]
void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole=QPalette::NoRole) const override
int pixelMetric(PixelMetric pm, const QStyleOption *option, const QWidget *widget) const override
int styleHint(StyleHint hint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const override
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const override
static void setStyle(QStyle *)
static QWidgetList topLevelWidgets()
static void setFont(const QFont &, const char *className=nullptr)
The QByteArray class provides an array of bytes.
The QCommonStyle class encapsulates the common Look and Feel of a GUI.
static void processEvents(QEventLoop::ProcessEventsFlags flags=QEventLoop::AllEvents)
The QFontMetrics class provides font metrics information.
QGraphicsObject * parent
the parent of the item
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
The QLineEdit widget is a one-line text editor.
void reserve(qsizetype size)
QString objectName
the name of this object
QList< T > findChildren(const QString &aName, Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
void setObjectName(const QString &name)
The QPaintEvent class contains event parameters for paint events. \inmodule QtGui.
The QProgressBar widget provides a horizontal or vertical progress bar.
The QProxyStyle class is a convenience class that simplifies dynamically overriding QStyle elements.
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget=nullptr) const override
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget=nullptr) const override
int styleHint(StyleHint hint, const QStyleOption *option=nullptr, const QWidget *widget=nullptr, QStyleHintReturn *returnData=nullptr) const override
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const override
void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole=QPalette::NoRole) const override
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
int pixelMetric(PixelMetric metric, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget=nullptr) const override
QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const override
void setBaseStyle(QStyle *style)
void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget=nullptr) const override
QStyle * baseStyle() const
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
The QScopedPointer class stores a pointer to a dynamically allocated object, and deletes it upon dest...
T * data() const noexcept
The QString class provides a Unicode character string.
static QString fromLatin1(QByteArrayView ba)
static QString static QString asprintf(const char *format,...) Q_ATTRIBUTE_FORMAT_PRINTF(1
The QStringList class provides a list of strings.
static QStringList keys()
static QStyle * create(const QString &)
the exposed rectangle, in item coordinates
The QStyle class is an abstract base class that encapsulates the look and feel of a GUI.
@ SH_ScrollView_FrameOnlyAroundContents
@ SP_ToolBarVerticalExtensionButton
static int sliderPositionFromValue(int min, int max, int val, int space, bool upsideDown=false)
@ PM_LayoutVerticalSpacing
@ PM_ScrollView_ScrollBarSpacing
static int sliderValueFromPosition(int min, int max, int pos, int space, bool upsideDown=false)
virtual int pixelMetric(PixelMetric metric, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const =0
an OR combination of the tool button's features
a bitwise OR of the features that describe this frame.
The QStyleOption class stores the parameters used by QStyle functions.
void initFrom(const QWidget *w)
a bitwise OR of the features that describe this button
the position of the selected tab in relation to this tab
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const override
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const override
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const override
QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const override
int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const override
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget) const override
QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const override
int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const override
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const override
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const override
bool invalidOptionsDetected
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const override
backing_store_ptr info
[4]
QHighDpiScaling::Point position(T, QHighDpiScaling::Point::Kind)
Q_GUI_EXPORT bool qWaitForWindowExposed(QWindow *window, int timeout=5000)
Q_TESTLIB_EXPORT QTestData & addRow(const char *format,...) Q_ATTRIBUTE_FORMAT_PRINTF(1
Q_CORE_EXPORT void qWait(int ms)
constexpr struct q20::ranges::@310 all_of
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro vuzp8 reg2 vuzp d d ®2 endm macro vzip8 reg2 vzip d d ®2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld cleanup[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1 beq endif SRC MASK if dst_r_bpp DST_R else add endif PF add sub src_basereg pixdeinterleave mask_basereg pixdeinterleave dst_r_basereg process_pixblock_head pixblock_size cache_preload_simple process_pixblock_tail pixinterleave dst_w_basereg irp beq endif process_pixblock_tail_head tst beq irp if pixblock_size chunk_size tst beq pixld SRC pixld MASK if DST_R else pixld DST_R endif if src_basereg pixdeinterleave mask_basereg pixdeinterleave dst_r_basereg process_pixblock_head if pixblock_size cache_preload_simple endif process_pixblock_tail pixinterleave dst_w_basereg irp if pixblock_size chunk_size tst beq if DST_W else pixst DST_W else mov ORIG_W endif add lsl if lsl endif if lsl endif lsl endif lsl endif lsl endif subs mov DST_W if regs_shortage str endif bge start_of_loop_label endm macro generate_composite_function
EGLOutputLayerEXT EGLint EGLAttrib value
GLboolean GLboolean GLboolean b
GLfloat GLfloat GLfloat w
[0]
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const void * bits
GLenum GLenum GLsizei void GLsizei void void * span
QT_BEGIN_NAMESPACE typedef unsigned int QRgb
#define QTEST_MAIN(TestObject)
#define QFETCH(Type, name)
#define QVERIFY(statement)
#define QVERIFY2(statement, description)