provide self-calculated theme corners mask

pull/19/head
Michail Vourlakos
parent 2b5d19cfa3
commit bd16a0da69

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

@ -26,6 +26,7 @@
// Qt
#include <QObject>
#include <QHash>
#include <QTemporaryDir>
// 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<int, CornerRegions> m_cornerRegions;
std::array<QMetaObject::Connection, 2> m_kdeConnections;
QTemporaryDir m_extendedThemeDir;

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

@ -20,6 +20,9 @@
#ifndef EFFECTS_H
#define EFFECTS_H
// local
#include "../plasma/extended/theme.h"
// Qt
#include <QObject>
#include <QPointer>
@ -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<Latte::View> m_view;
QPointer<Latte::Corona> 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};

Loading…
Cancel
Save