From bd16a0da69e3c557c00579b7f6e33bde8c94f336 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Fri, 21 Aug 2020 23:32:25 +0300 Subject: [PATCH] provide self-calculated theme corners mask --- app/plasma/extended/theme.cpp | 9 ++++++++ app/plasma/extended/theme.h | 12 ++++++++++ app/view/effects.cpp | 42 +++++++++++++++++++++++++++++++++++ app/view/effects.h | 20 +++++++++++++++++ 4 files changed, 83 insertions(+) diff --git a/app/plasma/extended/theme.cpp b/app/plasma/extended/theme.cpp index 6d2942903..58cd23e7a 100644 --- a/app/plasma/extended/theme.cpp +++ b/app/plasma/extended/theme.cpp @@ -414,6 +414,15 @@ void Theme::loadThemeLightness() } } +const CornerRegions &Theme::cornersMask(const int &size) +{ + if (m_cornerRegions.contains(size)) { + return m_cornerRegions[size]; + } + + return m_cornerRegions[size]; +} + void Theme::loadConfig() { setOutlineWidth(m_themeGroup.readEntry("outlineWidth", 1)); diff --git a/app/plasma/extended/theme.h b/app/plasma/extended/theme.h index 42ca9fd99..48d03822e 100644 --- a/app/plasma/extended/theme.h +++ b/app/plasma/extended/theme.h @@ -26,6 +26,7 @@ // Qt #include +#include #include // KDE @@ -52,6 +53,13 @@ class PanelBackground; namespace Latte { namespace PlasmaExtended { +struct CornerRegions { + QRegion topLeft; + QRegion topRight; + QRegion bottomLeft; + QRegion bottomRight; +}; + class Theme: public QObject { Q_OBJECT @@ -90,6 +98,8 @@ public: WindowSystem::SchemeColors *lightTheme() const; WindowSystem::SchemeColors *darkTheme() const; + const CornerRegions &cornersMask(const int &size); + void load(); signals: @@ -131,6 +141,8 @@ private: QString m_originalSchemePath; QString m_reversedSchemePath; + QHash m_cornerRegions; + std::array m_kdeConnections; QTemporaryDir m_extendedThemeDir; diff --git a/app/view/effects.cpp b/app/view/effects.cpp index 1d40357e2..1748109a9 100644 --- a/app/view/effects.cpp +++ b/app/view/effects.cpp @@ -57,6 +57,7 @@ void Effects::init() connect(this, &Effects::drawEffectsChanged, this, &Effects::updateEffects); connect(this, &Effects::enabledBordersChanged, this, &Effects::updateEffects); connect(this, &Effects::rectChanged, this, &Effects::updateEffects); + connect(this, &Effects::backgroundRadiusChanged, this, &Effects::updateBackgroundCorners); connect(this, &Effects::subtractedMaskRegionsChanged, this, &Effects::updateMask); connect(this, &Effects::unitedMaskRegionsChanged, this, &Effects::updateMask); @@ -125,6 +126,21 @@ void Effects::setBackgroundAllCorners(bool allcorners) emit backgroundAllCornersChanged(); } +bool Effects::backgroundRadiusEnabled() const +{ + return m_backgroundRadiusEnabled; +} + +void Effects::setBackgroundRadiusEnabled(bool enabled) +{ + if (m_backgroundRadiusEnabled == enabled) { + return; + } + + m_backgroundRadiusEnabled = enabled; + emit backgroundRadiusEnabledChanged(); +} + bool Effects::drawShadows() const { return m_drawShadows; @@ -177,6 +193,21 @@ void Effects::setForceTopBorder(bool draw) updateEnabledBorders(); } +int Effects::backgroundRadius() +{ + return m_backgroundRadius; +} + +void Effects::setBackgroundRadius(const int &radius) +{ + if (m_backgroundRadius == radius) { + return; + } + + m_backgroundRadius = radius; + emit backgroundRadiusChanged(); +} + float Effects::backgroundOpacity() const { return m_backgroundOpacity; @@ -343,6 +374,17 @@ QRegion Effects::maskCombinedRegion() return region; } +void Effects::updateBackgroundCorners() +{ + if (m_backgroundRadius<=0) { + return; + } + + PlasmaExtended::CornerRegions corners = m_corona->themeExtended()->cornersMask(m_backgroundRadius); + + m_cornersMaskRegion = corners; +} + void Effects::updateMask() { if (KWindowSystem::compositingActive()) { diff --git a/app/view/effects.h b/app/view/effects.h index 7770deedf..5e958f9f7 100644 --- a/app/view/effects.h +++ b/app/view/effects.h @@ -20,6 +20,9 @@ #ifndef EFFECTS_H #define EFFECTS_H +// local +#include "../plasma/extended/theme.h" + // Qt #include #include @@ -50,6 +53,8 @@ class Effects: public QObject Q_PROPERTY(int innerShadow READ innerShadow WRITE setInnerShadow NOTIFY innerShadowChanged) Q_PROPERTY(bool backgroundAllCorners READ backgroundAllCorners WRITE setBackgroundAllCorners NOTIFY backgroundAllCornersChanged) + Q_PROPERTY(bool backgroundRadiusEnabled READ backgroundRadiusEnabled WRITE setBackgroundRadiusEnabled NOTIFY backgroundRadiusEnabledChanged) + Q_PROPERTY(int backgroundRadius READ backgroundRadius WRITE setBackgroundRadius NOTIFY backgroundRadiusChanged) Q_PROPERTY(float backgroundOpacity READ backgroundOpacity WRITE setBackgroundOpacity NOTIFY backgroundOpacityChanged) Q_PROPERTY(QRect mask READ mask WRITE setMask NOTIFY maskChanged) @@ -68,6 +73,9 @@ public: bool backgroundAllCorners() const; void setBackgroundAllCorners(bool allcorners); + bool backgroundRadiusEnabled() const; + void setBackgroundRadiusEnabled(bool enabled); + bool drawShadows() const; void setDrawShadows(bool draw); @@ -83,6 +91,9 @@ public: int innerShadow() const; void setInnerShadow(int shadow); + int backgroundRadius(); + void setBackgroundRadius(const int &radius); + float backgroundOpacity() const; void setBackgroundOpacity(float opacity); @@ -113,7 +124,10 @@ public slots: signals: void animationsBlockedChanged(); void backgroundAllCornersChanged(); + void backgroundCornersMaskChanged(); void backgroundOpacityChanged(); + void backgroundRadiusEnabledChanged(); + void backgroundRadiusChanged(); void drawShadowsChanged(); void drawEffectsChanged(); void editShadowChanged(); @@ -130,14 +144,17 @@ private slots: void init(); void updateBackgroundContrastValues(); + void updateBackgroundCorners(); private: + bool backgroundRadiusIsEnabled() const; qreal currentMidValue(const qreal &max, const qreal &factor, const qreal &min) const; QRegion maskCombinedRegion(); private: bool m_animationsBlocked{false}; bool m_backgroundAllCorners{false}; + bool m_backgroundRadiusEnabled{false}; bool m_drawShadows{true}; bool m_drawEffects{false}; bool m_forceTopBorder{false}; @@ -146,6 +163,7 @@ private: int m_editShadow{0}; int m_innerShadow{0}; + int m_backgroundRadius{-1}; float m_backgroundOpacity{1.0}; qreal m_backEffectContrast{1}; @@ -159,6 +177,8 @@ private: QPointer m_view; QPointer m_corona; + PlasmaExtended::CornerRegions m_cornersMaskRegion; + Plasma::Theme m_theme; //only for the mask on disabled compositing, not to actually paint Plasma::FrameSvg *m_background{nullptr};