Add API in QWindowsPrivate to provide window palette
The window uses default palette (QPalette()) to determine frame color (either light or dark). This doesn't work for quickcontrols as they depend quicktheme palettes and they don't overwrite default palettes. This patch add API in QWindowPrivate to provide palette for window and this can be overridden by quickcontrol windows to provide their corresponding palette. Fixes: QTBUG-111491 Pick-to: 6.5 Change-Id: I39eea20ee7c61ecf0279143c9784da35be15edd3 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
872b772f3f
commit
170fadadd6
@ -23,7 +23,8 @@
|
|||||||
#include <QtCore/private/qobject_p.h>
|
#include <QtCore/private/qobject_p.h>
|
||||||
#include <QtCore/qelapsedtimer.h>
|
#include <QtCore/qelapsedtimer.h>
|
||||||
#include <QtCore/qxpfunctional.h>
|
#include <QtCore/qxpfunctional.h>
|
||||||
#include <QtGui/QIcon>
|
#include <QtGui/qicon.h>
|
||||||
|
#include <QtGui/qpalette.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ public:
|
|||||||
QWindow *topLevelWindow(QWindow::AncestorMode mode = QWindow::IncludeTransients) const;
|
QWindow *topLevelWindow(QWindow::AncestorMode mode = QWindow::IncludeTransients) const;
|
||||||
|
|
||||||
virtual QWindow *eventReceiver() { Q_Q(QWindow); return q; }
|
virtual QWindow *eventReceiver() { Q_Q(QWindow); return q; }
|
||||||
|
virtual QPalette windowPalette() const { return QPalette(); }
|
||||||
|
|
||||||
virtual void setVisible(bool visible);
|
virtual void setVisible(bool visible);
|
||||||
void updateVisibility();
|
void updateVisibility();
|
||||||
|
@ -845,11 +845,13 @@ static inline bool shouldApplyDarkFrame(const QWindow *w)
|
|||||||
// the application has explicitly opted out of dark frames
|
// the application has explicitly opted out of dark frames
|
||||||
if (!QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeWindowFrames))
|
if (!QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeWindowFrames))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// if the application supports a dark border, and the palette is dark (window background color
|
// if the application supports a dark border, and the palette is dark (window background color
|
||||||
// is darker than the text), then turn dark-border support on, otherwise use a light border.
|
// is darker than the text), then turn dark-border support on, otherwise use a light border.
|
||||||
const QPalette defaultPalette;
|
auto *dWindow = QWindowPrivate::get(const_cast<QWindow*>(w));
|
||||||
return defaultPalette.color(QPalette::WindowText).lightness()
|
const QPalette windowPal = dWindow->windowPalette();
|
||||||
> defaultPalette.color(QPalette::Window).lightness();
|
return windowPal.color(QPalette::WindowText).lightness()
|
||||||
|
> windowPal.color(QPalette::Window).lightness();
|
||||||
}
|
}
|
||||||
|
|
||||||
QWindowsWindowData
|
QWindowsWindowData
|
||||||
|
Loading…
x
Reference in New Issue
Block a user