diff --git a/CMakeLists.txt b/CMakeLists.txt index 17b5220..d2f8d0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,6 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../cutefish-framework/appearance include(GenerateExportHeader) include(GNUInstallDirs) -include(CMakePackageConfigHelpers) include(ECMGenerateHeaders) # Get the installation directory from Qt 6 @@ -56,8 +55,6 @@ else () endif () # Install -set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/FishUI") -message(STATUS "install directory:" "${CMAKECONFIG_INSTALL_DIR}") # Qt Widgets Style #if (UNIX) @@ -70,31 +67,4 @@ message(STATUS "install directory:" "${CMAKECONFIG_INSTALL_DIR}") add_subdirectory(src) -configure_package_config_file( - "${CMAKE_CURRENT_SOURCE_DIR}/FishUIConfig.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/FishUIConfig.cmake" - INSTALL_DESTINATION - "${CMAKECONFIG_INSTALL_DIR}" - PATH_VARS - CMAKECONFIG_INSTALL_DIR CMAKE_INSTALL_PREFIX -) -write_basic_package_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/FishUIConfigVersion.cmake - VERSION ${PROJECT_VERSION} - COMPATIBILITY AnyNewerVersion -) -install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/FishUIConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/FishUIConfigVersion.cmake" - DESTINATION - "${CMAKECONFIG_INSTALL_DIR}" - COMPONENT - Devel -) - -install(EXPORT FishUITargets - DESTINATION "${CMAKECONFIG_INSTALL_DIR}" - FILE FishUITargets.cmake - ) diff --git a/FishUIConfig.cmake.in b/FishUIConfig.cmake.in deleted file mode 100644 index 96d1a17..0000000 --- a/FishUIConfig.cmake.in +++ /dev/null @@ -1,20 +0,0 @@ -@PACKAGE_INIT@ - -include(CMakeFindDependencyMacro) -find_dependency(Qt6Core) -find_dependency(Qt6Gui) -find_dependency(Qt6Widgets) -find_dependency(Qt6DBus) -find_dependency(Qt6Qml) -find_dependency(Qt6Quick) -find_dependency(Qt6QuickControls2) -find_dependency(KF6WindowSystem) -find_dependency(KWayland) - -# Any changes in this ".cmake" file will be overwritten by CMake, the source is the ".cmake.in" file. - -include("${CMAKE_CURRENT_LIST_DIR}/FishUITargets.cmake") - -set(FishUI_INSTALL_PREFIX "@PACKAGE_CMAKE_INSTALL_PREFIX@") - -@PACKAGE_INCLUDE_QCHTARGETS@ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c016b31..2d82e20 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,10 +26,7 @@ target_sources(${TARGET} PRIVATE platforms/linux/shadowhelper/waylandshadowmanager.cpp platforms/linux/shadowhelper/waylandshadowmanager.h platforms/linux/shadowhelper/windowshadow.cpp platforms/linux/shadowhelper/windowshadow.h ) -target_include_directories(${TARGET} PRIVATE - platforms/linux - $ - ) +target_include_directories(${TARGET} PRIVATE platforms/linux) target_link_libraries(${TARGET} PUBLIC Qt6::Core @@ -37,9 +34,7 @@ target_link_libraries(${TARGET} Qt6::DBus Qt6::Widgets PRIVATE - # By path, not by target: FishUI exports FishUITargets, and an exported - # target may not name a dependency this package does not ship. - $ + Cutefish::Appearance Qt6::Qml Qt6::Quick Qt6::QuickControls2 @@ -47,10 +42,9 @@ target_link_libraries(${TARGET} KF6::WindowSystem Plasma::KWaylandClient ) -add_dependencies(${TARGET} cutefish-framework-appearance) - generate_export_header(${TARGET} BASE_NAME ${TARGET}) -install(TARGETS ${TARGET} EXPORT ${TARGET}Targets ${INSTALL_TARGETS_DEFAULT_ARGS}) +# The QML module directory is the only home: a second copy in the library +# directory would be loaded again alongside it, with its own type registrations. install(TARGETS ${TARGET} DESTINATION ${INSTALL_QMLDIR}/${TARGET}) # Install Controls diff --git a/src/thememanager.cpp b/src/thememanager.cpp index fdf20cb..df67cb9 100644 --- a/src/thememanager.cpp +++ b/src/thememanager.cpp @@ -23,18 +23,21 @@ #include ThemeManager::ThemeManager(QObject *parent) - : Appearance(parent) + : QObject(parent) , m_accentColor(m_blueColor) { - connect(this, &Appearance::accentColorIndexChanged, this, &ThemeManager::updateAccentColor); - connect(this, &Appearance::fontPointSizeChanged, this, &ThemeManager::fontSizeChanged); + connect(&m_appearance, &Appearance::darkModeChanged, this, &ThemeManager::darkModeChanged); + connect(&m_appearance, &Appearance::blurEnabledChanged, this, &ThemeManager::blurEnabledChanged); + connect(&m_appearance, &Appearance::fontPointSizeChanged, this, &ThemeManager::fontSizeChanged); + connect(&m_appearance, &Appearance::fontFamilyChanged, this, &ThemeManager::fontFamilyChanged); + connect(&m_appearance, &Appearance::accentColorIndexChanged, this, &ThemeManager::updateAccentColor); updateAccentColor(); } void ThemeManager::updateAccentColor() { - switch (accentColorIndex()) { + switch (m_appearance.accentColorIndex()) { case ACCENTCOLOR_BLUE: m_accentColor = m_blueColor; break; diff --git a/src/thememanager.h b/src/thememanager.h index 173d351..85235e5 100644 --- a/src/thememanager.h +++ b/src/thememanager.h @@ -33,9 +33,11 @@ #define ACCENTCOLOR_ORANGE 5 #define ACCENTCOLOR_GREY 6 -class ThemeManager : public Appearance +class ThemeManager : public QObject { Q_OBJECT + Q_PROPERTY(bool darkMode READ darkMode NOTIFY darkModeChanged) + Q_PROPERTY(bool blurEnabled READ blurEnabled NOTIFY blurEnabledChanged) Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentColorChanged) Q_PROPERTY(QColor blueColor READ blueColor CONSTANT) Q_PROPERTY(QColor redColor READ redColor CONSTANT) @@ -45,12 +47,17 @@ class ThemeManager : public Appearance Q_PROPERTY(QColor orangeColor READ orangeColor CONSTANT) Q_PROPERTY(QColor greyColor READ greyColor CONSTANT) Q_PROPERTY(qreal fontSize READ fontSize NOTIFY fontSizeChanged) + Q_PROPERTY(QString fontFamily READ fontFamily NOTIFY fontFamilyChanged) public: explicit ThemeManager(QObject *parent = nullptr); + bool darkMode() const { return m_appearance.darkMode(); } + bool blurEnabled() const { return m_appearance.blurEnabled(); } + QColor accentColor() const { return m_accentColor; } - qreal fontSize() const { return fontPointSize(); } + qreal fontSize() const { return m_appearance.fontPointSize(); } + QString fontFamily() const { return m_appearance.fontFamily(); } QColor blueColor() const { return m_blueColor; } QColor redColor() const { return m_redColor; } @@ -67,13 +74,19 @@ public: Q_INVOKABLE bool isMonochromeIcon(const QString &name); signals: + void darkModeChanged(); + void blurEnabledChanged(); void accentColorChanged(); void fontSizeChanged(); + void fontFamilyChanged(); -private slots: +private: void updateAccentColor(); -private: + // Held, not inherited: the theme is read-only, and Appearance also carries + // the setters for wallpaper, cursor theme and font settings. + Appearance m_appearance; + QColor m_blueColor = QColor(51, 133, 255); // #3385FF QColor m_redColor = QColor(255, 92, 109); // #FF5C6D QColor m_greenColor = QColor(53, 191, 86); // #35BF56