return QAquaSizeMini;
return QAquaSizeUnknown;
}
+
+ Q_Q(const QMacStyle);
QSize large = qt_aqua_get_known_size(ct, widg, szHint, QAquaSizeLarge),
small = qt_aqua_get_known_size(ct, widg, szHint, QAquaSizeSmall),
mini = qt_aqua_get_known_size(ct, widg, szHint, QAquaSizeMini);
*/
QSize QMacStylePrivate::pushButtonSizeFromContents(const QStyleOptionButton *btn) const
{
+ Q_Q(const QMacStyle);
QSize csz(0, 0);
QSize iconSize = btn->icon.isNull() ? QSize(0, 0)
: (btn->iconSize + QSize(QMacStylePrivate::PushButtonContentPadding, 0));
if (!macStyle)
return false;
HIThemeButtonDrawInfo bdi;
- macStyle->d->initHIThemePushButton(option, pushButton, kThemeStateActive, &bdi);
+ macStyle->d_func()->initHIThemePushButton(option, pushButton, kThemeStateActive, &bdi);
return bdi.kind == kThemeBevelButton;
}
explicit user style settings, etc.
*/
void QMacStylePrivate::initComboboxBdi(const QStyleOptionComboBox *combo, HIThemeButtonDrawInfo *bdi,
- const QWidget *widget, const ThemeDrawState &tds)
+ const QWidget *widget, const ThemeDrawState &tds) const
{
bdi->version = qt_mac_hitheme_version;
bdi->adornment = kThemeAdornmentArrowLeftArrow;
}
void QMacStylePrivate::getSliderInfo(QStyle::ComplexControl cc, const QStyleOptionSlider *slider,
- HIThemeTrackDrawInfo *tdi, const QWidget *needToRemoveMe)
+ HIThemeTrackDrawInfo *tdi, const QWidget *needToRemoveMe) const
{
memset(tdi, 0, sizeof(HIThemeTrackDrawInfo)); // We don't get it all for some reason or another...
tdi->version = qt_mac_hitheme_version;
}
}
-QMacStylePrivate::QMacStylePrivate(QMacStyle *style)
- : timerID(-1), progressFrame(0), q(style), mouseDown(false)
+QMacStylePrivate::QMacStylePrivate()
+ : timerID(-1), progressFrame(0), mouseDown(false)
{
defaultButtonStart = CFAbsoluteTimeGetCurrent();
memset(&buttonState, 0, sizeof(ButtonState));
void QMacStylePrivate::startAnimationTimer()
{
+ Q_Q(QMacStyle);
if ((defaultButton || !progressBars.isEmpty() || !scrollBars.isEmpty()) && timerID <= -1)
- timerID = startTimer(animateSpeed(AquaListViewItemOpen));
+ timerID = q->startTimer(animateSpeed(AquaListViewItemOpen));
}
bool QMacStylePrivate::addWidget(QWidget *w)
|| scrollBars.contains(static_cast<QScrollBar*>(w)))
return false;
+ Q_Q(QMacStyle);
if (QPushButton *btn = qobject_cast<QPushButton *>(w)) {
- btn->installEventFilter(this);
+ btn->installEventFilter(q);
if (btn->isDefault() || (btn->autoDefault() && btn->hasFocus()))
startAnimate(AquaPushButton, btn);
return true;
} else {
bool isProgressBar = (qobject_cast<QProgressBar *>(w));
if (isProgressBar) {
- w->installEventFilter(this);
+ w->installEventFilter(q);
startAnimate(AquaProgressBar, w);
return true;
}
bool isScrollBar = (qobject_cast<QScrollBar *>(w));
if (isScrollBar) {
- w->installEventFilter(this);
+ w->installEventFilter(q);
startAnimate(AquaScrollBar, w);
return true;
}
}
if (w->isWindow()) {
- w->installEventFilter(this);
+ w->installEventFilter(q);
return true;
}
return false;
return tds;
}
-void QMacStylePrivate::timerEvent(QTimerEvent *)
+void QMacStylePrivate::animate()
{
+ Q_Q(QMacStyle);
int animated = 0;
if (defaultButton && defaultButton->isEnabled() && defaultButton->window()->isActiveWindow()
&& defaultButton->isVisibleTo(0) && (defaultButton->isDefault()
}
}
if (animated <= 0) {
- killTimer(timerID);
+ q->killTimer(timerID);
timerID = -1;
}
}
-bool QMacStylePrivate::eventFilter(QObject *o, QEvent *e)
+/*! \reimp */
+bool QMacStyle::eventFilter(QObject *o, QEvent *e)
{
//animate
+ Q_D(QMacStyle);
if (QProgressBar *pb = qobject_cast<QProgressBar *>(o)) {
switch (e->type()) {
default:
break;
case QEvent::Show:
- if (!progressBars.contains(pb))
- startAnimate(AquaProgressBar, pb);
+ if (!d->progressBars.contains(pb))
+ d->startAnimate(QMacStylePrivate::AquaProgressBar, pb);
break;
case QEvent::Destroy:
case QEvent::Hide:
- progressBars.removeAll(pb);
+ d->progressBars.removeAll(pb);
}
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
} else if (QScrollBar *sb = qobject_cast<QScrollBar *>(o)) {
const QAbstractScrollArea *scrollArea = scrollBarsScrollArea(sb);
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7 &&
[NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay && scrollArea) {
- OverlayScrollBarInfo& info = scrollBarInfos[sb];
+ QMacStylePrivate::OverlayScrollBarInfo& info = d->scrollBarInfos[sb];
const qreal elapsed = info.lastUpdate.msecsTo(QDateTime::currentDateTime());
- const CGFloat opacity = 1.0 - qMax(0.0, (elapsed - ScrollBarFadeOutDelay)
- / ScrollBarFadeOutDuration);
+ const CGFloat opacity = 1.0 - qMax(0.0, (elapsed - QMacStylePrivate::ScrollBarFadeOutDelay)
+ / QMacStylePrivate::ScrollBarFadeOutDuration);
switch (e->type()) {
case QEvent::MouseMove:
// whenever the mouse moves on a not 100% transparent scroll bar,
break;
case QEvent::FocusIn:
if (btn->autoDefault())
- startAnimate(AquaPushButton, btn);
+ d->startAnimate(QMacStylePrivate::AquaPushButton, btn);
break;
case QEvent::Destroy:
case QEvent::Hide:
- if (btn == defaultButton)
- stopAnimate(AquaPushButton, btn);
+ if (btn == d->defaultButton)
+ d->stopAnimate(QMacStylePrivate::AquaPushButton, btn);
break;
case QEvent::MouseButtonPress:
// It is very confusing to keep the button pulsing, so just stop the animation.
if (static_cast<QMouseEvent *>(e)->button() == Qt::LeftButton)
- mouseDown = true;
- stopAnimate(AquaPushButton, btn);
+ d->mouseDown = true;
+ d->stopAnimate(QMacStylePrivate::AquaPushButton, btn);
break;
case QEvent::MouseButtonRelease:
if (static_cast<QMouseEvent *>(e)->button() == Qt::LeftButton)
- mouseDown = false;
+ d->mouseDown = false;
// fall through
case QEvent::FocusOut:
case QEvent::Show:
|| e->type() == QEvent::WindowActivate)
&& pBtn->isDefault())) {
if (pBtn->window()->isActiveWindow()) {
- startAnimate(AquaPushButton, pBtn);
+ d->startAnimate(QMacStylePrivate::AquaPushButton, pBtn);
}
break;
}
}
QMacStyle::QMacStyle()
- : QWindowsStyle()
+ : QWindowsStyle(*new QMacStylePrivate)
{
- d = new QMacStylePrivate(this);
-
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+ Q_D(QMacStyle);
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) {
d->receiver = [[NotificationReceiver alloc] initWithPrivate:d];
NotificationReceiver *receiver = static_cast<NotificationReceiver *>(d->receiver);
QMacStyle::~QMacStyle()
{
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+ Q_D(QMacStyle);
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) {
[reinterpret_cast<NSScroller*>(d->nsscroller) release];
delete qt_mac_backgroundPattern;
qt_mac_backgroundPattern = 0;
- delete d;
}
/*! \internal
void QMacStyle::polish(QPalette &pal)
{
+ Q_D(QMacStyle);
if (!qt_mac_backgroundPattern) {
if (!qApp)
return;
void QMacStyle::polish(QWidget* w)
{
+ Q_D(QMacStyle);
d->addWidget(w);
if (qt_mac_is_metal(w) && !w->testAttribute(Qt::WA_SetPalette)) {
// Set a clear brush so that the metal shines through.
void QMacStyle::unpolish(QWidget* w)
{
+ Q_D(QMacStyle);
d->removeWidget(w);
if ((qobject_cast<QMenu*>(w) || qt_mac_is_metal(w)) && !w->testAttribute(Qt::WA_SetPalette)) {
QPalette pal = qApp->palette(w);
int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QWidget *widget) const
{
+ Q_D(const QMacStyle);
int controlSize = getControlSize(opt, widget);
SInt32 ret = 0;
void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
const QWidget *w) const
{
+ Q_D(const QMacStyle);
ThemeDrawState tds = d->getDrawState(opt->state);
QMacCGContext cg(p);
switch (pe) {
void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter *p,
const QWidget *w) const
{
+ Q_D(const QMacStyle);
ThemeDrawState tds = d->getDrawState(opt->state);
QMacCGContext cg(p);
switch (ce) {
bdi.adornment |= kThemeAdornmentDefault;
bdi.animation.time.start = d->defaultButtonStart;
bdi.animation.time.current = CFAbsoluteTimeGetCurrent();
- if (d->timerID <= -1)
- QMetaObject::invokeMethod(d, "startAnimationTimer", Qt::QueuedConnection);
+ const_cast<QMacStylePrivate*>(d)->startAnimationTimer();
}
// Unlike Carbon, we want the button to always be drawn inside its bounds.
// Therefore, make the button a bit smaller, so that even if it got focus,
QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt,
const QWidget *widget) const
{
+ Q_D(const QMacStyle);
QRect rect;
int controlSize = getControlSize(opt, widget);
void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p,
const QWidget *widget) const
{
+ Q_D(const QMacStyle);
ThemeDrawState tds = d->getDrawState(opt->state);
QMacCGContext cg(p);
switch (cc) {
const QStyleOptionComplex *opt,
const QPoint &pt, const QWidget *widget) const
{
+ Q_D(const QMacStyle);
SubControl sc = QStyle::SC_None;
switch (cc) {
case CC_ComboBox:
QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc,
const QWidget *widget) const
{
+ Q_D(const QMacStyle);
QRect ret;
switch (cc) {
case CC_Slider:
QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
const QSize &csz, const QWidget *widget) const
{
+ Q_D(const QMacStyle);
QSize sz(csz);
bool useAquaGuideline = true;
bool QMacStyle::event(QEvent *e)
{
+ Q_D(QMacStyle);
if(e->type() == QEvent::FocusIn) {
QWidget *f = 0;
QWidget *focusWidget = QApplication::focusWidget();
} else if(e->type() == QEvent::FocusOut) {
if(d->focusWidget)
d->focusWidget->setWidget(0);
+ } else if (e->type() == QEvent::Timer) {
+ if (static_cast<QTimerEvent*>(e)->timerId() == d->timerID)
+ d->animate();
}
return false;
}
#undef check
#include "qmacstyle_mac.h"
+#include "qwindowsstyle_p.h"
#include <private/qapplication_p.h>
#include <private/qcombobox_p.h>
#include <private/qpainter_p.h>
bool qt_mac_buttonIsRenderedFlat(const QPushButton *pushButton, const QStyleOptionButton *option);
-class QMacStylePrivate : public QObject
+class QMacStylePrivate : public QWindowsStylePrivate
{
- Q_OBJECT
-
+ Q_DECLARE_PUBLIC(QMacStyle)
public:
- QMacStylePrivate(QMacStyle *style);
+ QMacStylePrivate();
// Ideally these wouldn't exist, but since they already exist we need some accessors.
static const int PushButtonLeftOffset;
QStyle::ContentsType ct = QStyle::CT_CustomBase,
QSize szHint=QSize(-1, -1), QSize *insz = 0) const;
void getSliderInfo(QStyle::ComplexControl cc, const QStyleOptionSlider *slider,
- HIThemeTrackDrawInfo *tdi, const QWidget *needToRemoveMe);
+ HIThemeTrackDrawInfo *tdi, const QWidget *needToRemoveMe) const;
+ void animate();
bool doAnimate(Animates);
inline int animateSpeed(Animates) const { return 33; }
const HIThemeButtonDrawInfo *bdi) const;
void initComboboxBdi(const QStyleOptionComboBox *combo, HIThemeButtonDrawInfo *bdi,
- const QWidget *widget, const ThemeDrawState &tds);
+ const QWidget *widget, const ThemeDrawState &tds) const;
static HIRect comboboxInnerBounds(const HIRect &outerBounds, int buttonKind);
const ThemeDrawState tds,
HIThemeButtonDrawInfo *bdi) const;
QPixmap generateBackgroundPattern() const;
-protected:
- bool eventFilter(QObject *, QEvent *);
- void timerEvent(QTimerEvent *);
-private slots:
void startAnimationTimer();
public:
QDateTime lastHovered;
bool cleared;
};
- QMap<const QWidget*, OverlayScrollBarInfo> scrollBarInfos;
+ mutable QMap<const QWidget*, OverlayScrollBarInfo> scrollBarInfos;
struct ButtonState {
int frame;
enum { ButtonDark, ButtonLight } dir;
} buttonState;
UInt8 progressFrame;
- QPointer<QFocusFrame> focusWidget;
+ mutable QPointer<QFocusFrame> focusWidget;
CFAbsoluteTime defaultButtonStart;
- QMacStyle *q;
bool mouseDown;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
void* receiver;