Rename DeformEffect to OffscreenEffect
Originally, DeformEffect was meant to be used in effect that deform windows, but its usage has become wider than anticipated. This change renames the DeformEffect to OffscreenEffect to accommodate for that.
This commit is contained in:
parent
ef1d97ac86
commit
f9c20bb83e
13 changed files with 66 additions and 67 deletions
|
@ -16,7 +16,7 @@
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
BlendChanges::BlendChanges()
|
BlendChanges::BlendChanges()
|
||||||
: DeformEffect()
|
: OffscreenEffect()
|
||||||
{
|
{
|
||||||
QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/kde/KWin/BlendChanges"),
|
QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/kde/KWin/BlendChanges"),
|
||||||
QStringLiteral("org.kde.KWin.BlendChanges"),
|
QStringLiteral("org.kde.KWin.BlendChanges"),
|
||||||
|
@ -67,11 +67,11 @@ void BlendChanges::drawWindow(EffectWindow *window, int mask, const QRegion ®
|
||||||
}
|
}
|
||||||
// then the old on top, it works better than changing both alphas with the current blend mode
|
// then the old on top, it works better than changing both alphas with the current blend mode
|
||||||
if (m_state != Off) {
|
if (m_state != Off) {
|
||||||
DeformEffect::drawWindow(window, mask, region, data);
|
OffscreenEffect::drawWindow(window, mask, region, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlendChanges::deform(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads)
|
void BlendChanges::apply(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads)
|
||||||
{
|
{
|
||||||
Q_UNUSED(window)
|
Q_UNUSED(window)
|
||||||
Q_UNUSED(mask)
|
Q_UNUSED(mask)
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <kwindeformeffect.h>
|
#include <kwinoffscreeneffect.h>
|
||||||
#include <kwineffects.h>
|
#include <kwineffects.h>
|
||||||
|
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
|
|
||||||
class BlendChanges : public DeformEffect
|
class BlendChanges : public OffscreenEffect
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ public:
|
||||||
void prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseconds presentTime) override;
|
void prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseconds presentTime) override;
|
||||||
void postPaintScreen() override;
|
void postPaintScreen() override;
|
||||||
void drawWindow(EffectWindow *window, int mask, const QRegion ®ion, WindowPaintData &data) override;
|
void drawWindow(EffectWindow *window, int mask, const QRegion ®ion, WindowPaintData &data) override;
|
||||||
void deform(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads) override;
|
void apply(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads) override;
|
||||||
bool isActive() const override;
|
bool isActive() const override;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace KWin
|
||||||
|
|
||||||
bool FallApartEffect::supported()
|
bool FallApartEffect::supported()
|
||||||
{
|
{
|
||||||
return DeformEffect::supported() && effects->animationsSupported();
|
return OffscreenEffect::supported() && effects->animationsSupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
FallApartEffect::FallApartEffect()
|
FallApartEffect::FallApartEffect()
|
||||||
|
@ -62,7 +62,7 @@ void FallApartEffect::prePaintWindow(EffectWindow *w, WindowPrePaintData &data,
|
||||||
effects->prePaintWindow(w, data, presentTime);
|
effects->prePaintWindow(w, data, presentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FallApartEffect::deform(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads)
|
void FallApartEffect::apply(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads)
|
||||||
{
|
{
|
||||||
Q_UNUSED(w)
|
Q_UNUSED(w)
|
||||||
Q_UNUSED(mask)
|
Q_UNUSED(mask)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#ifndef KWIN_FALLAPART_H
|
#ifndef KWIN_FALLAPART_H
|
||||||
#define KWIN_FALLAPART_H
|
#define KWIN_FALLAPART_H
|
||||||
|
|
||||||
#include <kwindeformeffect.h>
|
#include <kwinoffscreeneffect.h>
|
||||||
|
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,7 @@ struct FallApartAnimation
|
||||||
qreal progress = 0;
|
qreal progress = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FallApartEffect : public DeformEffect
|
class FallApartEffect : public OffscreenEffect
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(int blockSize READ configuredBlockSize)
|
Q_PROPERTY(int blockSize READ configuredBlockSize)
|
||||||
|
@ -49,7 +49,7 @@ public:
|
||||||
static bool supported();
|
static bool supported();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void deform(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads) override;
|
void apply(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads) override;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void slotWindowClosed(KWin::EffectWindow *c);
|
void slotWindowClosed(KWin::EffectWindow *c);
|
||||||
|
|
|
@ -27,7 +27,7 @@ MagicLampEffect::MagicLampEffect()
|
||||||
|
|
||||||
bool MagicLampEffect::supported()
|
bool MagicLampEffect::supported()
|
||||||
{
|
{
|
||||||
return DeformEffect::supported() && effects->animationsSupported();
|
return OffscreenEffect::supported() && effects->animationsSupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MagicLampEffect::reconfigure(ReconfigureFlags)
|
void MagicLampEffect::reconfigure(ReconfigureFlags)
|
||||||
|
@ -69,7 +69,7 @@ void MagicLampEffect::prePaintWindow(EffectWindow *w, WindowPrePaintData &data,
|
||||||
effects->prePaintWindow(w, data, presentTime);
|
effects->prePaintWindow(w, data, presentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MagicLampEffect::deform(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads)
|
void MagicLampEffect::apply(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads)
|
||||||
{
|
{
|
||||||
Q_UNUSED(mask)
|
Q_UNUSED(mask)
|
||||||
Q_UNUSED(data)
|
Q_UNUSED(data)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#ifndef KWIN_MAGICLAMP_H
|
#ifndef KWIN_MAGICLAMP_H
|
||||||
#define KWIN_MAGICLAMP_H
|
#define KWIN_MAGICLAMP_H
|
||||||
|
|
||||||
#include <kwindeformeffect.h>
|
#include <kwinoffscreeneffect.h>
|
||||||
|
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@ struct MagicLampAnimation
|
||||||
TimeLine timeLine;
|
TimeLine timeLine;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MagicLampEffect : public DeformEffect
|
class MagicLampEffect : public OffscreenEffect
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ public:
|
||||||
static bool supported();
|
static bool supported();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void deform(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads) override;
|
void apply(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads) override;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void slotWindowDeleted(KWin::EffectWindow *w);
|
void slotWindowDeleted(KWin::EffectWindow *w);
|
||||||
|
|
|
@ -190,7 +190,7 @@ void WobblyWindowsEffect::reconfigure(ReconfigureFlags)
|
||||||
|
|
||||||
bool WobblyWindowsEffect::supported()
|
bool WobblyWindowsEffect::supported()
|
||||||
{
|
{
|
||||||
return DeformEffect::supported() && effects->animationsSupported();
|
return OffscreenEffect::supported() && effects->animationsSupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WobblyWindowsEffect::setParameterSet(const ParameterSet &pset)
|
void WobblyWindowsEffect::setParameterSet(const ParameterSet &pset)
|
||||||
|
@ -267,7 +267,7 @@ void WobblyWindowsEffect::prePaintWindow(EffectWindow *w, WindowPrePaintData &da
|
||||||
effects->prePaintWindow(w, data, presentTime);
|
effects->prePaintWindow(w, data, presentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WobblyWindowsEffect::deform(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads)
|
void WobblyWindowsEffect::apply(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads)
|
||||||
{
|
{
|
||||||
if (!(mask & PAINT_SCREEN_TRANSFORMED) && windows.contains(w)) {
|
if (!(mask & PAINT_SCREEN_TRANSFORMED) && windows.contains(w)) {
|
||||||
quads = quads.makeRegularGrid(m_xTesselation, m_yTesselation);
|
quads = quads.makeRegularGrid(m_xTesselation, m_yTesselation);
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#define KWIN_WOBBLYWINDOWS_H
|
#define KWIN_WOBBLYWINDOWS_H
|
||||||
|
|
||||||
// Include with base class for effects.
|
// Include with base class for effects.
|
||||||
#include <kwindeformeffect.h>
|
#include <kwinoffscreeneffect.h>
|
||||||
|
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@ struct ParameterSet;
|
||||||
/**
|
/**
|
||||||
* Effect which wobble windows
|
* Effect which wobble windows
|
||||||
*/
|
*/
|
||||||
class WobblyWindowsEffect : public DeformEffect
|
class WobblyWindowsEffect : public OffscreenEffect
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(qreal stiffness READ stiffness)
|
Q_PROPERTY(qreal stiffness READ stiffness)
|
||||||
|
@ -129,7 +129,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void deform(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads) override;
|
void apply(EffectWindow *w, int mask, WindowPaintData &data, WindowQuadList &quads) override;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void slotWindowStartUserMovedResized(KWin::EffectWindow *w);
|
void slotWindowStartUserMovedResized(KWin::EffectWindow *w);
|
||||||
|
|
|
@ -12,8 +12,8 @@ ecm_setup_version(${PROJECT_VERSION}
|
||||||
set(kwin_EFFECTSLIB_SRCS
|
set(kwin_EFFECTSLIB_SRCS
|
||||||
anidata.cpp
|
anidata.cpp
|
||||||
kwinanimationeffect.cpp
|
kwinanimationeffect.cpp
|
||||||
kwindeformeffect.cpp
|
|
||||||
kwineffects.cpp
|
kwineffects.cpp
|
||||||
|
kwinoffscreeneffect.cpp
|
||||||
kwinoffscreenquickview.cpp
|
kwinoffscreenquickview.cpp
|
||||||
kwinquickeffect.cpp
|
kwinquickeffect.cpp
|
||||||
logging.cpp
|
logging.cpp
|
||||||
|
@ -70,13 +70,13 @@ install(FILES
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/kwineffects_export.h
|
${CMAKE_CURRENT_BINARY_DIR}/kwineffects_export.h
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/kwinglutils_export.h
|
${CMAKE_CURRENT_BINARY_DIR}/kwinglutils_export.h
|
||||||
kwinanimationeffect.h
|
kwinanimationeffect.h
|
||||||
kwindeformeffect.h
|
|
||||||
kwineffects.h
|
kwineffects.h
|
||||||
kwinglobals.h
|
kwinglobals.h
|
||||||
kwinglplatform.h
|
kwinglplatform.h
|
||||||
kwingltexture.h
|
kwingltexture.h
|
||||||
kwinglutils.h
|
kwinglutils.h
|
||||||
kwinglutils_funcs.h
|
kwinglutils_funcs.h
|
||||||
|
kwinoffscreeneffect.h
|
||||||
kwinoffscreenquickview.h
|
kwinoffscreenquickview.h
|
||||||
kwinquickeffect.h
|
kwinquickeffect.h
|
||||||
DESTINATION ${KDE_INSTALL_INCLUDEDIR} COMPONENT Devel)
|
DESTINATION ${KDE_INSTALL_INCLUDEDIR} COMPONENT Devel)
|
||||||
|
|
|
@ -282,7 +282,7 @@ quint64 AnimationEffect::p_animate(EffectWindow *w, Attribute a, uint meta, int
|
||||||
triggerRepaint();
|
triggerRepaint();
|
||||||
}
|
}
|
||||||
if (shader) {
|
if (shader) {
|
||||||
DeformEffect::redirect(w);
|
OffscreenEffect::redirect(w);
|
||||||
}
|
}
|
||||||
return ret_id;
|
return ret_id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <QEasingCurve>
|
#include <QEasingCurve>
|
||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
#include <QtMath>
|
#include <QtMath>
|
||||||
#include <kwindeformeffect.h>
|
#include <kwinoffscreeneffect.h>
|
||||||
#include <kwineffects_export.h>
|
#include <kwineffects_export.h>
|
||||||
|
|
||||||
namespace KWin
|
namespace KWin
|
||||||
|
@ -191,7 +191,7 @@ class AnimationEffectPrivate;
|
||||||
*
|
*
|
||||||
* @since 4.8
|
* @since 4.8
|
||||||
*/
|
*/
|
||||||
class KWINEFFECTS_EXPORT AnimationEffect : public DeformEffect
|
class KWINEFFECTS_EXPORT AnimationEffect : public OffscreenEffect
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
SPDX-License-Identifier: GPL-2.0-or-later
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "kwindeformeffect.h"
|
#include "kwinoffscreeneffect.h"
|
||||||
#include "kwingltexture.h"
|
#include "kwingltexture.h"
|
||||||
#include "kwinglutils.h"
|
#include "kwinglutils.h"
|
||||||
|
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
|
|
||||||
struct DeformOffscreenData
|
struct OffscreenData
|
||||||
{
|
{
|
||||||
QScopedPointer<GLTexture> texture;
|
QScopedPointer<GLTexture> texture;
|
||||||
QScopedPointer<GLFramebuffer> fbo;
|
QScopedPointer<GLFramebuffer> fbo;
|
||||||
|
@ -19,49 +19,49 @@ struct DeformOffscreenData
|
||||||
GLShader *shader = nullptr;
|
GLShader *shader = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DeformEffectPrivate
|
class OffscreenEffectPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QHash<EffectWindow *, DeformOffscreenData *> windows;
|
QHash<EffectWindow *, OffscreenData *> windows;
|
||||||
QMetaObject::Connection windowDamagedConnection;
|
QMetaObject::Connection windowDamagedConnection;
|
||||||
QMetaObject::Connection windowDeletedConnection;
|
QMetaObject::Connection windowDeletedConnection;
|
||||||
|
|
||||||
void paint(EffectWindow *window, GLTexture *texture, const QRegion ®ion,
|
void paint(EffectWindow *window, GLTexture *texture, const QRegion ®ion,
|
||||||
const WindowPaintData &data, const WindowQuadList &quads, GLShader *offscreenShader);
|
const WindowPaintData &data, const WindowQuadList &quads, GLShader *offscreenShader);
|
||||||
|
|
||||||
GLTexture *maybeRender(EffectWindow *window, DeformOffscreenData *offscreenData);
|
GLTexture *maybeRender(EffectWindow *window, OffscreenData *offscreenData);
|
||||||
bool live = true;
|
bool live = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
DeformEffect::DeformEffect(QObject *parent)
|
OffscreenEffect::OffscreenEffect(QObject *parent)
|
||||||
: Effect(parent)
|
: Effect(parent)
|
||||||
, d(new DeformEffectPrivate)
|
, d(new OffscreenEffectPrivate)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
DeformEffect::~DeformEffect()
|
OffscreenEffect::~OffscreenEffect()
|
||||||
{
|
{
|
||||||
qDeleteAll(d->windows);
|
qDeleteAll(d->windows);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DeformEffect::supported()
|
bool OffscreenEffect::supported()
|
||||||
{
|
{
|
||||||
return effects->isOpenGLCompositing();
|
return effects->isOpenGLCompositing();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::setLive(bool live)
|
void OffscreenEffect::setLive(bool live)
|
||||||
{
|
{
|
||||||
Q_ASSERT(d->windows.isEmpty());
|
Q_ASSERT(d->windows.isEmpty());
|
||||||
d->live = live;
|
d->live = live;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::redirect(EffectWindow *window)
|
void OffscreenEffect::redirect(EffectWindow *window)
|
||||||
{
|
{
|
||||||
DeformOffscreenData *&offscreenData = d->windows[window];
|
OffscreenData *&offscreenData = d->windows[window];
|
||||||
if (offscreenData) {
|
if (offscreenData) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
offscreenData = new DeformOffscreenData;
|
offscreenData = new OffscreenData;
|
||||||
|
|
||||||
if (d->windows.count() == 1) {
|
if (d->windows.count() == 1) {
|
||||||
setupConnections();
|
setupConnections();
|
||||||
|
@ -73,7 +73,7 @@ void DeformEffect::redirect(EffectWindow *window)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::unredirect(EffectWindow *window)
|
void OffscreenEffect::unredirect(EffectWindow *window)
|
||||||
{
|
{
|
||||||
delete d->windows.take(window);
|
delete d->windows.take(window);
|
||||||
if (d->windows.isEmpty()) {
|
if (d->windows.isEmpty()) {
|
||||||
|
@ -81,7 +81,7 @@ void DeformEffect::unredirect(EffectWindow *window)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::deform(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads)
|
void OffscreenEffect::apply(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads)
|
||||||
{
|
{
|
||||||
Q_UNUSED(window)
|
Q_UNUSED(window)
|
||||||
Q_UNUSED(mask)
|
Q_UNUSED(mask)
|
||||||
|
@ -89,7 +89,7 @@ void DeformEffect::deform(EffectWindow *window, int mask, WindowPaintData &data,
|
||||||
Q_UNUSED(quads)
|
Q_UNUSED(quads)
|
||||||
}
|
}
|
||||||
|
|
||||||
GLTexture *DeformEffectPrivate::maybeRender(EffectWindow *window, DeformOffscreenData *offscreenData)
|
GLTexture *OffscreenEffectPrivate::maybeRender(EffectWindow *window, OffscreenData *offscreenData)
|
||||||
{
|
{
|
||||||
const QRect geometry = window->expandedGeometry();
|
const QRect geometry = window->expandedGeometry();
|
||||||
QSize textureSize = geometry.size();
|
QSize textureSize = geometry.size();
|
||||||
|
@ -130,7 +130,7 @@ GLTexture *DeformEffectPrivate::maybeRender(EffectWindow *window, DeformOffscree
|
||||||
return offscreenData->texture.data();
|
return offscreenData->texture.data();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffectPrivate::paint(EffectWindow *window, GLTexture *texture, const QRegion ®ion,
|
void OffscreenEffectPrivate::paint(EffectWindow *window, GLTexture *texture, const QRegion ®ion,
|
||||||
const WindowPaintData &data, const WindowQuadList &quads, GLShader *offscreenShader)
|
const WindowPaintData &data, const WindowQuadList &quads, GLShader *offscreenShader)
|
||||||
{
|
{
|
||||||
GLShader *shader = offscreenShader ? offscreenShader : ShaderManager::instance()->shader(ShaderTrait::MapTexture | ShaderTrait::Modulate | ShaderTrait::AdjustSaturation);
|
GLShader *shader = offscreenShader ? offscreenShader : ShaderManager::instance()->shader(ShaderTrait::MapTexture | ShaderTrait::Modulate | ShaderTrait::AdjustSaturation);
|
||||||
|
@ -187,9 +187,9 @@ void DeformEffectPrivate::paint(EffectWindow *window, GLTexture *texture, const
|
||||||
vbo->unbindArrays();
|
vbo->unbindArrays();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::drawWindow(EffectWindow *window, int mask, const QRegion ®ion, WindowPaintData &data)
|
void OffscreenEffect::drawWindow(EffectWindow *window, int mask, const QRegion ®ion, WindowPaintData &data)
|
||||||
{
|
{
|
||||||
DeformOffscreenData *offscreenData = d->windows.value(window);
|
OffscreenData *offscreenData = d->windows.value(window);
|
||||||
if (!offscreenData) {
|
if (!offscreenData) {
|
||||||
effects->drawWindow(window, mask, region, data);
|
effects->drawWindow(window, mask, region, data);
|
||||||
return;
|
return;
|
||||||
|
@ -208,36 +208,36 @@ void DeformEffect::drawWindow(EffectWindow *window, int mask, const QRegion ®
|
||||||
|
|
||||||
WindowQuadList quads;
|
WindowQuadList quads;
|
||||||
quads.append(quad);
|
quads.append(quad);
|
||||||
deform(window, mask, data, quads);
|
apply(window, mask, data, quads);
|
||||||
|
|
||||||
GLTexture *texture = d->maybeRender(window, offscreenData);
|
GLTexture *texture = d->maybeRender(window, offscreenData);
|
||||||
d->paint(window, texture, region, data, quads, offscreenData->shader);
|
d->paint(window, texture, region, data, quads, offscreenData->shader);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::handleWindowDamaged(EffectWindow *window)
|
void OffscreenEffect::handleWindowDamaged(EffectWindow *window)
|
||||||
{
|
{
|
||||||
DeformOffscreenData *offscreenData = d->windows.value(window);
|
OffscreenData *offscreenData = d->windows.value(window);
|
||||||
if (offscreenData) {
|
if (offscreenData) {
|
||||||
offscreenData->isDirty = true;
|
offscreenData->isDirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::handleWindowDeleted(EffectWindow *window)
|
void OffscreenEffect::handleWindowDeleted(EffectWindow *window)
|
||||||
{
|
{
|
||||||
unredirect(window);
|
unredirect(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::setupConnections()
|
void OffscreenEffect::setupConnections()
|
||||||
{
|
{
|
||||||
if (d->live) {
|
if (d->live) {
|
||||||
d->windowDamagedConnection =
|
d->windowDamagedConnection =
|
||||||
connect(effects, &EffectsHandler::windowDamaged, this, &DeformEffect::handleWindowDamaged);
|
connect(effects, &EffectsHandler::windowDamaged, this, &OffscreenEffect::handleWindowDamaged);
|
||||||
}
|
}
|
||||||
d->windowDeletedConnection =
|
d->windowDeletedConnection =
|
||||||
connect(effects, &EffectsHandler::windowDeleted, this, &DeformEffect::handleWindowDeleted);
|
connect(effects, &EffectsHandler::windowDeleted, this, &OffscreenEffect::handleWindowDeleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::destroyConnections()
|
void OffscreenEffect::destroyConnections()
|
||||||
{
|
{
|
||||||
disconnect(d->windowDamagedConnection);
|
disconnect(d->windowDamagedConnection);
|
||||||
disconnect(d->windowDeletedConnection);
|
disconnect(d->windowDeletedConnection);
|
||||||
|
@ -246,9 +246,9 @@ void DeformEffect::destroyConnections()
|
||||||
d->windowDeletedConnection = {};
|
d->windowDeletedConnection = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeformEffect::setShader(EffectWindow *window, GLShader *shader)
|
void OffscreenEffect::setShader(EffectWindow *window, GLShader *shader)
|
||||||
{
|
{
|
||||||
DeformOffscreenData *offscreenData = d->windows.value(window);
|
OffscreenData *offscreenData = d->windows.value(window);
|
||||||
if (offscreenData) {
|
if (offscreenData) {
|
||||||
offscreenData->shader = shader;
|
offscreenData->shader = shader;
|
||||||
}
|
}
|
|
@ -11,29 +11,28 @@
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
|
|
||||||
class DeformEffectPrivate;
|
class OffscreenEffectPrivate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The DeformEffect class is the base class for effects that paint deformed windows.
|
* The OffscreenEffect class is the base class for effects that paint deformed windows.
|
||||||
*
|
*
|
||||||
* Under the hood, the DeformEffect will paint the window into an offscreen texture,
|
* Under the hood, the OffscreenEffect will paint the window into an offscreen texture
|
||||||
* which will be mapped onto transformed window quad grid later on.
|
* and the offscreen texture will be transformed afterwards.
|
||||||
*
|
*
|
||||||
* The redirect() function must be called when the effect wants to transform a window.
|
* The redirect() function must be called when the effect wants to transform a window.
|
||||||
* Once the effect is no longer interested in the window, the unredirect() function
|
* Once the effect is no longer interested in the window, the unredirect() function
|
||||||
* must be called.
|
* must be called.
|
||||||
*
|
*
|
||||||
* If a window is redirected into offscreen texture, the deform() function will be
|
* If a window is redirected into offscreen texture, the deform() function will be
|
||||||
* called with the window quads that can be mutated by the effect. The effect can
|
* called to transform the offscreen texture.
|
||||||
* sub-divide, remove, or transform the window quads.
|
|
||||||
*/
|
*/
|
||||||
class KWINEFFECTS_EXPORT DeformEffect : public Effect
|
class KWINEFFECTS_EXPORT OffscreenEffect : public Effect
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DeformEffect(QObject *parent = nullptr);
|
explicit OffscreenEffect(QObject *parent = nullptr);
|
||||||
~DeformEffect() override;
|
~OffscreenEffect() override;
|
||||||
|
|
||||||
static bool supported();
|
static bool supported();
|
||||||
|
|
||||||
|
@ -59,9 +58,9 @@ protected:
|
||||||
void unredirect(EffectWindow *window);
|
void unredirect(EffectWindow *window);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Override this function to transform the window quad grid of the given window.
|
* Override this function to transform the window.
|
||||||
*/
|
*/
|
||||||
virtual void deform(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads);
|
virtual void apply(EffectWindow *window, int mask, WindowPaintData &data, WindowQuadList &quads);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows to specify a @p shader to draw the redirected texture for @p window.
|
* Allows to specify a @p shader to draw the redirected texture for @p window.
|
||||||
|
@ -78,7 +77,7 @@ private:
|
||||||
void setupConnections();
|
void setupConnections();
|
||||||
void destroyConnections();
|
void destroyConnections();
|
||||||
|
|
||||||
QScopedPointer<DeformEffectPrivate> d;
|
QScopedPointer<OffscreenEffectPrivate> d;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace KWin
|
} // namespace KWin
|
Loading…
Reference in a new issue