e1c5f18414
different opacity (opacity only for decoration option). svn path=/trunk/KDE/kdebase/workspace/; revision=689855
366 lines
14 KiB
Text
366 lines
14 KiB
Text
This file lists TODO items for the compositing code.
|
|
|
|
See file COMPOSITE_HOWTO for setting up kwin_composite.
|
|
See file HACKING for details on developing KWin, including building
|
|
the kwin_composite branch.
|
|
See effects/howto.* for a HOWTO on writting effects.
|
|
See documentation in source (mainly in scene.cpp) for description
|
|
of the design of the compositing framework.
|
|
|
|
TODO
|
|
=================================
|
|
|
|
* = not done, will be either done by me, or should be at least discussed first with me
|
|
+ = not done, I don't plan on doing it that soon
|
|
- in other words, these should be the best ones for you if you want to help
|
|
! = like +, but they should be relatively simple
|
|
- in other words, these should be the best if you want to get started with the code
|
|
/ = work in progress
|
|
? = should it be done?
|
|
% = should be probably done later, during cleanups and preparations for being stable
|
|
|
|
|
|
KDE 4.0 TODO
|
|
=================================
|
|
|
|
- animations
|
|
- need to be faster (300ms at most)
|
|
- global setting?
|
|
|
|
- configure dialog
|
|
- dump kompmgr settings
|
|
? - some simple basic settings in the Translucency config tab
|
|
- generic options
|
|
|
|
- shortcut configuration
|
|
- configurable per effect (in the options dialog)
|
|
|
|
- handle selecting mode
|
|
- opengl vs xrender option
|
|
- tfp vs shm should not be needed
|
|
|
|
- different handling of differeng gfx cards
|
|
- check that nvidia/ati/intel work and add specific hacks if needed
|
|
- the same about driver versions
|
|
|
|
- default effects and their settings
|
|
|
|
- effects (to do)
|
|
- add configuration options (dialogs)
|
|
- add generic support to use effect only for certain window types [Seli]
|
|
- split effects to groups (eyecandy, accessibility, whatever)
|
|
- login effect, e.g. fade to desktop
|
|
- logout effect [Seli]
|
|
- effect for windows demanding attention
|
|
- rays? ripples?
|
|
- explosion
|
|
? - use for forcible killing (add support to windowClosed())
|
|
- diminactive
|
|
* - needs grouping for unmanaged windows [Seli]
|
|
- trailfocus (windows keep getting darker over time)
|
|
* - inactive window notification (when it stops responding) [Seli]
|
|
- shadow
|
|
- xrender mode
|
|
- needs to follow the window shape
|
|
- make transparent
|
|
- make windows that are moved/resized by the user slightly transparent
|
|
- hide all testing, demo etc. effects in final builds
|
|
- presentwindows
|
|
- should show window icon, title (like boxswitch)
|
|
- boxswitch
|
|
? - better frame graphics
|
|
- should share some features (next/previous, etc.) with presentwindows
|
|
? - duplicate code or try to share it?
|
|
- presentwindows
|
|
- should preserve aspect ratio (as an option?)
|
|
- taskbar thumbnail [Seli]
|
|
- define protocol (with _KDE prefix for now?)
|
|
- add support to taskbar
|
|
- rollup animation when shading/unshading window [Seli]
|
|
- also use it for comboboxes
|
|
- select a region to zoom
|
|
- needs mouse to be warped
|
|
|
|
- fix inclusion of config-X11.h in installed headers [Seli]
|
|
|
|
- IHV database - set config settings according to card/driver
|
|
? - some sort of performance slider
|
|
|
|
? - undirect fullscreen windows
|
|
|
|
- fix shading
|
|
|
|
? generic dbus scripting support
|
|
|
|
- check effects' dependencies when loading [rivo]
|
|
- correct ordering for effects [rivo]
|
|
would be nice if isn't too strict
|
|
|
|
/ vertex redesign [Seli]
|
|
affects alpha clear hack
|
|
- not using ARGB visuals
|
|
|
|
- handling of window pixmaps for unmapped windows [Seli]
|
|
- strict binding
|
|
|
|
- shm mode needs support for more data formats than GL_BGRA
|
|
|
|
? __GL_YIELD=NOTHING
|
|
|
|
- check what works with XRender
|
|
|
|
- more notification functions for effects
|
|
|
|
- documentation
|
|
|
|
- disable application effects when kwin can provide them, e.g. shadow/transparency
|
|
|
|
- since API won't be stable, a version check for modules is needed
|
|
|
|
General TODO
|
|
=================================
|
|
|
|
? alpha clear hack
|
|
+ - find out if it affects performance
|
|
+ - if yes, try to find a better way of solving the problem
|
|
! - since kompmgr has an option to make only the decoration transparent,
|
|
it should be possible to do the same here - if the window has alpha and a decoration
|
|
or if there should be only the decoration transparent, paint first the contents
|
|
and then the decoration - this should make it possible to paint the decoration
|
|
without the random alpha that is right now handled by the alpha hack
|
|
|
|
? wait for decoration repaints
|
|
- it is sometimes visible that the window contents are painted first and the decoration
|
|
only afterwards with a small delay
|
|
? - this has been already greatly improved by r632378, so it's maybe not worth it anymore
|
|
- maybe posted paint events need to be processed immediatelly, or maybe the compositing
|
|
code should not update the window until the decoration is finished painting
|
|
|
|
? Expose events for overlay window - is it necessary to track it, like with root window?
|
|
|
|
% paint throttling
|
|
- there's 5ms grace period per repaint to avoid overloading the system with just compositing
|
|
and not letting the system do anything else - check and evaluate
|
|
|
|
% support for new window types from the wm spec for compositing
|
|
- this will have to be done in Qt, kdecore and kwin
|
|
|
|
* handle properly stacking order of deleted windows for showing in effects
|
|
|
|
* handle properly deleted windows that reappear (windowReadded() function?)
|
|
|
|
/ consider using an extra class for representing deleted windows
|
|
- cleaning up Client/Unmanaged instances may still leave e.g. timers around if they're overlooked
|
|
- an extra class could copy some interesting data and "replace" the old instance
|
|
|
|
% during screensaving, do no let non-screensaver windows show above screensaver
|
|
- kdesktop_lock watches for such things and raises again, but there's a small gap
|
|
|
|
% nvidia drivers by default use fake refresh rates as a workaround for some X limitations
|
|
- see the DynamicTwinView section in nvidia README
|
|
- this makes KWin repaint at a different rate than it should
|
|
|
|
/ handling of window pixmap for unmapped windows
|
|
- currently it's kept around after a window is unmapped
|
|
* - but it's still discarded on e.g. resize - how to solve this?
|
|
* - perhaps there should be an option not to unmap windows in order to always have live thumbnails
|
|
* - another option could be to unmap but quickly map when a live thumbnail is needed
|
|
|
|
* cursorPos() does not work reliably now (not from e.g. timers, it needs events), so it's disabled
|
|
|
|
* window grouping is not implemented for unmanaged windows (used e.g. by DimInactive)
|
|
|
|
% clean up and sort out shortcuts so that they don't conflict and make sense
|
|
- also make configurable etc.
|
|
|
|
% installed headers currently include config.h files to find out about e.g. OpenGL
|
|
- this needs to be sorted out somehow, installed headers shouldn't do this
|
|
|
|
? hidden previews currently needs input shape extension, otherwise the window can possibly interfere
|
|
- not very likely though, so is this worth bothering at all?
|
|
|
|
+ hidden preview has two modes unimplemented
|
|
|
|
|
|
OpenGL TODO
|
|
=================================
|
|
|
|
/ Check/make it work with other gfx cards
|
|
|
|
% Xgl support
|
|
- should work
|
|
- in SceneGL::Texture::findTarget() there is a hack that makes KWin work with XGL
|
|
without requiring KWin to be built against the libGL version that Compiz is
|
|
built against
|
|
% - that may not be necessary somewhen later
|
|
- interesting observation: normally run glxgears performs somewhat poorly compared
|
|
to normal nvidia mode, changing glxgears to be override-redirect (i.e. no reparenting)
|
|
however makes glxgears to be even faster than without any compositing at all,
|
|
in this case however kwin's redrawing speed drops somewhat
|
|
|
|
% AIGLX support
|
|
- should work
|
|
+ - it needs indirect rendering, should be autodetected and disabled somehow
|
|
% - may require LIBGL_ALWAYS_INDIRECT set with older X.org
|
|
(http://lists.kde.org/?l=kwin&m=116439615124838&w=2)
|
|
(http://lists.freedesktop.org/archives/xorg/2006-December/020323.html)
|
|
|
|
/ GL_ARB_texture_rectangle vs GL_ARB_texture_non_power_of_two
|
|
% - works; bugs in tfp_mode with power_of_two textures
|
|
- ati (others?): power_of_two windows are drawn white unless non-tfp_mode
|
|
is forced in findTextureTarget()
|
|
|
|
+ strict binding
|
|
- there is code to support strict binding as required by AIGLX, but it's disabled, because
|
|
copy_buffer in bindTexture() ensures strict binding as a side-effect
|
|
- since copy_buffer hack should be removed in the future, strict binding will need to be enabled then
|
|
- http://lists.kde.org/?l=kwin&m=116363084129170&w=2
|
|
|
|
% bindTexture() optimize copied areas
|
|
- right now bindTexture() updates every damaged area and resets the window damage
|
|
- it might make things faster to update only areas that need to be repainted
|
|
and keep the rest damaged until needed
|
|
|
|
% clipping optimization
|
|
- like XRender code has paintTransformedScreen(), avoid painting parts that are
|
|
obscured (makes a difference with many windows open)
|
|
- http://lists.kde.org/?l=kwin&m=116585618111882&w=2
|
|
|
|
/ shm mode needs support for more data formats than GL_BGRA
|
|
- http://www.xfree86.org/current/glTexImage2D.3.html
|
|
- this now works for 16bpp, but maybe not 15bpp or less
|
|
- endian issues?
|
|
|
|
% with current nvidia glXCreatePixmap in tfp mode fails with pixmaps 32x32 and smaller
|
|
|
|
/ vertices list (and possibly more things) should not be part of SceneOpenGL::Window
|
|
- otherwise drawWindow() used for thumbnails would use them too
|
|
- they should be probably part of WindowPaintData
|
|
|
|
% __GL_YIELD=NOTHING for NVidia reportedly improves perceived performance
|
|
- it needs to be set somehow (http://lists.kde.org/?l=kwin&m=117794153720348&w=2)
|
|
|
|
|
|
XRender TODO
|
|
==============================
|
|
|
|
+ SceneXrender::Window::performPaint() doesn't use saturation
|
|
+ SceneXrender::Window::performPaint() doesn't use brightness
|
|
|
|
+ SceneXrender::paintTransformedScreen() doesn't handle properly extending of painted area
|
|
in window's pre-paint - see the transformedShape() comment
|
|
|
|
|
|
Effects framework TODO
|
|
==============================
|
|
|
|
* more notification functions for effects are needed
|
|
- currently there are only very few notification functions (windowAdded, windowActivated,...)
|
|
! - window state changes
|
|
? more
|
|
|
|
/ shadows
|
|
+ - right now is only a rectangle, probably needs some shape support
|
|
+ - right now is only a flat black color, probably should be improved
|
|
|
|
/ support for grabbing input
|
|
- during some more complicated effects, input (at least mouse) should be disabled,
|
|
because currently there is no way to do input redirection
|
|
|
|
* PAINT_DISABLED turning off from effects needs some improvement
|
|
- a window may have painting disabled for various reasons and their numbers may increase
|
|
over time
|
|
- so e.g. an effect showing minimized windows cannot simply turn off DISABLED
|
|
for minimized windows, because it may be disabled also for other reasons
|
|
- there should be some utility function that will be called by the effect
|
|
with arguments saying which disabled windows it wants enabled
|
|
|
|
+ EffectWindow should be completely opaque when kept as the only API for effects
|
|
- no inlines, etc.
|
|
|
|
+ API for tabbox for effects should be cleaned up
|
|
|
|
* check Scene::updateTimeDiff() - should the time be 0 or 1?
|
|
|
|
% post calls are probably not necessary by now (http://lists.kde.org/?t=117770818100003&r=1&w=2)
|
|
|
|
% consider using http://lists.kde.org/?l=kwin&m=118094888517415&w=2 for notification functions
|
|
|
|
% API cleanups and making sure it will stay backwards compatible
|
|
? - should we try at all for 4.0? it will be probably still too "unstable" at that point
|
|
|
|
|
|
Effects TODO
|
|
===============================
|
|
|
|
+ adapt the kcontrol module used by Kompmgr
|
|
- in kcmkwin/kwinoptions
|
|
! - uses ~/.xcompmgr, convert to use normal KConfig
|
|
? - I don't think these effects should be plugins or anything like that,
|
|
probably simply write to kwinrc and use the Option class in KWin
|
|
|
|
/ implements all effects Kompmgr could do
|
|
+ - all effects from the Opacity tab should be already doable
|
|
! - not usign ARGB visuals
|
|
- just clear the alpha channel in the alpha clear hack
|
|
- or do it while painting (see also the alpha clear hack todo entry)
|
|
! - the rest - should be simple
|
|
/ - shadows
|
|
+ - tab Effects
|
|
+ - fade between changes
|
|
- will need notification about opacity changes
|
|
- not sure if this is doable for other opacity changes then the ones
|
|
initiated by the user or by the application
|
|
|
|
+ minimize/shade effects
|
|
- to replace the ones from KWin core
|
|
/ - minimizing
|
|
- check support for it and the avoid_animation flag
|
|
+ - shading
|
|
- shading will probably need special support
|
|
|
|
/ zoom effect
|
|
- enlarge a portion of the screen
|
|
|
|
+ logout effect
|
|
* - should be triggered by ksmserver somehow
|
|
|
|
+ effects to replace widget effects (the ones in the Effects tab in "kcmshell style")
|
|
+ - needs support for new window types from the current draft of the EWMH WM spec
|
|
+ - needs patching Qt, netwm* classes in kdecore
|
|
|
|
/ showfps effect
|
|
- for debugging, just shows transparent fps in some corner
|
|
- just painting the number in paintScreen() should do, with glPushMatrix() and glLoadIdentity()
|
|
to avoid all transformations
|
|
+ - needs bindPixmapToTexture() or something like that, for displaying the text
|
|
- should also detect kwin being idle - it probably should detect in pre-paint that the only
|
|
damage is its own area and avoid damaging for the next round in post-paint
|
|
|
|
+ debugpaint effect
|
|
- should show what is damaged during each repaint step
|
|
- probably just e.g. paint a red almost transparent area over damaged areas
|
|
- needs special care to avoid causing infinite loops by its own damage (i.e. it damages
|
|
part of screen to clear its own painting, that triggers itself again next repaint)
|
|
|
|
? other effects
|
|
|
|
+ virtual desktop change effects
|
|
+ - ... yes, you guessed it, the cube
|
|
/ - something that presents all virtual desktops as being in grid (as in pager)
|
|
and zooms out of the old one and into the new one
|
|
- or whatever
|
|
|
|
/ present windows
|
|
+ - option to show windows with relative sizes to each other
|
|
|
|
/ scalein
|
|
+ - should scale in from e.g. 80%, not 0%, to just "pop up"
|
|
|
|
+ effect for drawing attention to windows demanding attention
|
|
|
|
* DimInactive flickers when switching between windows (temporarily no window becomes active)
|
|
|
|
+ generic class for shader effects
|
|
|
|
- focus effect (windows waves a little when it gets focus)
|