5#ifndef QMACSTYLE_MAC_P_P_H
6#define QMACSTYLE_MAC_P_P_H
10#include <QtCore/qhash.h>
11#include <QtCore/qlist.h>
12#include <QtCore/qmap.h>
13#include <QtCore/qmath.h>
14#include <QtCore/qpointer.h>
15#include <QtCore/qtextstream.h>
17#include <QtGui/private/qpainter_p.h>
19#include <QtGui/qbitmap.h>
20#include <QtGui/qevent.h>
21#include <QtGui/qpaintdevice.h>
22#include <QtGui/qpainter.h>
23#include <QtGui/qpixmapcache.h>
25#include <QtWidgets/private/qapplication_p.h>
26#include <QtWidgets/private/qcommonstyle_p.h>
27#include <QtWidgets/private/qstylehelper_p.h>
29#include <QtWidgets/qapplication.h>
30#include <QtWidgets/qfocusframe.h>
31#include <QtWidgets/qformlayout.h>
32#include <QtWidgets/qlayout.h>
33#include <QtWidgets/qstyleoption.h>
34#include <QtWidgets/qtextedit.h>
36#if QT_CONFIG(checkbox)
37#include <QtWidgets/qcheckbox.h>
39#if QT_CONFIG(combobox)
40#include <QtWidgets/private/qcombobox_p.h>
41#include <QtWidgets/qcombobox.h>
43#if QT_CONFIG(datetimeedit)
44#include <QtWidgets/qdatetimeedit.h>
46#if QT_CONFIG(dialogbuttonbox)
47#include <QtWidgets/qdialogbuttonbox.h>
49#if QT_CONFIG(dockwidget)
50#include <QtWidgets/qdockwidget.h>
52#if QT_CONFIG(graphicsview)
53#include <QtWidgets/qgraphicsproxywidget.h>
54#include <QtWidgets/qgraphicsview.h>
56#if QT_CONFIG(groupbox)
57#include <QtWidgets/qgroupbox.h>
59#if QT_CONFIG(itemviews)
60#include <QtWidgets/qheaderview.h>
62#if QT_CONFIG(lineedit)
63#include <QtWidgets/qlineedit.h>
65#if QT_CONFIG(listview)
66#include <QtWidgets/qlistview.h>
68#if QT_CONFIG(mainwindow)
69#include <QtWidgets/qmainwindow.h>
72#include <QtWidgets/qmenubar.h>
74#if QT_CONFIG(progressbar)
75#include <QtWidgets/qprogressbar.h>
77#if QT_CONFIG(pushbutton)
78#include <QtWidgets/qpushbutton.h>
80#include <QtWidgets/qradiobutton.h>
81#if QT_CONFIG(rubberband)
82#include <QtWidgets/qrubberband.h>
84#if QT_CONFIG(sizegrip)
85#include <QtWidgets/qsizegrip.h>
88#include <QtWidgets/qspinbox.h>
90#if QT_CONFIG(splitter)
91#include <QtWidgets/qsplitter.h>
93#if QT_CONFIG(tableview)
94#include <QtWidgets/qtableview.h>
97#include <QtWidgets/qtoolbar.h>
99#if QT_CONFIG(toolbutton)
100#include <QtWidgets/qtoolbutton.h>
102#if QT_CONFIG(treeview)
103#include <QtWidgets/qtreeview.h>
125
126
127
128
129
130
131
135#define CT2(c1, c2) ((uint(c1) << 16
) | uint(c2))
137#define SIZE(large, small, mini)
138 (controlSize == QStyleHelper::SizeLarge ? (large) : controlSize == QStyleHelper::SizeSmall ? (small) : (mini))
141#define return_SIZE(large, small, mini)
143 static const int sizes[] = { (large), (small), (mini) };
144 return sizes[controlSize];
147class QMacStylePrivate :
public QCommonStylePrivate
149 Q_DECLARE_PUBLIC(QMacStyle)
152 North, South, East, West
155 enum CocoaControlType {
167 Button_WindowMiniaturize,
170 ProgressIndicator_Determinate,
171 ProgressIndicator_Indeterminate,
174 SegmentedControl_First,
175 SegmentedControl_Middle,
176 SegmentedControl_Last,
177 SegmentedControl_Single,
180 SplitView_Horizontal,
186 struct CocoaControl {
188 CocoaControl(CocoaControlType t, QStyleHelper::WidgetSizePolicy s);
190 CocoaControlType type;
191 QStyleHelper::WidgetSizePolicy size;
193 bool operator==(
const CocoaControl &other)
const;
195 QSizeF defaultFrameSize()
const;
196 QRectF adjustedControlFrame(
const QRectF &rect)
const;
197 QMarginsF titleMargins()
const;
199 bool getCocoaButtonTypeAndBezelStyle(NSButtonType *buttonType, NSBezelStyle *bezelStyle)
const;
203 typedef void (^DrawRectBlock)(CGContextRef,
const CGRect &);
209 static const int PushButtonLeftOffset;
210 static const int PushButtonRightOffset;
211 static const int PushButtonContentPadding;
213 enum Animates { AquaPushButton, AquaProgressBar, AquaListViewItemOpen, AquaScrollBar };
214 QStyleHelper::WidgetSizePolicy aquaSizeConstrain(
const QStyleOption *option,
const QWidget *widg,
215 QStyle::ContentsType ct = QStyle::CT_CustomBase,
216 QSize szHint=QSize(-1, -1), QSize *insz = 0)
const;
217 QStyleHelper::WidgetSizePolicy effectiveAquaSizeConstrain(
const QStyleOption *option,
const QWidget *widg,
218 QStyle::ContentsType ct = QStyle::CT_CustomBase,
219 QSize szHint=QSize(-1, -1), QSize *insz = 0)
const;
220 inline int animateSpeed(Animates)
const {
return 33; }
223 static CGRect comboboxInnerBounds(
const CGRect &outterBounds,
const CocoaControl &cocoaWidget);
225 static QRectF comboboxEditBounds(
const QRectF &outterBounds,
const CocoaControl &cw);
227 void setAutoDefaultButton(QObject *button)
const;
229 NSView *cocoaControl(CocoaControl widget)
const;
230 NSCell *cocoaCell(CocoaControl widget)
const;
232 void setupNSGraphicsContext(CGContextRef cg,
bool flipped)
const;
233 void restoreNSGraphicsContext(CGContextRef cg)
const;
235 void setupVerticalInvertedXform(CGContextRef cg,
bool reverse,
bool vertical,
const CGRect &rect)
const;
237 void drawNSViewInRect(NSView *view,
const QRectF &rect, QPainter *p,
__attribute__((noescape)) DrawRectBlock drawRectBlock = nil)
const;
238 void resolveCurrentNSView(QWindow *window)
const;
240 void drawProgressBar(QPainter *p,
const QStyleOptionProgressBar *pb)
const;
241 void drawFocusRing(QPainter *p,
const QRectF &targetRect,
int hMargin,
int vMargin,
const CocoaControl &cw)
const;
243 void drawToolbarButtonArrow(
const QStyleOption *opt, QPainter *p)
const;
245 QPainterPath windowPanelPath(
const QRectF &r)
const;
247 CocoaControlType windowButtonCocoaControl(QStyle::SubControl sc)
const;
250 void tabLayout(
const QStyleOptionTab *opt,
const QWidget *widget, QRect *textRect, QRect *iconRect)
const override;
251 static Direction tabDirection(QTabBar::Shape shape);
252 static bool verticalTabs(QMacStylePrivate::Direction tabDirection);
256 mutable QPointer<QObject> autoDefaultButton;
257 static QList<QPointer<QObject> > scrollBars;
259 mutable QPointer<QFocusFrame> focusWidget;
260 mutable NSView *backingStoreNSView;
261 mutable QHash<CocoaControl, NSView *> cocoaControls;
262 mutable QHash<CocoaControl, NSCell *> cocoaCells;
264 std::optional<QFont> smallSystemFont;
virtual void drawItemText(QPainter *p, const QRect &r, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole=QPalette::NoRole) const
Draws the given text in the specified rectangle using the provided painter and palette.
int pixelMetric(PixelMetric pm, const QStyleOption *opt=0, const QWidget *widget=nullptr) const
\reimp
QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w=nullptr) const
\reimp
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w=nullptr) const
\reimp
virtual int styleHint(StyleHint sh, const QStyleOption *opt=0, const QWidget *w=nullptr, QStyleHintReturn *shret=nullptr) const
\reimp
QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget=nullptr) const
\reimp
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *w=nullptr) const
\reimp
SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *w=nullptr) const
\reimp
void polish(QWidget *w)
\reimp
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const
\reimp
void unpolish(QWidget *w)
\reimp
QPalette standardPalette() const
Returns the style's standard palette.
void polish(QPalette &pal)
\reimp
bool event(QEvent *e)
This virtual function receives events to an object and should return true if the event e was recogniz...
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const
\reimp
static QMacStyle * create()
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w=nullptr) const
\reimp
QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt, const QWidget *widget=nullptr) const
\reimp
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *w=nullptr) const
\reimp
Q_STATIC_LOGGING_CATEGORY(lcAccessibilityCore, "qt.accessibility.core")
Q_FORWARD_DECLARE_OBJC_CLASS(NSView)
static const QColor lightMainWindowGradientEnd(200, 200, 200)
static QStyleHelper::WidgetSizePolicy getControlSize(const QStyleOption *option, const QWidget *widget)
#define QMAC_QAQUASTYLE_SIZE_CONSTRAIN
static const int qt_mac_aqua_metrics[]
static QStyleHelper::WidgetSizePolicy qt_aqua_guess_size(const QWidget *widg, QSize large, QSize small, QSize mini)
static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QStyleOption *opt, const QWidget *widg, QSize szHint, QStyleHelper::WidgetSizePolicy sz)
static NSUserInterfaceLayoutDirection qt_macLayoutDirectionFromQt(Qt::LayoutDirection direction)
static const QColor lightMainWindowGradientBegin(240, 240, 240)
void adjustPushButtonShadowMargins(QRectF &rect, QStyleHelper::WidgetSizePolicy size)
static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl)
void drawTickMarks(CGContextRef ctx, NSSlider *nsSlider, const QStyleOptionSlider *sliderOpt)
static const int toolButtonArrowMargin
static CGRect qt_alignmentRectForFrame(CGRect rect, QStyleHelper::WidgetSizePolicy size, QMacStylePrivate::CocoaControlType ct)
static bool isInMacUnifiedToolbarArea(QWindow *window, int windowY)
static const QMarginsF comboBoxFocusRingMargins[3]
const int pushButtonBevelRectOffsets[3]
static bool setupScroller(NSScroller *scroller, const QStyleOptionSlider *sb)
static QPixmap darkenPixmap(const QPixmap &pixmap)
static const QColor titlebarSeparatorLineActive(111, 111, 111)
void drawSliderKnob(CGContextRef ctx, NSSlider *slider)
size_t qHash(const QMacStylePrivate::CocoaControl &cw, size_t seed=0)
static const QMarginsF pushButtonShadowMargins[3]
static const int headerSectionArrowHeight
static const QColor darkMainWindowGradientBegin(47, 47, 47)
static const qreal titleBarIconTitleSpacing
static const QMarginsF pullDownButtonShadowMargins[3]
@ SmallProgressBarShadowOutset
@ LargeProgressBarThickness
@ ProgressBarShadowOutset
@ NormalProgressBarThickness
static const qreal titleBarButtonSpacing
QMacStylePrivate::CocoaControlType cocoaControlType(const QStyleOption *opt, const QWidget *w)
static const QColor darkMainWindowGradientEnd(47, 47, 47)
static const qreal popupButtonDefaultHeight[3]
static const int headerSectionSeparatorInset
static const qreal titleBarTitleRightMargin
static const int DisclosureOffset
static QString qt_mac_removeMnemonics(const QString &original)
static void setLayoutItemMargins(int left, int top, int right, int bottom, QRect *rect, Qt::LayoutDirection dir)
static int qt_mac_aqua_get_metric(QAquaMetric m)
static const qreal comboBoxDefaultHeight[3]
static const qreal pushButtonDefaultHeight[3]
static const qreal focusRingWidth
static const QColor darkModeSeparatorLine(88, 88, 88)
static const QColor titlebarSeparatorLineInactive(131, 131, 131)
static const int toolButtonArrowSize
static bool qt_macWindowMainWindow(const QWidget *window)
#define return_SIZE(large, small, mini)
Q_FORWARD_DECLARE_OBJC_CLASS(NSCell)
#define SIZE(large, small, mini)
Q_FORWARD_DECLARE_MUTABLE_CG_TYPE(CGContext)