diff --git a/CMakeLists.txt b/CMakeLists.txt index 11dd0c0..4729f26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ cmake_minimum_required(VERSION 3.20) project(FramelessHelper - VERSION 2.2.1.0 + VERSION 2.3.0.0 DESCRIPTION "Cross-platform window customization framework for Qt Widgets and Qt Quick." HOMEPAGE_URL "https://github.com/wangwenx190/framelesshelper/" LANGUAGES CXX diff --git a/include/FramelessHelper/Core/private/registrykey_p.h b/include/FramelessHelper/Core/private/registrykey_p.h index 8d4440a..81cd51e 100644 --- a/include/FramelessHelper/Core/private/registrykey_p.h +++ b/include/FramelessHelper/Core/private/registrykey_p.h @@ -41,8 +41,13 @@ # endif // ((QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) && !REGISTRYKEY_FORCE_QSETTINGS) #endif // REGISTRYKEY_IMPL -#define REGISTRYKEY_QWINREGISTRYKEY ((REGISTRYKEY_IMPL) == 1) -#define REGISTRYKEY_QSETTINGS ((REGISTRYKEY_IMPL) == 2) +#ifndef REGISTRYKEY_QWINREGISTRYKEY +# define REGISTRYKEY_QWINREGISTRYKEY ((REGISTRYKEY_IMPL) == 1) +#endif // REGISTRYKEY_QWINREGISTRYKEY + +#ifndef REGISTRYKEY_QSETTINGS +# define REGISTRYKEY_QSETTINGS ((REGISTRYKEY_IMPL) == 2) +#endif // REGISTRYKEY_QSETTINGS QT_BEGIN_NAMESPACE class QWinRegistryKey; diff --git a/include/FramelessHelper/Widgets/private/standardtitlebar_p.h b/include/FramelessHelper/Widgets/private/standardtitlebar_p.h index ad8269f..58a8ea1 100644 --- a/include/FramelessHelper/Widgets/private/standardtitlebar_p.h +++ b/include/FramelessHelper/Widgets/private/standardtitlebar_p.h @@ -28,6 +28,7 @@ #include "standardtitlebar.h" #include #include +#include QT_BEGIN_NAMESPACE class QPaintEvent; @@ -73,6 +74,9 @@ public: Q_NODISCARD bool windowIconVisible() const; void setWindowIconVisible(const bool value); + Q_NODISCARD QFont titleFont() const; + void setTitleFont(const QFont &value); + public Q_SLOTS: void updateMaximizeButton(); void updateTitleBarColor(); @@ -98,6 +102,7 @@ private: bool m_titleLabelVisible = true; QSize m_windowIconSize = {}; bool m_windowIconVisible = false; + std::optional m_titleFont = std::nullopt; }; FRAMELESSHELPER_END_NAMESPACE diff --git a/include/FramelessHelper/Widgets/standardtitlebar.h b/include/FramelessHelper/Widgets/standardtitlebar.h index 3635a90..63b1a01 100644 --- a/include/FramelessHelper/Widgets/standardtitlebar.h +++ b/include/FramelessHelper/Widgets/standardtitlebar.h @@ -51,6 +51,7 @@ class FRAMELESSHELPER_WIDGETS_API StandardTitleBar : public QWidget Q_PROPERTY(bool titleLabelVisible READ titleLabelVisible WRITE setTitleLabelVisible NOTIFY titleLabelVisibleChanged FINAL) Q_PROPERTY(QSize windowIconSize READ windowIconSize WRITE setWindowIconSize NOTIFY windowIconSizeChanged FINAL) Q_PROPERTY(bool windowIconVisible READ windowIconVisible WRITE setWindowIconVisible NOTIFY windowIconVisibleChanged FINAL) + Q_PROPERTY(QFont titleFont READ titleFont WRITE setTitleFont NOTIFY titleFontChanged FINAL) public: explicit StandardTitleBar(QWidget *parent = nullptr); @@ -80,6 +81,9 @@ public: Q_NODISCARD bool windowIconVisible() const; void setWindowIconVisible(const bool value); + Q_NODISCARD QFont titleFont() const; + void setTitleFont(const QFont &value); + protected: void paintEvent(QPaintEvent *event) override; @@ -90,6 +94,7 @@ Q_SIGNALS: void titleLabelVisibleChanged(); void windowIconSizeChanged(); void windowIconVisibleChanged(); + void titleFontChanged(); private: QScopedPointer d_ptr; diff --git a/qmake/inc/core/framelesshelper.version b/qmake/inc/core/framelesshelper.version index a485941..b61fc25 100644 --- a/qmake/inc/core/framelesshelper.version +++ b/qmake/inc/core/framelesshelper.version @@ -34,10 +34,10 @@ #pragma once [[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MAJOR = 2; -[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MINOR = 2; -[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_PATCH = 1; +[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MINOR = 3; +[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_PATCH = 0; [[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_TWEAK = 0; -[[maybe_unused]] static constexpr const char FRAMELESSHELPER_VERSION_STR[] = "2.2.1.0\0"; +[[maybe_unused]] static constexpr const char FRAMELESSHELPER_VERSION_STR[] = "2.3.0.0\0"; [[maybe_unused]] static constexpr const char FRAMELESSHELPER_COMMIT_STR[] = "UNKNOWN\0"; [[maybe_unused]] static constexpr const char FRAMELESSHELPER_COMPILE_DATETIME_STR[] = "UNKNOWN\0"; diff --git a/src/widgets/standardtitlebar.cpp b/src/widgets/standardtitlebar.cpp index c5672bb..40b3f3d 100644 --- a/src/widgets/standardtitlebar.cpp +++ b/src/widgets/standardtitlebar.cpp @@ -154,13 +154,12 @@ void StandardTitleBarPrivate::paintTitleBar(QPaintEvent *event) if (m_titleLabelVisible) { const QString text = m_window->windowTitle(); if (!text.isEmpty()) { - const QFont font = [q]() -> QFont { + painter.setPen(foregroundColor); + painter.setFont(m_titleFont.value_or([q]() -> QFont { QFont f = q->font(); f.setPointSize(kDefaultTitleBarFontPointSize); return f; - }(); - painter.setPen(foregroundColor); - painter.setFont(font); + }())); const QRect rect = [this, q, titleLabelLeftOffset]() -> QRect { const int w = q->width(); int leftMargin = 0; @@ -235,6 +234,22 @@ void StandardTitleBarPrivate::setWindowIconVisible(const bool value) Q_EMIT q->windowIconVisibleChanged(); } +QFont StandardTitleBarPrivate::titleFont() const +{ + return m_titleFont.value_or(QFont()); +} + +void StandardTitleBarPrivate::setTitleFont(const QFont &value) +{ + if (titleFont() == value) { + return; + } + m_titleFont = value; + Q_Q(StandardTitleBar); + q->update(); + Q_EMIT q->titleFontChanged(); +} + void StandardTitleBarPrivate::updateMaximizeButton() { const bool max = m_window->isMaximized(); @@ -478,6 +493,18 @@ void StandardTitleBar::setWindowIconVisible(const bool value) d->setWindowIconVisible(value); } +QFont StandardTitleBar::titleFont() const +{ + Q_D(const StandardTitleBar); + return d->titleFont(); +} + +void StandardTitleBar::setTitleFont(const QFont &value) +{ + Q_D(StandardTitleBar); + d->setTitleFont(value); +} + void StandardTitleBar::paintEvent(QPaintEvent *event) { Q_D(StandardTitleBar);