• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kde-workspace API Reference
  • KDE Home
  • Contact Us
 

KWin

  • kde-4.x
  • kde-workspace
  • kwin
composite.h
Go to the documentation of this file.
1 /********************************************************************
2  KWin - the KDE window manager
3  This file is part of the KDE project.
4 
5 Copyright (C) 2011 Arthur Arlt <[email protected]>
6 Copyright (C) 2012 Martin Gräßlin <[email protected]>
7 
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 *********************************************************************/
21 
22 #ifndef KWIN_COMPOSITE_H
23 #define KWIN_COMPOSITE_H
24 // KWin
25 #include <kwinglobals.h>
26 // KDE
27 #include <KSelectionOwner>
28 // Qt
29 #include <QObject>
30 #include <QElapsedTimer>
31 #include <QTimer>
32 #include <QBasicTimer>
33 #include <QRegion>
34 
35 namespace KWin {
36 
37 class Client;
38 class Scene;
39 
40 class CompositorSelectionOwner : public KSelectionOwner
41 {
42  Q_OBJECT
43 public:
44  CompositorSelectionOwner(const char *selection);
45 private:
46  friend class Compositor;
47  bool owning;
48 private Q_SLOTS:
49  void looseOwnership();
50 };
51 
52 class Compositor : public QObject {
53  Q_OBJECT
54  Q_CLASSINFO("D-Bus Interface", "org.kde.kwin.Compositing")
59  Q_PROPERTY(bool active READ isActive)
64  Q_PROPERTY(bool compositingPossible READ isCompositingPossible)
68  Q_PROPERTY(QString compositingNotPossibleReason READ compositingNotPossibleReason)
72  Q_PROPERTY(bool openGLIsBroken READ isOpenGLBroken)
81  Q_PROPERTY(QString compositingType READ compositingType)
82 public:
83  enum SuspendReason { NoReasonSuspend = 0, UserSuspend = 1<<0, BlockRuleSuspend = 1<<1, ScriptSuspend = 1<<2, AllReasonSuspend = 0xff };
84  Q_DECLARE_FLAGS(SuspendReasons, SuspendReason)
85  ~Compositor();
86  // when adding repaints caused by a window, you probably want to use
87  // either Toplevel::addRepaint() or Toplevel::addWorkspaceRepaint()
88  void addRepaint(const QRect& r);
89  void addRepaint(const QRegion& r);
90  void addRepaint(int x, int y, int w, int h);
95  bool isActive();
96  int xrrRefreshRate() const {
97  return m_xrrRefreshRate;
98  }
99  void setCompositeResetTimer(int msecs);
100 
101  bool hasScene() const {
102  return m_scene != NULL;
103  }
104 
108  bool checkForOverlayWindow(WId w) const;
112  WId overlayWindow() const;
116  bool isOverlayWindowVisible() const;
120  void setOverlayWindowVisibility(bool visible);
127  void lastFrameRendered();
128 
129  Scene *scene() {
130  return m_scene;
131  }
132 
140  static bool isCreated() {
141  return s_compositor != NULL;
142  }
148  static bool compositing() {
149  return s_compositor != NULL && s_compositor->isActive();
150  }
151 
152  // for delayed supportproperty management of effects
153  void keepSupportProperty(xcb_atom_t atom);
154  void removeSupportProperty(xcb_atom_t atom);
155 
156  // D-Bus: getters for Properties, see documentation on the property
157  bool isCompositingPossible() const;
158  QString compositingNotPossibleReason() const;
159  bool isOpenGLBroken() const;
160  QString compositingType() const;
161 
162 public Q_SLOTS:
163  void addRepaintFull();
171  Q_SCRIPTABLE void toggleCompositing();
182  Q_SCRIPTABLE inline void suspend() { suspend(ScriptSuspend); }
183  void suspend(Compositor::SuspendReason reason);
201  Q_SCRIPTABLE inline void resume() { resume(ScriptSuspend); }
202  void resume(Compositor::SuspendReason reason);
228  // NOTICE this is atm. for script usage *ONLY* and needs to be extended like resume / suspend are
229  // if intended to be used from within KWin code!
230  Q_SCRIPTABLE void setCompositing(bool active);
238  void slotToggleCompositing();
243  void slotReinitialize();
247  void scheduleRepaint();
248  void checkUnredirect();
249  void checkUnredirect(bool force);
250  void updateCompositeBlocking();
251  void updateCompositeBlocking(KWin::Client* c);
252 
253  // For the D-Bus interface
254 
255 Q_SIGNALS:
256  Q_SCRIPTABLE void compositingToggled(bool active);
257 
258 protected:
259  void timerEvent(QTimerEvent *te);
260 
261 private Q_SLOTS:
262  void setup();
266  void slotCompositingOptionsInitialized();
267  void finish();
272  void restart();
273  void fallbackToXRenderCompositing();
274  void performCompositing();
275  void delayedCheckUnredirect();
276  void slotConfigChanged();
277  void releaseCompositorSelection();
278  void deleteUnusedSupportProperties();
279 
280 private:
281  void setCompositeTimer();
282  bool windowRepaintsPending() const;
283 
287  SuspendReasons m_suspended;
288 
289  QBasicTimer compositeTimer;
290  CompositorSelectionOwner* cm_selection;
291  QTimer m_releaseSelectionTimer;
292  QList<xcb_atom_t> m_unusedSupportProperties;
293  QTimer m_unusedSupportPropertyTimer;
294  qint64 vBlankInterval, fpsInterval;
295  int m_xrrRefreshRate;
296  QElapsedTimer nextPaintReference;
297  QRegion repaints_region;
298 
299  QTimer unredirectTimer;
300  bool forceUnredirectCheck;
301  QTimer compositeResetTimer; // for compressing composite resets
302  bool m_finishing; // finish() sets this variable while shutting down
303  bool m_starting; // start() sets this variable while starting
304  qint64 m_timeSinceLastVBlank;
305  Scene *m_scene;
306  bool m_waitingForFrameRendered;
307 
308  KWIN_SINGLETON_VARIABLE(Compositor, s_compositor)
309 };
310 }
311 
312 # endif // KWIN_COMPOSITE_H
KWin::Compositor::hasScene
bool hasScene() const
Definition: composite.h:101
KWin::Compositor::toggleCompositing
Q_SCRIPTABLE void toggleCompositing()
Called from the D-Bus interface.
Definition: composite.cpp:443
KWin::CompositorSelectionOwner::CompositorSelectionOwner
CompositorSelectionOwner(const char *selection)
Definition: composite.cpp:66
KWin::Compositor::removeSupportProperty
void removeSupportProperty(xcb_atom_t atom)
Definition: composite.cpp:365
KWin::Compositor::isOverlayWindowVisible
bool isOverlayWindowVisible() const
Definition: composite.cpp:804
KWin::Compositor::isActive
bool isActive()
Whether the Compositor is active.
Definition: composite.cpp:730
KWin::Compositor::compositingPossible
bool compositingPossible
Whether compositing is possible.
Definition: composite.h:64
QBasicTimer
KWin::Compositor::updateCompositeBlocking
void updateCompositeBlocking()
Definition: composite.cpp:458
KWin::Compositor::slotReinitialize
void slotReinitialize()
Re-initializes the Compositor completely.
Definition: composite.cpp:411
KWin::Compositor::lastFrameRendered
void lastFrameRendered()
Hook for the Scene to notify about a that the last frame got rendered.
Definition: composite.cpp:565
KSelectionOwner
KWin::Compositor::addRepaint
void addRepaint(const QRect &r)
Definition: composite.cpp:533
KWin::Compositor::isCreated
static bool isCreated()
Checks whether the Compositor has already been created by the Workspace.
Definition: composite.h:140
KWin::Compositor::timerEvent
void timerEvent(QTimerEvent *te)
Definition: composite.cpp:557
KWin::Compositor::keepSupportProperty
void keepSupportProperty(xcb_atom_t atom)
Definition: composite.cpp:360
KWin::Compositor::compositingToggled
Q_SCRIPTABLE void compositingToggled(bool active)
KWin::Compositor::AllReasonSuspend
Definition: composite.h:83
KWin::Compositor::addRepaintFull
void addRepaintFull()
Definition: composite.cpp:549
QTimerEvent
KWin::Compositor::compositing
static bool compositing()
Static check to test whether the Compositor is available and active.
Definition: composite.h:148
QRect
KWin::Compositor::isCompositingPossible
bool isCompositingPossible() const
Definition: composite.cpp:822
QTimer
QObject
KWin::Compositor::NoReasonSuspend
Definition: composite.h:83
KWin::Compositor::scene
Scene * scene()
Definition: composite.h:129
KWin::Compositor::active
bool active
Whether the Compositor is active.
Definition: composite.h:59
QString
QList< xcb_atom_t >
KWin::Compositor::setOverlayWindowVisibility
void setOverlayWindowVisibility(bool visible)
Set's the Scene's Overlay X Window visibility to visible.
Definition: composite.cpp:815
QElapsedTimer
KWin::Compositor::checkUnredirect
void checkUnredirect()
Definition: composite.cpp:735
KWin::Compositor::setCompositeResetTimer
void setCompositeResetTimer(int msecs)
Definition: composite.cpp:669
KWin::Compositor
Definition: composite.h:52
KWin::Compositor::setCompositing
Q_SCRIPTABLE void setCompositing(bool active)
Tries to suspend or resume the Compositor based on active.
Definition: composite.cpp:505
KWin::Compositor::checkForOverlayWindow
bool checkForOverlayWindow(WId w) const
Checks whether w is the Scene's overlay window.
Definition: composite.cpp:779
KWin::Compositor::UserSuspend
Definition: composite.h:83
KWin::Compositor::compositingType
QString compositingType() const
KWin::Scene
Definition: scene.h:43
KWin::Compositor::resume
Q_SCRIPTABLE void resume()
Resumes the Compositor if it is currently suspended.
Definition: composite.h:201
KWin::Compositor::slotToggleCompositing
void slotToggleCompositing()
Actual slot to perform the toggling compositing.
Definition: composite.cpp:429
KWin::Compositor::BlockRuleSuspend
Definition: composite.h:83
KWin::CompositorSelectionOwner
Definition: composite.h:40
KWin::Compositor::compositingNotPossibleReason
QString compositingNotPossibleReason() const
KWin::Compositor::SuspendReason
SuspendReason
Definition: composite.h:83
KWin::Q_DECLARE_FLAGS
Q_DECLARE_FLAGS(LoadEffectFlags, LoadEffectFlag)
KWin::Compositor::ScriptSuspend
Definition: composite.h:83
KWin::Compositor::scheduleRepaint
void scheduleRepaint()
Schedules a new repaint if no repaint is currently scheduled.
Definition: composite.cpp:287
KWin::Compositor::xrrRefreshRate
int xrrRefreshRate() const
Definition: composite.h:96
KWin::Compositor::overlayWindow
WId overlayWindow() const
Definition: composite.cpp:793
KWin::Compositor::isOpenGLBroken
bool isOpenGLBroken() const
Definition: composite.cpp:832
KWin::Client
The Client class encapsulates a window decoration frame.
Definition: client.h:71
KWin::Compositor::~Compositor
~Compositor()
Definition: composite.cpp:133
KWin::Compositor::openGLIsBroken
bool openGLIsBroken
Whether OpenGL has failed badly in the past (crash) and is considered as broken.
Definition: composite.h:72
QRegion
KWin::Compositor::suspend
Q_SCRIPTABLE void suspend()
Suspends the Compositor if it is currently active.
Definition: composite.h:182
This file is part of the KDE documentation.
Documentation copyright © 1996-2019 The KDE developers.
Generated on Sun Dec 8 2019 03:18:07 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KWin

Skip menu "KWin"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kde-workspace API Reference

Skip menu "kde-workspace API Reference"
  • KWin
  •   KWin Decoration Library
  •   KWin Effects Library
  • Plasma
  • Plasma
  •   Applets
  •   Engines
  •   libkworkspace
  •   libtaskmanager
  • System Settings
  •   SystemSettingsView

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal