mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 02:10:05 +00:00 
			
		
		
		
	First addition of qt6ct based color palettes to give dark mode on all platforms.
This commit is contained in:
		
							parent
							
								
									194638f759
								
							
						
					
					
						commit
						0bce0e2bd7
					
				
					 15 changed files with 187 additions and 1 deletions
				
			
		|  | @ -12,6 +12,7 @@ | |||
| #include <scwx/qt/settings/general_settings.hpp> | ||||
| #include <scwx/qt/types/qt_types.hpp> | ||||
| #include <scwx/qt/ui/setup/setup_wizard.hpp> | ||||
| #include <scwx/qt/util/qt6ct_palette.hpp> | ||||
| #include <scwx/network/cpr.hpp> | ||||
| #include <scwx/util/environment.hpp> | ||||
| #include <scwx/util/logger.hpp> | ||||
|  | @ -27,6 +28,8 @@ | |||
| #include <QStandardPaths> | ||||
| #include <QStyleHints> | ||||
| #include <QTranslator> | ||||
| #include <QPalette> | ||||
| #include <QStyle> | ||||
| 
 | ||||
| static const std::string logPrefix_ = "scwx::main"; | ||||
| static const auto        logger_    = scwx::util::Logger::Create(logPrefix_); | ||||
|  | @ -162,6 +165,15 @@ static void ConfigureTheme(const std::vector<std::string>& args) | |||
|    } | ||||
| 
 | ||||
|    QGuiApplication::styleHints()->setColorScheme(qtColorScheme); | ||||
| 
 | ||||
