Commit Graph

146 Commits (628fb7f79d5cc4030f44bbf83d63ef028c0476ab)

Author SHA1 Message Date
Martin Gräßlin c7262e8bd3 Getter/setters for opacity, saturation and brightness in WindowPaintData
The public member variables for opacity, saturation and brightness
are removed in favor for getter and setters. The variables are
moved into a private class. Those are now qreal instead of double.

To make usage inside the effects easier a multiply method is added
which multiplies the current value with passed in factor and returns
the new value in a functional programming style.

This commit is the top-most of a patch series to refactor
ScreenPaintData and WindowPaintData. Other related commits are:
* 0811772
* ebdc7ec
* 2c8dd8d
* 7699726
* 68e0201
* 611cb09

REVIEW: 105141
BUG: 303314
FIXED-IN: 4.10
2012-07-19 18:25:48 +02:00
Martin Gräßlin a2b0d42916 Replace translation by QVector3D in Screen/Window PaintData 2012-07-19 18:25:03 +02:00
Martin Gräßlin 0eff12eb92 Use QGraphicsScale for scale information in ScreenPaintData 2012-07-19 18:25:03 +02:00
Thomas Lübking fc665106c9 Swap vsync order, trade in 1frame lag
REVIEW: 103058
2012-05-17 11:41:26 +02:00
Thomas Lübking 88aeec920e re-add SceneXRender::paintGenericScreen implementation to cache screen_paint data 2012-03-21 00:37:10 +01:00
Thomas Lübking 1070bf895b split decorationRect / visibleRect usage
REVIEW: 104215

cherry-picked from 0f3380f3b10e57416f81a1288dc10b8dfe11d87e
Conflicts:

	kwin/geometry.cpp
	kwin/scene.cpp
2012-03-21 00:36:50 +01:00
Thomas Lübking 5e2414544f add offscreen render support to xrender
REVIEW: 104151
cherry-picked from b9534b4ca82973c2e99451b2e151241fd1b6e7cb
2012-03-21 00:35:31 +01:00
Thomas Lübking 357b6b5338 resolve merge conflict 2012-03-07 22:02:26 +01:00
Thomas Lübking 3e4cb7539e fix shading for xrender compositing
REVIEW: 104150
2012-03-07 20:53:38 +01:00
Martin Gräßlin 212908ee88 Refactoring of KWin::Options: getter methods instead of public variables 2012-02-27 19:31:58 +01:00
Philipp Knechtges 9f9bde77ad kwin: removing SceneXrender::paintTransformedScreen
It is an unused function which becomes more and more obsolete with a
better support of transformed windows in paintSimpleScreen.
2012-02-09 14:52:46 +01:00
Philipp Knechtges 55a75da893 kwin: fixing xrender shadow bug
This fixes a xrender shadow bug, which was introduced in commmit
7a8398f80ec0aa67ed1102cded2bbb45d7736ecb.

Many thx to Jacopo De Simoi.
2012-02-07 10:46:17 +01:00
Thomas Lübking d845b60c6c change geometry w/o compositor restart
This possibly fails on some (older?) ati chip/driver combos
-> Waiting for bugreports

REVIEW: 103246
2012-01-24 22:27:15 +01:00
Philipp Knechtges 050d991cb1 kwin: simplifying paintSimpleScreen
This patch reduces the number of QRegion and WindowQuadList operations
by drawing the opaque and translucent parts of the window within the
same bottom to top pass.

REVIEW: 103671
2012-01-11 18:04:28 +01:00
Martin Gräßlin 6e445fb75c Less unused parameter/variable warnings in kwin
SVN_SILENT
2011-12-31 15:08:54 +01:00
Thomas Lübking 393b8a3eee scene_xrender.cpp, replace QRect = QRect by QRect::setRect 2011-12-18 19:51:52 +01:00
Thomas Lübking 634a504ce1 straighten xrender shadow implementation
did not publish function & enum in the baseclass, but inlined the accessor

REVIEW: 103232
(cherry picked from commit ecfa39ac3ca1c9823a6b320ff0f7a60ab32f0418)
2011-11-27 15:03:41 +01:00
Thomas Lübking 19bb897c5b fix opacity bug in scene_xrender
resort xrender painting - paints deco after client to avoid pot. opacity mask recalculation
2011-11-24 20:17:19 +01:00
Fredrik Höglund eb9988b788 kwin: Make Scene::m_renderTimer a non-member
It's only used in Scene::paint(), and its value is not valid
between calls.
2011-10-29 17:41:16 +02:00
Thomas Lübking 8f81339bca fix xrender scale+shadowed toplevel geometry
(cherry picked from commit 01ea7ad7f2a97924f4b6ee41adde01eef27b6e8b)

REVIEW: 102703
FIXED-IN: 4.7.3
2011-10-10 20:49:01 +02:00
Martin Gräßlin 6e15c0c208 Change timers to QElapsedTimers
Instead of calculating the elapsed time from epoch clock, using
a QElapsedTimer as well as reusing the timer object instead of
creating a new one in the scene each frame.

REVIEW: 102473
2011-08-29 06:48:44 +02:00
Thomas Lübking 734052a784 implement and fix scaled XRender shadows
(cherry picked from commit 5fa1a06fd8fdd3081a48ba921b2e670a60a49695)
2011-08-02 23:11:02 +02:00
Thomas Lübking 7057bb2c25 fix new shadows
(cherry picked from commit 6f03f28509834cb145b8548dfd0322cc6d62364f)
2011-07-12 22:20:21 +02:00
Arthur Arlt d8072be54d Move OverlayWindow from Workspace to its own class
All the functionality of Overlay Window is moved to its own class
OverlayWindow. It is created and owned by class Scene, since almost
all function calls are called from this class.

REVIEW: 101866
2011-07-09 19:08:48 +02:00
Arthur Arlt 02e08be5bd Merge signals clientClosed() and unmanagedClosed() to windowClosed()
This commit merges the two signals clientClosed() and unmanagedClosed() to windowClosed() which
is now provided by Toplevel.
The approriate slots in effects.h and effects.cpp were merges as well, since they did the
same.
The direct method calls of the method windowClosed() in SceneOpenGL and SceneXRender were
removed and are now connected to the appropriate signal in windowAdded().
2011-07-05 11:46:13 +02:00
Arthur Arlt 859dacb8b5 Make Scene::windowClosed() a Q_SLOT
This commit just makes the declaration of windowClosed() in Class Scene be a Q_SLOT.
The inheriting classes SceneOpenGL and SceneXRender are updated as well.
2011-07-05 11:46:13 +02:00
Arthur Arlt b63c9c1af8 Make mothod windowGeometryShapeChanged() a slot
The method windowGeometryShapeChanged() from the class Scene is now a slot. It is now connected to the signal geometryShapeChanged() which is sent from Toplevel instances Client and Unmanaged.
All direct method calls were deleted.
2011-07-05 11:34:12 +02:00
Arthur Arlt 59a8aac752 Make windowOpacityChanged() a slot
The method windowOpacityChanged is now a protected slot in class Scene. The implementations in the subclasses SceneOpenGL and SceneXRender are the same. The slots are connected to the singal opacityChanged() from Toplevel. The connection is done in the method windowAdded() in both SceneOpenGL and SceneXRender.
2011-07-05 11:34:12 +02:00
Martin Gräßlin 6cfdbfe1dc Remove compositing self-check
Removes the last bits of the self-check at compositing startup.
It seems like they were only added to XRender because they were
in OpenGL and there they are not available for quite some time.

Also removes the now obsolete disable functionality checks from UI.

REVIEW: 101756
2011-06-26 09:19:22 +02:00
Thomas Lübking 3af7395ab8 avoid calling QPixmap::paintEngine() in scene rendering
by checking the graphicssystem at startup
also avoid pixmap and memory leaking on the xrender backend, validate some pointers
on deletion in SceneOpnGL and avoid attempts to render ::isNull pixmaps
2011-06-11 15:23:03 +02:00
Martin Gräßlin 234ec644d2 KWin supports graphicssystem Raster
With raster a QPixmap is no longer a XPixmap which fails all code
which assumes that an QPixmap is an XPixmap. Depending on were in
the codebase we either convert such pixmaps to images (OpenGL) or
create a XPixmap and use QPixmap::fromX11Pixmap to get a "real"
pixmap.

It is possible that there are more code pathes were we would need
a XPixmap. Currently tested is basic functionality of no-compositing,
XRender compositing, OpenGl/GLX and OpenGL ES/EGL compositing.

For OpenGL compositing raster might result in performance improvements,
for XRender it is possible that there are regressions when using raster.
By default KWin uses whatever is the default of the system, so we just
no longer enforce native.

Of course it is a bad idea to use graphicssystem OpenGL. As that
is broken anyways in Qt, we do not check for it.

Many thanks to Philipp Knechtges for bringing up the issue, convincing
me that we need it and providing most of the patch.

REVIEW: 101132
CCMAIL: Philipp.Knechtges@rwth-aachen.de
2011-05-12 18:52:38 +02:00
Jacopo De Simoi 2573bec755 XRender backend: do not process invalid shadow data 2011-05-09 11:14:20 -04:00
Jacopo De Simoi 57c2b33bce XRender backend: Paint shadow with window contents only, not with decoration
This notably fixes glitches with shadow menus of a well-known xul-based browser.
2011-05-06 09:53:04 -04:00
Jacopo De Simoi 42941eba8a kwin: Fix the clip intersection code (XRender)
Do not process windows if the clip region does not
intersect the window region
2011-04-28 11:39:59 -04:00
Jacopo De Simoi e688058235 kwin: Implement shadows in XRender compositor
There are still some glitches to be fixed, but
it works well for most use-cases.
2011-04-28 11:39:48 -04:00
Martin Gräßlin 022d7a32a0 Remove binding of selection to styled EffectFrame
This allows to just set the selection on a None EffectFrame so
that only the selection is rendered without blurring the background
and so on.
2011-04-28 13:49:22 +02:00
Jacopo De Simoi 696d2da570 Fix glitches with scaled windows for the XRender backend
Scale window contents and decorations togheter in order to
avoid 1px glitches caused by rounding errors;
This has the net benefit of scaling only one pixmap instead of two
for each window*clipper and should actually give some performance bonus

