aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/nativestyle/qtquickcontrols2nativestyleplugin.cpp
Commit message (Collapse)AuthorAgeFilesLines
* NativeStyle: add focus frame to the macOS styleRichard Moe Gustavsen2020-09-291-0/+9
| | | | | | | | | | | | | | This patch will add a focus frame to the macOS style. We use one focus frame item that we move around according to changes to the focus object. It's normally the background delegate's responsibility to draw a focus frame, so we take care to only draw the native focus frame for controls with default delegates. (to be consistent with the other styles) Change-Id: Iaa7202675c1aad2fc19682563ac1afb6e686c105 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix fallback styles overwriting themesMitch Curtis2020-09-241-8/+2
| | | | | | | | | | | | | | | | | | | | | In Qt 5, QtQuickControls2Plugin::registerTypes() was responsible for calling initializeTheme() on each style plugin. Now that we delegate more work to the QML engine, each style plugin calls initializeTheme() via registerTypes(). To avoid fallback styles overwriting font and palette data set by the current style, we need to check if the theme has been intialized before calling initializeTheme(). To do this, we add a static "themeInitialized" bool that QQuickStylePlugin sets to true after calling intializeTheme() for the first time. It checks this value and avoids calling intializeTheme() if it's true. We also need to make QQuickStylePlugin ensure that the theme it's initializing belongs to the current style. Fixes: QTBUG-86303 Change-Id: Ie65e646677c78622829f4949c41cb79204cf5786 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* nativestyle: Port Windows XP styleJan Arve Sæther2020-09-171-2/+4
| | | | | | | Some controls needs more care, but that's for follow-up commits Change-Id: Ia7afeccf06f2f12dbef1402bf5975807cad8adcb Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix bug when interpreting environment variable QQC2_STYLEJan Arve Sæther2020-09-081-3/+3
| | | | | | | QString: :compare() return 0 if they are equal, just like strcmp... Change-Id: Ib79513fed158f5068f27d77dfabe18fcff597aee Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Native style: call QQuickStylePlugin::registerTypes() from style pluginsMitch Curtis2020-09-071-0/+3
| | | | | | | | This ensures that we received the warning we expect in tst_StyleImports::importStyleWithoutControls when run with native styles. Change-Id: I290f4e72222688e68ae36ace36f1d8be4bedaf31 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Native style: set the default system palette as QQuickTheme::System palettewip/nativestyleRichard Moe Gustavsen2020-08-281-0/+4
| | | | | | | | | | After introducing the new registration system in Controls, the theme palette picked up colors from the Default style. Until this is fixed, set the system palette explicitly. Task-number: QTBUG-86303 Change-Id: Ib4c90856bd5410c042160b532175a48fdaea0fbd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Native style: clean-up QStyle using a post routineRichard Moe Gustavsen2020-08-201-0/+23
| | | | | | | | | | | | | | | | | | When we delete QStyle, it will free up it's own internal resources. Especially on macOS, this means releasing a lot of NSViews and NSCells from the QMacStyle destructor. If we did this from ~QtQuickControls2NativeStylePlugin, it would happen when the plugin was unloaded from a Q_DESTRUCTOR_FUNCTION in QLibrary, which is very late in the tear-down process, and after qGuiApp has been set to nullptr, NSApplication has stopped running, and perhaps also other static platform variables (e.g in AppKit?) has been deleted. And to our best guess, this is also why we see a crash in AppKit from the destructor in QMacStyle. So for this reason, we delete QStyle from a post routine rather than from the destructor. Change-Id: I9dfb0d3394f14e5cd8b88d5a5fbbf3b73284faf1 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Initial "port" of QQC2::QWindowsStyleJan Arve Sæther2020-06-081-6/+26
| | | | | | | | It also includes qwindowsxpstyle and qwindowsvistastyle, but they do not compile at the moment Change-Id: Ie9ce0bf99d620d65534c2660150117e4747f5c86 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Native style: fix build on linuxRichard Moe Gustavsen2020-05-251-0/+4
| | | | | Change-Id: I4af37d2ac4ab4bd27baac02286e46726eb5e24e1 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Native style: copy QStyle from widgets, and implement ground work for ↵Richard Moe Gustavsen2020-05-251-0/+95
creating native styles This is the initial patch for adding native style support to controls2. The gist of the patch is that it copies QStyle from widgets (including the mac plugin style), remove all notions of widgets, tweak it as needed, and make it compile inside the qtquickcontrols2 repository as a separate QML plugin (QtQuick.NativeStyle). The "new" QStyle is then used to draw primitives onto nine-patch-images that can be rendered by the scene graph. Each such primitive/image will be wrapped by a QQuickStyleItem (which is a subclass of QQuickItem). E.g a button background will be implemented by QQuickStyleItemButton.cpp. This item can then be placed anywhere in the QML code to draw a native-looking button background. Controls2 has its own styling API, where a style consist of a set of QML files that extend template controls written in C++. To enable native styling, we simply follow the exact same approach; We create a style folder per platform alongside the other styles in controls2. Each style will contain a set of qml files for the controls (Button.qml, Slider.qml, etc), and inside each control, the style items will be used to draw the default delegates. Since it's likely that each such qml file will be implemented equal in all the desktop styles (but not always), the native style plugin contains a set of default controls (e.g DefaultButton.qml) that a platform style can choose to inherit from and extend as needed. Included is also an example called "DesktopGallery" that can be used to test and view the controls. Change-Id: I8b45aa7d493930f552d3ad2e3e3e7184129a9d6c Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>