|    if (uiStyle == scwx::qt::types::UiStyle::FusionQt6Ct) | ||||
|    { | ||||
|       auto palette = | ||||
|          std::make_unique<QPalette>(scwx::qt::util::qt6ct::loadColorScheme( | ||||
|             ":res/qt6ct_colors/darker.conf", | ||||
|             QApplication::style()->standardPalette())); | ||||
|       QApplication::setPalette(*palette); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
| static void | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ static const std::unordered_map<UiStyle, std::string> qtStyleName_ { | |||
|    {UiStyle::Fusion, "Fusion"}, | ||||
|    {UiStyle::FusionLight, "Fusion"}, | ||||
|    {UiStyle::FusionDark, "Fusion"}, | ||||
|    {UiStyle::FusionQt6Ct, "Fusion"}, | ||||
|    {UiStyle::Unknown, "?"}}; | ||||
| 
 | ||||
| static const std::unordered_map<UiStyle, std::string> uiStyleName_ { | ||||
|  | @ -22,6 +23,7 @@ static const std::unordered_map<UiStyle, std::string> uiStyleName_ { | |||
|    {UiStyle::Fusion, "Fusion"}, | ||||
|    {UiStyle::FusionLight, "Fusion Light"}, | ||||
|    {UiStyle::FusionDark, "Fusion Dark"}, | ||||
|    {UiStyle::FusionQt6Ct, "Fusion with qt6ct Palette"}, | ||||
|    {UiStyle::Unknown, "?"}}; | ||||
| 
 | ||||
| static const std::unordered_map<UiStyle, Qt::ColorScheme> qtColorSchemeMap_ { | ||||
|  | @ -29,6 +31,7 @@ static const std::unordered_map<UiStyle, Qt::ColorScheme> qtColorSchemeMap_ { | |||
|    {UiStyle::Fusion, Qt::ColorScheme::Unknown}, | ||||
|    {UiStyle::FusionLight, Qt::ColorScheme::Light}, | ||||
|    {UiStyle::FusionDark, Qt::ColorScheme::Dark}, | ||||
|    {UiStyle::FusionQt6Ct, Qt::ColorScheme::Unknown}, | ||||
|    {UiStyle::Unknown, Qt::ColorScheme::Unknown}}; | ||||
| 
 | ||||
| SCWX_GET_ENUM(UiStyle, GetUiStyle, uiStyleName_) | ||||
|  |  | |||
|  | @ -26,9 +26,10 @@ enum class UiStyle | |||
|    Fusion, | ||||
|    FusionLight, | ||||
|    FusionDark, | ||||
|    FusionQt6Ct, | ||||
|    Unknown | ||||
| }; | ||||
| typedef scwx::util::Iterator<UiStyle, UiStyle::Default, UiStyle::FusionDark> | ||||
| typedef scwx::util::Iterator<UiStyle, UiStyle::Default, UiStyle::FusionQt6Ct> | ||||
|    UiStyleIterator; | ||||
| 
 | ||||
| Qt::ColorScheme GetQtColorScheme(UiStyle uiStyle); | ||||
|  |  | |||
							
								
								
									
										87
									
								
								scwx-qt/source/scwx/qt/util/qt6ct_palette.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								scwx-qt/source/scwx/qt/util/qt6ct_palette.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,87 @@ | |||
| /* This code is drawn from qt6ct, and loads qt6ct color palette files.
 | ||||
|  * qt6ct is licensed under BSD-2-Clause below. | ||||
|  * | ||||
|  * Copyright (c) 2020-2024, Ilya Kotov <forkotov02@ya.ru> | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are | ||||
|  * met: | ||||
|  * | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in | ||||
|  *    the documentation and/or other materials provided with the | ||||
|  *    distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| #include <QPalette> | ||||
| #include <QSettings> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace qt | ||||
| { | ||||
| namespace util | ||||
| { | ||||
| namespace qt6ct | ||||
| { | ||||
| 
 | ||||
| QPalette loadColorScheme(const QString &filePath, const QPalette &fallback) | ||||
| { | ||||
|     QPalette customPalette; | ||||
|     QSettings settings(filePath, QSettings::IniFormat); | ||||
|     settings.beginGroup("ColorScheme"); | ||||
|     QStringList activeColors = settings.value("active_colors").toStringList(); | ||||
|     QStringList inactiveColors = settings.value("inactive_colors").toStringList(); | ||||
|     QStringList disabledColors = settings.value("disabled_colors").toStringList(); | ||||
|     settings.endGroup(); | ||||
| 
 | ||||
| 
 | ||||
| #if (QT_VERSION >= QT_VERSION_CHECK(6,6,0)) | ||||
|     if(activeColors.count() == QPalette::Accent) | ||||
|         activeColors << activeColors.at(QPalette::Highlight); | ||||
|     if(inactiveColors.count() == QPalette::Accent) | ||||
|         inactiveColors << inactiveColors.at(QPalette::Highlight); | ||||
|     if(disabledColors.count() == QPalette::Accent) | ||||
|         disabledColors << disabledColors.at(QPalette::Highlight); | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
|     if(activeColors.count() >= QPalette::NColorRoles && | ||||
|             inactiveColors.count() >= QPalette::NColorRoles && | ||||
|             disabledColors.count() >= QPalette::NColorRoles) | ||||
|     { | ||||
|         for (int i = 0; i < QPalette::NColorRoles; i++) | ||||
|         { | ||||
|             QPalette::ColorRole role = QPalette::ColorRole(i); | ||||
|             customPalette.setColor(QPalette::Active, role, QColor(activeColors.at(i))); | ||||
|             customPalette.setColor(QPalette::Inactive, role, QColor(inactiveColors.at(i))); | ||||
|             customPalette.setColor(QPalette::Disabled, role, QColor(disabledColors.at(i))); | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         customPalette = fallback; //load fallback palette
 | ||||
|     } | ||||
| 
 | ||||
|     return customPalette; | ||||
| } | ||||
| 
 | ||||
| } // namespace qt6ct
 | ||||
| } // namespace util
 | ||||
| } // namespace qt
 | ||||
| } // namespace scwx
 | ||||
							
								
								
									
										50
									
								
								scwx-qt/source/scwx/qt/util/qt6ct_palette.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								scwx-qt/source/scwx/qt/util/qt6ct_palette.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| #pragma once | ||||
| 
 | ||||
| /* This code is drawn from qt6ct, and loads qt6ct color palette files.
 | ||||
|  * qt6ct is licensed under BSD-2-Clause below. | ||||
|  * | ||||
|  * Copyright (c) 2020-2024, Ilya Kotov <forkotov02@ya.ru> | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are | ||||
|  * met: | ||||
|  * | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in | ||||
|  *    the documentation and/or other materials provided with the | ||||
|  *    distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
|  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
|  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
|  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| #include <QString> | ||||
| #include <QPalette> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace qt | ||||
| { | ||||
| namespace util | ||||
| { | ||||
| namespace qt6ct | ||||
| { | ||||
| 
 | ||||
| QPalette loadColorScheme(const QString &filePath, const QPalette &fallback); | ||||
| 
 | ||||
| } // namespace qt6ct
 | ||||
| } // namespace util
 | ||||
| } // namespace qt
 | ||||
| } // namespace scwx
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 AdenKoperczak
						AdenKoperczak