I've tested this for some time with no issues, but this commit
*might* cause regressions. In case, let me know.
CC: kwin@kde.org
2011-04-25 11:13:20 -04:00
Jacopo De Simoi 82150abeb3 Fix jerky animations for the XRender backend
The code controlling timing for the animations
assumes that all painting is finished when the
Scene has finished painting. Since the X protocol
is asyncronous we need to call XSync (and not XFlush)
to make sure all painting has finished.
Tested for more than 2 weeks without issues.

NB: This is the same commit as
d0cf7ff6da4c6f8bcc684dd6378e2af09d36bb06
due to style changes in kwin code I could not cherry-pick
it cleanly
2011-03-15 22:39:32 +01:00
Martin Gräßlin 0a7e48f7aa KWin uses kdelibs coding style. 2011-01-31 20:07:03 +01:00
Thomas Lübking 337e1eac18 revert vsync strategy, fix timeouts
differecens to patch atteched to 258971:
- removed debug statements
- fixed indention...
- NON vsync strategy does not rely on the estimation, but on the time passed since the last repaint trigger, allowing a precise framerate

CCBUG: 258971


svn path=/trunk/KDE/kdebase/workspace/; revision=1210445
2010-12-31 13:14:11 +00:00
Thomas Lübking 1956f10280 scale the clip rect by the proper scalefactor dimension...
svn path=/trunk/KDE/kdebase/workspace/; revision=1203283
2010-12-03 14:01:05 +00:00
Kevin Ottens ff61f40d8d Don't rely on the kdgstream typedef which is deprecated. Use QDebug
directly.

svn path=/trunk/KDE/kdebase/workspace/; revision=1190379
2010-10-27 14:16:56 +00:00
Luboš Luňák d467d26530 Do not introduce such generic indentifiers like None or Styled
into KWin's global namespace. Morever None already kind of clashes with X's None.
CCMAIL: kde@martin-graesslin.com


svn path=/trunk/KDE/kdebase/workspace/; revision=1170588
2010-09-01 14:15:06 +00:00
Martin Gräßlin eabad32cfb Add cross fade support for text and icon to EffectFrame.
This allows an effect to fade between old and new text/icon. As an example it's added to CoverSwitch.
Currently only supported in OpenGL. XRender might be added, but I'm missing an idea for an effect to add it.
Most effects using EffectFrame require OpenGL anyway.

svn path=/trunk/KDE/kdebase/workspace/; revision=1160252
2010-08-07 14:08:34 +00:00
Martin Gräßlin ef79d4c443 Use the normal Plasma selection to highlight the selected window in boxswitch.
So it is more consistent (in KDE newspeak "elegant") with other selections and as a plus we get rid of all the custom rendering code in boxswitch.

svn path=/trunk/KDE/kdebase/workspace/; revision=1155051
2010-07-26 20:00:04 +00:00
Martin Gräßlin fa832b7aa7 Cache the icon texture/picture in EffectFrame and use texture from pixmap to load the data in OpenGL mode. Yeah for less pixmap to image to gltexture conversations.
Some effects (boxswitch and flipswitch) still need to be changed to not set the icon in each frame.

svn path=/trunk/KDE/kdebase/workspace/; revision=1152367
2010-07-20 21:11:03 +00:00
Martin Gräßlin e2eebb6503 Refactoring of EffectFrame: EffectFrame becomes an interface just like EffectsHandler and EffectWindow and a concrete EffectFrameImpl in core.
Rendering of the EffectFrame is moved into the scene as Scene::EffectFrame with a concrete implementation in SceneXrender and SceneOpenGL.
A factory method for an EffectFrame is added to the EffectsHandler, which is used by the effects.
Next step: pass the EffectFrame through all effects, so that effects can transform, blur, invert whatever it.

svn path=/trunk/KDE/kdebase/workspace/; revision=1151271
2010-07-18 16:32:37 +00:00
Lucas Murray 8960c552d2 Remove OpenGL driver whitelist; Add protection against crashy glXQuery
functions and share the value with the KCM; Fallback to XRender
compositing if OpenGL fails to work correctly; Rearrange setting order
in options.h slightly and fix variable names

svn path=/trunk/KDE/kdebase/workspace/; revision=1079919
2010-01-25 10:02:08 +00:00
Fredrik Höglund 85d965a78e Fix a performance problem with the radeon driver and effects that use
tranformations when in Xrender mode.

svn path=/trunk/KDE/kdebase/workspace/; revision=1063025
2009-12-16 18:51:36 +00:00
Fredrik Höglund 0b992748be Switch the order, so the decoration is drawn before the client window.
svn path=/trunk/KDE/kdebase/workspace/; revision=1054380
2009-11-25 23:08:19 +00:00