Warning, /sdk/licensedigger/autotests/testdata_conversionexamples/blur.h.spdx is written in an unsupported language. File is not indexed.
0001 /* 0002 * Copyright © 2010 Fredrik Höglund <fredrik@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef BLUR_H 0008 #define BLUR_H 0009 0010 #include <kwineffects.h> 0011 #include <kwinglplatform.h> 0012 #include <kwinglutils.h> 0013 0014 #include <QVector> 0015 #include <QVector2D> 0016 0017 namespace KWin 0018 { 0019 0020 class BlurShader; 0021 0022 class BlurEffect : public KWin::Effect 0023 { 0024 Q_OBJECT 0025 Q_PROPERTY(int blurRadius READ blurRadius) 0026 Q_PROPERTY(bool cacheTexture READ isCacheTexture) 0027 public: 0028 BlurEffect(); 0029 ~BlurEffect(); 0030 0031 static bool supported(); 0032 static bool enabledByDefault(); 0033 0034 void reconfigure(ReconfigureFlags flags); 0035 void prePaintScreen(ScreenPrePaintData &data, int time); 0036 void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); 0037 void drawWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data); 0038 void paintEffectFrame(EffectFrame *frame, QRegion region, double opacity, double frameOpacity); 0039 0040 // for dynamic setting extraction 0041 int blurRadius() const; 0042 bool isCacheTexture() const { 0043 return m_shouldCache; 0044 } 0045 virtual bool provides(Feature feature); 0046 0047 int requestedEffectChainPosition() const override { 0048 return 75; 0049 } 0050 0051 public Q_SLOTS: 0052 void slotWindowAdded(KWin::EffectWindow *w); 0053 void slotWindowDeleted(KWin::EffectWindow *w); 0054 void slotPropertyNotify(KWin::EffectWindow *w, long atom); 0055 void slotScreenGeometryChanged(); 0056 0057 private: 0058 QRect expand(const QRect &rect) const; 0059 QRegion expand(const QRegion ®ion) const; 0060 QRegion blurRegion(const EffectWindow *w) const; 0061 bool shouldBlur(const EffectWindow *w, int mask, const WindowPaintData &data) const; 0062 void updateBlurRegion(EffectWindow *w) const; 0063 void doBlur(const QRegion &shape, const QRect &screen, const float opacity); 0064 void doCachedBlur(EffectWindow *w, const QRegion& region, const float opacity); 0065 void uploadRegion(QVector2D *&map, const QRegion ®ion); 0066 void uploadGeometry(GLVertexBuffer *vbo, const QRegion &horizontal, const QRegion &vertical); 0067 0068 private: 0069 BlurShader *shader; 0070 GLRenderTarget *target; 0071 GLTexture tex; 0072 long net_wm_blur_region; 0073 QRegion m_damagedArea; // keeps track of the area which has been damaged (from bottom to top) 0074 QRegion m_paintedArea; // actually painted area which is greater than m_damagedArea 0075 QRegion m_currentBlur; // keeps track of the currently blured area of non-caching windows(from bottom to top) 0076 bool m_shouldCache; 0077 0078 struct BlurWindowInfo { 0079 GLTexture blurredBackground; // keeps the horizontally blurred background 0080 QRegion damagedRegion; 0081 QPoint windowPos; 0082 bool dropCache; 0083 }; 0084 0085 QHash< const EffectWindow*, BlurWindowInfo > windows; 0086 typedef QHash<const EffectWindow*, BlurWindowInfo>::iterator CacheEntry; 0087 }; 0088 0089 inline 0090 bool BlurEffect::provides(Effect::Feature feature) 0091 { 0092 if (feature == Blur) { 0093 return true; 0094 } 0095 return KWin::Effect::provides(feature); 0096 } 0097 0098 0099 } // namespace KWin 0100 0101 #endif 0102