Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qwindowsvistastyle_p_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QWINDOWSVISTASTYLE_P_P_H
6#define QWINDOWSVISTASTYLE_P_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists for the convenience
13// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header
14// file may change from version to version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtWidgets/private/qtwidgetsglobal_p.h>
22#include <private/qfonticonengine_p.h>
23#include <private/qpaintengine_raster_p.h>
24#include <qpaintengine.h>
25#include <qwidget.h>
26#include <qapplication.h>
27#include <qpixmapcache.h>
28#include <qstyleoption.h>
29#include <QtWidgets/private/qwindowsstyle_p_p.h>
30#include <QtCore/private/qflatmap_p.h>
31
32#if QT_CONFIG(pushbutton)
33#include <qpushbutton.h>
34#endif
35#include <qradiobutton.h>
36#if QT_CONFIG(lineedit)
37#include <qlineedit.h>
38#endif
39#include <qgroupbox.h>
40#if QT_CONFIG(toolbutton)
41#include <qtoolbutton.h>
42#endif
43#if QT_CONFIG(spinbox)
44#include <qspinbox.h>
45#endif
46#if QT_CONFIG(toolbar)
47#include <qtoolbar.h>
48#endif
49#if QT_CONFIG(combobox)
50#include <qcombobox.h>
51#endif
52#if QT_CONFIG(scrollbar)
53#include <qscrollbar.h>
54#endif
55#if QT_CONFIG(progressbar)
56#include <qprogressbar.h>
57#endif
58#if QT_CONFIG(dockwidget)
59#include <qdockwidget.h>
60#endif
61#if QT_CONFIG(listview)
62#include <qlistview.h>
63#endif
64#if QT_CONFIG(treeview)
65#include <qtreeview.h>
66#endif
67#include <qtextedit.h>
68#include <qmessagebox.h>
69#if QT_CONFIG(dialogbuttonbox)
70#include <qdialogbuttonbox.h>
71#endif
72#if QT_CONFIG(inputdialog)
73#include <qinputdialog.h>
74#endif
75#if QT_CONFIG(tableview)
76#include <qtableview.h>
77#endif
78#include <qdatetime.h>
79#if QT_CONFIG(commandlinkbutton)
80#include <qcommandlinkbutton.h>
81#endif
82#include <qlabel.h>
83#include <qheaderview.h>
84#include <uxtheme.h>
85
87
89{
90 Q_DECLARE_PUBLIC(QWindowsVistaStyle)
91
92public:
114
117
120
121 static HTHEME createTheme(int theme, const QWidget *widget);
122 static QString themeName(int theme);
123 static bool isItemViewDelegateLineEdit(const QWidget *widget);
124 static int pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option = nullptr, const QWidget *widget = nullptr);
125 static int fixedPixelMetric(QStyle::PixelMetric pm);
126 static bool isLineEditBaseColorSet(const QStyleOption *option, const QWidget *widget);
127 static HWND winId(const QWidget *widget);
128 static bool useVista(bool update = false);
129 static QBackingStore *backingStoreForWidget(const QWidget *widget);
130 static HDC hdcForWidgetBackingStore(const QWidget *widget);
131
132 void init(bool force = false);
133 void cleanup(bool force = false);
134 void cleanupHandleMap();
135
136 HBITMAP buffer(int w = 0, int h = 0);
138 { return bufferDC; }
139
140 bool isTransparent(QWindowsThemeData &QWindowsThemeData);
141 QRegion region(QWindowsThemeData &QWindowsThemeData);
142
143 bool drawBackground(QWindowsThemeData &QWindowsThemeData, qreal correctionFactor = 1);
144 bool drawBackgroundThruNativeBuffer(QWindowsThemeData &QWindowsThemeData, qreal aditionalDevicePixelRatio, qreal correctionFactor);
145 bool drawBackgroundDirectly(HDC dc, QWindowsThemeData &QWindowsThemeData, qreal aditionalDevicePixelRatio);
146
147 bool hasAlphaChannel(const QRect &rect);
148 bool fixAlphaChannel(const QRect &rect);
149 bool swapAlphaChannel(const QRect &rect, bool allPixels = false);
150
154 bool hasInitColors = false;
155
156 QTime animationTime() const;
157 bool transitionsEnabled() const;
158
159protected:
165
166private:
167 static bool initVistaTreeViewTheming(const QScreen *screen);
168 static void cleanupVistaTreeViewTheming();
169
170 static QBasicAtomicInt ref;
171 static bool useVistaTheme;
172
173 QHash<ThemeMapKey, ThemeMapData> alphaCache;
174 HDC bufferDC = nullptr;
175 HBITMAP bufferBitmap = nullptr;
176 HBITMAP nullBitmap = nullptr;
177 uchar *bufferPixels = nullptr;
178 int bufferW = 0;
179 int bufferH = 0;
180
181 static QVarLengthFlatMap<const QScreen *, HWND, 4> m_vistaTreeViewHelpers;
182};
183
185{
186public:
187 WinFontIconEngine(const QChar &glyph, const QFont &font);
188
189 QString key() const override;
190 QIconEngine *clone() const override;
191 QString string() const override;
192 void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override;
193
194protected:
197};
198
199QT_END_NAMESPACE
200
201#endif // QWINDOWSVISTASTYLE_P_P_H
friend class QPainter
friend class QWidget
Definition qpainter.h:431
The QWindows11Style class provides a look and feel suitable for applications on Microsoft Windows 11.
void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override
void unpolish(QWidget *widget) override
void polish(QWidget *widget) override
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const override
QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override
QRect subControlRect(ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget) const override
QWindows11Style(QWindows11StylePrivate &dd)
void polish(QPalette &pal) override
int pixelMetric(PixelMetric metric, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
int styleHint(StyleHint hint, const QStyleOption *opt=nullptr, const QWidget *widget=nullptr, QStyleHintReturn *returnData=nullptr) const override
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override
QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget=nullptr) const override
~QWindows11Style() override
Destructor.
HBITMAP buffer(int w=0, int h=0)
static int fixedPixelMetric(QStyle::PixelMetric pm)
static HDC hdcForWidgetBackingStore(const QWidget *widget)
static QBackingStore * backingStoreForWidget(const QWidget *widget)
bool swapAlphaChannel(const QRect &rect, bool allPixels=false)
bool drawBackgroundThruNativeBuffer(QWindowsThemeData &QWindowsThemeData, qreal aditionalDevicePixelRatio, qreal correctionFactor)
static HWND winId(const QWidget *widget)
void init(bool force=false)
static bool isLineEditBaseColorSet(const QStyleOption *option, const QWidget *widget)
bool drawBackgroundDirectly(HDC dc, QWindowsThemeData &QWindowsThemeData, qreal aditionalDevicePixelRatio)
static bool isItemViewDelegateLineEdit(const QWidget *widget)
static bool useVista(bool update=false)
bool fixAlphaChannel(const QRect &rect)
void cleanup(bool force=false)
bool isTransparent(QWindowsThemeData &QWindowsThemeData)
bool hasAlphaChannel(const QRect &rect)
QRegion region(QWindowsThemeData &QWindowsThemeData)
bool drawBackground(QWindowsThemeData &QWindowsThemeData, qreal correctionFactor=1)
static HTHEME createTheme(int theme, const QWidget *widget)
static int pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option=nullptr, const QWidget *widget=nullptr)
static QString themeName(int theme)
The QWindowsVistaStyle class provides a look and feel suitable for applications on Microsoft Windows ...
QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const override
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const override
int styleHint(StyleHint hint, const QStyleOption *opt=nullptr, const QWidget *widget=nullptr, QStyleHintReturn *returnData=nullptr) const override
SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget=nullptr) const override
void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override
void polish(QWidget *widget) override
int pixelMetric(PixelMetric metric, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget=nullptr) const override
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
\reimp
~QWindowsVistaStyle() override
Destructor.
void polish(QPalette &pal) override
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget=nullptr) const override
QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override
QWindowsVistaStyle(QWindowsVistaStylePrivate &dd)
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const override
void unpolish(QWidget *widget) override
QString string() const override
void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override
Uses the given painter to paint the icon with the required mode and state into the rectangle rect.
QString key() const override
\variable QIconEngine::ScaledPixmapArgument::size
QIconEngine * clone() const override
Reimplement this method to return a clone of this icon engine.
WinFontIconEngine(const QChar &glyph, const QFont &font)
WINUI3Color
@ fillControlAltSecondary
@ fillControlTertiary
@ frameColorStrongDisabled
@ textOnAccentPrimary
@ fillControlDefault
@ controlStrokeSecondary
@ frameColorStrong
@ surfaceStroke
@ fillControlDisabled
@ subtleHighlightColor
@ textPrimary
@ controlFillSolid
@ fillAccentSecondary
@ frameColorLight
@ subtlePressedColor
@ textDisabled
@ fillControlSecondary
@ textSecondary
@ controlStrokeOnAccentSecondary
@ fillAccentDefault
@ textOnAccentSecondary
@ focusFrameOuterStroke
@ textOnAccentDisabled
@ fillControlAltQuarternary
@ menuPanelFill
@ controlStrongFill
@ controlStrokePrimary
@ fillAccentDisabled
@ fillControlAltTertiary
@ fillControlAltDisabled
@ focusFrameInnerStroke
@ fillAccentTertiary