1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 12:48:10 +00:00
serenity/Userland/Services/WindowServer
Tom 220886db4c WindowServer: Fix compositor overdraw issues related to transparency
We were re-rendering areas that were considered transparency areas even
though they weren't transparency areas or were occluded by opaque
areas.

In order to fix this, we need to be a bit smarter about what is above
and below any given window. Even though a window may have transparent
areas, if those are occluded by opaque window areas on top they are
not actually any areas that should be rendered at all. And the opposite
also applies, opaque window areas for windows below that are occluded
by transparent areas, do need to be rendered as transparency. This
solves the problem of unnecessary transparency areas.

The other problem is that we need to know what areas of a window's
dirty rectangles affect other windows, and where. Basically any
opaque area that is somehow below a transparent area that isn't
otherwise occluded, and any transparent area above any other window
area (transparent or opaque) needs to be marked dirty prior to
composing. This makes sure that all affected windows render these
areas in the correct order. To track these, we now have a map of
affected windows and the rectangles that are affected (because not all
of that window's transparency areas may be affected).
2021-07-18 18:39:20 +02:00
..
Animation.cpp WindowServer: Fix animations not triggering rendering 2021-06-29 10:03:53 +02:00
Animation.h WindowServer: Change animation time to duration 2021-06-28 22:29:39 +02:00
AppletManager.cpp Taskbar+LibGUI+WindowServer: Shrink taskbar by one pixel 2021-05-09 00:11:37 +02:00
AppletManager.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Button.cpp WindowServer: Load multiple scaled versions of Bitmaps and Cursors 2021-06-20 14:57:26 +02:00
Button.h WindowServer: Load multiple scaled versions of Bitmaps and Cursors 2021-06-20 14:57:26 +02:00
ClientConnection.cpp WindowServer: Let clients mark windows as stealable by specific clients 2021-07-18 17:21:28 +02:00
ClientConnection.h WindowServer: Let clients mark windows as stealable by specific clients 2021-07-18 17:21:28 +02:00
CMakeLists.txt WindowServer: Add a more generic mechanism for animations 2021-06-27 19:38:11 +02:00
Compositor.cpp WindowServer: Fix compositor overdraw issues related to transparency 2021-07-18 18:39:20 +02:00
Compositor.h Everywhere: Forward declare structs as structs 2021-07-08 10:11:00 +02:00
Cursor.cpp AK+Everywhere: Remove StringView::find_{first,last}_of(char) methods 2021-07-02 21:54:21 +02:00
Cursor.h WindowServer: Fix animated cursor regression 2021-06-21 16:52:29 +02:00
Event.h WindowServer: Preserve all members in MouseEvent::translated() 2021-06-18 17:40:05 +02:00
EventLoop.cpp WindowServer: Add initial support for rendering on multiple screens 2021-06-20 14:57:26 +02:00
EventLoop.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
HitTestResult.h WindowServer: Make hit test results richer 2021-06-18 17:40:05 +02:00
main.cpp WindowServer: Try to auto-add unconfigured framebuffer devices 2021-06-27 09:46:27 +02:00
Menu.cpp Everywhere: Remove unused local variables and lambda captures 2021-07-08 10:11:00 +02:00
Menu.h WindowServer: Fix menu location on screens other than main screen 2021-06-28 17:02:37 +02:00
Menubar.cpp Everywhere: Replace Vector<T*> with nonnull entries with Vector<T&> 2021-06-08 19:14:24 +02:00
Menubar.h Everywhere: Replace Vector<T*> with nonnull entries with Vector<T&> 2021-06-08 19:14:24 +02:00
MenuItem.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
MenuItem.h WindowServer: Fix a handful of clang-tidy warnings in the menu code 2021-05-09 15:47:21 +02:00
MenuManager.cpp WindowServer: Fix menu location on screens other than main screen 2021-06-28 17:02:37 +02:00
MenuManager.h Everywhere: Replace Vector<T*> with nonnull entries with Vector<T&> 2021-06-08 19:14:24 +02:00
MultiScaleBitmaps.cpp WindowServer: Add an Overlay class for flicker-free overlay rendering 2021-06-25 20:38:13 +02:00
MultiScaleBitmaps.h WindowServer: Add an Overlay class for flicker-free overlay rendering 2021-06-25 20:38:13 +02:00
Overlays.cpp WindowServer: Add basic virtual desktop support 2021-07-03 12:27:23 +02:00
Overlays.h WindowServer: Add basic virtual desktop support 2021-07-03 12:27:23 +02:00
Screen.cpp WindowServer: Don't use GNU-style designator 2021-07-14 13:12:25 +02:00
Screen.h WindowServer: Flush display buffer when flashing 2021-07-10 21:24:52 +02:00
ScreenLayout.cpp WindowServer: Add API to set/get screen layouts 2021-06-20 14:57:26 +02:00
ScreenLayout.h IPCCompiler+WindowServer: Fix deleted function warning 2021-07-08 10:11:00 +02:00
ScreenLayout.ipp WindowServer: Don't use old GNU-style designator 2021-07-08 10:11:00 +02:00
Window.cpp WindowServer: Fix compositor overdraw issues related to transparency 2021-07-18 18:39:20 +02:00
Window.h WindowServer: Fix compositor overdraw issues related to transparency 2021-07-18 18:39:20 +02:00
WindowClient.ipc LibGUI+WindowServer: Expose WindowServer client id to the client 2021-07-18 17:21:28 +02:00
WindowFrame.cpp WindowServer: Allow partial repaints in window frame & menubars 2021-07-08 01:17:06 +02:00
WindowFrame.h WindowServer: Add WindowFrame::invalidate_menubar() and use it 2021-07-07 21:06:15 +02:00
WindowManager.cpp WindowServer: Allow windows to be pinnable (always on top) 2021-07-07 15:38:59 +02:00
WindowManager.h WindowServer: Allow windows to be pinnable (always on top) 2021-07-07 15:38:59 +02:00
WindowManagerClient.ipc WindowServer: Add API to change virtual desktop settings 2021-07-03 12:27:23 +02:00
WindowManagerServer.ipc WindowServer: Add show desktop toggle IPC call 2021-07-04 13:58:56 +02:00
WindowServer.ipc WindowServer: Let clients mark windows as stealable by specific clients 2021-07-18 17:21:28 +02:00
WindowStack.cpp WindowServer: Allow windows to be pinnable (always on top) 2021-07-07 15:38:59 +02:00
WindowStack.h WindowServer: Add missing minimize check to highlighted window callback 2021-07-08 22:31:21 +02:00
WindowSwitcher.cpp WindowServer: Remove rect behind window icon in WindowSwitcher 2021-07-08 20:15:23 +02:00
WindowSwitcher.h WindowServer: Show window's desktop in window switcher if needed 2021-07-03 12:27:23 +02:00
WindowType.h WindowServer: Add sanity checks to create_window IPC 2021-06-03 08:27:57 +02:00
WMClientConnection.cpp WindowServer: Toggling desktop should only toggle current desktop 2021-07-04 20:23:56 +02:00
WMClientConnection.h WindowServer: Add show desktop toggle IPC call 2021-07-04 13:58:56 +02:00