Skip to content

Commit

Permalink
Merge pull request #95 from matinlotfali/fix-decoration-changes
Browse files Browse the repository at this point in the history
Move check decoration in the new function `hasEffect`
  • Loading branch information
matinlotfali authored Jul 16, 2023
2 parents 5770901 + abd2582 commit 761e3d6
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 19 deletions.
35 changes: 17 additions & 18 deletions src/ShapeCornersEffect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,20 +54,17 @@ ShapeCornersEffect::~ShapeCornersEffect() = default;
void
ShapeCornersEffect::windowAdded(KWin::EffectWindow *w)
{
if (m_managed.contains(w))
return;
qDebug() << w->windowRole() << w->windowType() << w->windowClass();
if (!w->hasDecoration())
return;
m_managed.insert(w);

redirect(w);
setShader(w, m_shaderManager.GetShader().get());
auto r = m_managed.insert(w);
if (r.second) {
redirect(w);
setShader(w, m_shaderManager.GetShader().get());
}
}

void ShapeCornersEffect::windowRemoved(KWin::EffectWindow *w)
{
m_managed.remove(w);
m_managed.erase(w);
unredirect(w);
}

Expand All @@ -78,22 +75,20 @@ ShapeCornersEffect::reconfigure(ReconfigureFlags flags)
ShapeCornersConfig::self()->read();
}

bool isMaximized(KWin::EffectWindow *w) {
bool ShapeCornersEffect::isMaximized(const KWin::EffectWindow *w) {
auto screenGeometry = KWin::effects->findScreen(w->screen()->name())->geometry();
return (w->x() == screenGeometry.x() && w->width() == screenGeometry.width()) ||
(w->y() == screenGeometry.y() && w->height() == screenGeometry.height());
}

QRectF operator *(QRect r, qreal scale) { return {r.x() * scale, r.y() * scale, r.width() * scale, r.height() * scale}; }
QRectF operator *(QRectF r, qreal scale) { return {r.x() * scale, r.y() * scale, r.width() * scale, r.height() * scale}; }
QRect toRect(const QRectF& r) { return {(int)r.x(), (int)r.y(), (int)r.width(), (int)r.height()}; }
const QRect& toRect(const QRect& r) { return r; }

void ShapeCornersEffect::prePaintWindow(KWin::EffectWindow *w, KWin::WindowPrePaintData &data, std::chrono::milliseconds time)
{
if (!m_shaderManager.IsValid()
|| !m_managed.contains(w)
|| isMaximized(w)
)
if (!hasEffect(w))
{
Effect::prePaintWindow(w, data, time);
return;
Expand Down Expand Up @@ -129,10 +124,7 @@ bool ShapeCornersEffect::supported()

void ShapeCornersEffect::drawWindow(KWin::EffectWindow *w, int mask, const QRegion &region,
KWin::WindowPaintData &data) {
if (!m_shaderManager.IsValid()
|| !m_managed.contains(w)
|| isMaximized(w)
)
if (!hasEffect(w))
{
unredirect(w);
#if KWIN_EFFECT_API_VERSION >= 236
Expand All @@ -155,3 +147,10 @@ void ShapeCornersEffect::drawWindow(KWin::EffectWindow *w, int mask, const QRegi
#endif
m_shaderManager.Unbind();
}

bool ShapeCornersEffect::hasEffect(const KWin::EffectWindow *w) const {
return m_shaderManager.IsValid()
&& m_managed.contains(w)
&& w->hasDecoration()
&& !isMaximized(w);
}
6 changes: 5 additions & 1 deletion src/ShapeCornersEffect.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#pragma once

#include <kwineffects.h>
#include <set>
#include "ShapeCornersShader.h"

#if KWIN_EFFECT_API_VERSION >= 236
Expand Down Expand Up @@ -50,7 +51,10 @@ protected Q_SLOTS:
void windowRemoved(KWin::EffectWindow *window);

private:
QSet<KWin::EffectWindow*> m_managed;
std::set<const KWin::EffectWindow*> m_managed;
ShapeCornersShader m_shaderManager;

bool hasEffect(const KWin::EffectWindow *w) const;
static bool isMaximized(const KWin::EffectWindow *w);
};

0 comments on commit 761e3d6

Please sign in to comment.