refactor(thememanager): hold the appearance client instead of inheriting it

main
reionwong 3 weeks ago
parent 372350131d
commit a7c3159f42

@ -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
)

@ -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@

@ -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_PROPERTY:cutefish-framework-appearance,INTERFACE_INCLUDE_DIRECTORIES>
)
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.
$<TARGET_FILE:cutefish-framework-appearance>
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

@ -23,18 +23,21 @@
#include <QImage>
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;

@ -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

Loading…
Cancel
Save