decoration: ukui title font dynamic update

This commit is contained in:
Hongfei Shang 2022-06-19 05:05:38 +08:00
parent 239e307271
commit df074a9056
6 changed files with 50 additions and 0 deletions

View File

@ -29,6 +29,10 @@ find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
X11Extras X11Extras
) )
find_package(PkgConfig)
pkg_check_modules(Qsettings REQUIRED gsettings-qt)
include_directories(${Qsettings_INCLUDE_DIRS})
find_package(Qt5Test ${QT_MIN_VERSION} CONFIG QUIET) find_package(Qt5Test ${QT_MIN_VERSION} CONFIG QUIET)
set_package_properties(Qt5Test PROPERTIES set_package_properties(Qt5Test PROPERTIES
PURPOSE "Required for tests" PURPOSE "Required for tests"

View File

@ -224,6 +224,8 @@ target_link_libraries(kwin
epoxy::epoxy epoxy::epoxy
Threads::Threads Threads::Threads
${Qsettings_LIBRARIES}
) )
add_subdirectory(backends) add_subdirectory(backends)

View File

@ -33,6 +33,8 @@
#include <QPainter> #include <QPainter>
#include <QScreen> #include <QScreen>
#include <QtDBus> #include <QtDBus>
#include <QGSettings>
#include <QFontDatabase>
namespace KWin namespace KWin
{ {
@ -153,11 +155,22 @@ void DecorationBridge::init()
{ {
m_themeId = 0; m_themeId = 0;
} }
const QFont font = QFontDatabase::systemFont(QFontDatabase::TitleFont);
m_nFont = font.pointSize();
m_strFontFamily = font.family();
QDBusConnection::sessionBus().connect(QString(), QDBusConnection::sessionBus().connect(QString(),
QStringLiteral("/KGlobalSettings"), QStringLiteral("/KGlobalSettings"),
QStringLiteral("org.kde.KGlobalSettings"), QStringLiteral("org.kde.KGlobalSettings"),
QStringLiteral("slotThemeChange"), QStringLiteral("slotThemeChange"),
this, SLOT(slotThemeUpdate(int))); this, SLOT(slotThemeUpdate(int)));
QDBusConnection::sessionBus().connect(QString(),
QStringLiteral("/KGlobalSettings"),
QStringLiteral("org.kde.KGlobalSettings"),
QStringLiteral("slotFontChange"),
this, SLOT(fontUpdate(int, QString)));
} }
void DecorationBridge::slotThemeUpdate(int themeId) void DecorationBridge::slotThemeUpdate(int themeId)
@ -165,6 +178,17 @@ void DecorationBridge::slotThemeUpdate(int themeId)
m_themeId = themeId; m_themeId = themeId;
} }
void DecorationBridge::fontUpdate(int nfont, QString strFamily)
{
m_nFont = nfont;
m_strFontFamily = strFamily;
QFont font;
font.setPointSize(nfont);
font.setFamily(strFamily);
Q_EMIT sig_updateFont(font);
}
void DecorationBridge::initPlugin() void DecorationBridge::initPlugin()
{ {
const KPluginMetaData metaData = KPluginMetaData::findPluginById(s_pluginName, m_plugin); const KPluginMetaData metaData = KPluginMetaData::findPluginById(s_pluginName, m_plugin);
@ -300,6 +324,8 @@ KDecoration2::Decoration *DecorationBridge::createDecoration(AbstractClient *cli
} }
args.insert(QStringLiteral("dpi"), m_dpi); //每创建一个渲染端就把dpi值带过去后面每新建一个客户就不需要反复获取获取dpi值 args.insert(QStringLiteral("dpi"), m_dpi); //每创建一个渲染端就把dpi值带过去后面每新建一个客户就不需要反复获取获取dpi值
args.insert(QStringLiteral("themeId"), m_themeId); //针对UKUI定制的主题id args.insert(QStringLiteral("themeId"), m_themeId); //针对UKUI定制的主题id
args.insert(QStringLiteral("systemFontSize"), m_nFont); //标题栏字体大小
args.insert(QStringLiteral("systemFont"), m_strFontFamily); //标题栏字体类型
auto deco = m_factory->create<KDecoration2::Decoration>(client, QVariantList({args})); auto deco = m_factory->create<KDecoration2::Decoration>(client, QVariantList({args}));
deco->setSettings(m_settings); deco->setSettings(m_settings);
deco->init(); deco->init();

View File

@ -66,8 +66,11 @@ public:
Q_SIGNALS: Q_SIGNALS:
void metaDataLoaded(); void metaDataLoaded();
void sig_updateFont(QFont);
public Q_SLOTS: public Q_SLOTS:
void slotThemeUpdate(int); void slotThemeUpdate(int);
void fontUpdate(int nfont, QString strFamily);
private: private:
QString readPlugin(); QString readPlugin();
@ -88,6 +91,9 @@ private:
int m_dpi; //dpi值 int m_dpi; //dpi值
int m_themeId; //主题id int m_themeId; //主题id
int m_nFont;
QString m_strFontFamily;
KWIN_SINGLETON(DecorationBridge) KWIN_SINGLETON(DecorationBridge)
}; };
} // Decoration } // Decoration

View File

@ -49,6 +49,7 @@ SettingsImpl::SettingsImpl(KDecoration2::DecorationSettings *parent)
); );
connect(Workspace::self(), &Workspace::configChanged, this, &SettingsImpl::readSettings); connect(Workspace::self(), &Workspace::configChanged, this, &SettingsImpl::readSettings);
connect(DecorationBridge::self(), &DecorationBridge::metaDataLoaded, this, &SettingsImpl::readSettings); connect(DecorationBridge::self(), &DecorationBridge::metaDataLoaded, this, &SettingsImpl::readSettings);
connect(DecorationBridge::self(), &DecorationBridge::sig_updateFont, this, &SettingsImpl::updateFont);
} }
SettingsImpl::~SettingsImpl() = default; SettingsImpl::~SettingsImpl() = default;
@ -142,6 +143,14 @@ static KDecoration2::BorderSize stringToSize(const QString &name)
return it.value(); return it.value();
} }
void SettingsImpl::updateFont(QFont font)
{
if (font != m_font) {
m_font = font;
Q_EMIT decorationSettings()->fontChanged(m_font);
}
}
void SettingsImpl::readSettings() void SettingsImpl::readSettings()
{ {
KConfigGroup config = kwinApp()->config()->group(QStringLiteral("org.kde.kdecoration2")); KConfigGroup config = kwinApp()->config()->group(QStringLiteral("org.kde.kdecoration2"));

View File

@ -42,6 +42,9 @@ public:
return m_font; return m_font;
} }
public Q_SLOTS:
void updateFont(QFont font);
private: private:
void readSettings(); void readSettings();
QVector< KDecoration2::DecorationButtonType > readDecorationButtons(const KConfigGroup &config, QVector< KDecoration2::DecorationButtonType > readDecorationButtons(const KConfigGroup &config,