Commit Graph

73 Commits

Author SHA1 Message Date
Yuxuan Shui
5a72b5755d backends: add egl backend
This needs the EGL_KHR_image_pixmap and the GL_EXT_EGL_image_storage
extensions, which unfortunately aren't available on NVIDIA cards.

Don't add documentation for these, for now.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-09-29 08:03:12 +01:00
Yuxuan Shui
483aa4347c backend: allocate mask only when necessary
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-08-31 07:00:59 +01:00
Yuxuan Shui
9ac046c2ba backend, win: create shadows with shadow_from_mask
Do this for shaped, and rounded windows.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-08-26 05:43:19 +01:00
Yuxuan Shui
9e8373e3e0 backend: add mask parameter to blur
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-08-25 02:59:01 +01:00
Yuxuan Shui
e4221e0787 backend: don't clip corners when painting shadow
When removing shadow behind a window with rounded corners, keep the
corner part - those parts will be removed using the mask instead.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-08-25 02:51:03 +01:00
Yuxuan Shui
9b419504e8 backend: add the make_mask interface
This is used to create image masks that can be used to mask out
`compose` regions. For example, this can be used to mask out window body
so shadow won't be painted on them.

This could be more efficient than using rectangular regions for masking,
when there are a large number of rectangles; or more flexible, in the
case of window with rounded corners.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-08-24 08:39:21 +01:00
Yuxuan Shui
947077f329 backend: add custom shader image property
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-08-11 04:40:43 +01:00
Yuxuan Shui
01649b68b9 backend: don't trust device_status after a reset
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-02-08 10:31:41 +00:00
Yuxuan Shui
e17eaefb89 backend: handle device reset
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-02-08 10:31:41 +00:00
Yuxuan Shui
e50be3173f backend: remove the read_pixel interface.
Sample the border color in the shader instead.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-01-24 17:34:38 +00:00
Yuxuan Shui
b7df820ff2 backend: add new property: BORDER_WIDTH
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-01-24 17:34:33 +00:00
Yuxuan Shui
ffe1b79881 backend: add new property: BORDER_COLOR
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2022-01-24 17:34:29 +00:00
ktprograms
4dfb979c52 Fix segfaults on 32bit arch with --log-level=debug
There were a few improper uses of %ld for 64 bit numbers, as well as
some other 32 bit related warnings that I've fixed.

Signed-off-by: ktprograms <ktprograms@gmail.com>
2021-11-25 10:52:31 +00:00
Yuxuan Shui
d397b307dd backend: set corner radius property
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2021-10-23 12:53:17 +01:00
Bernd Busse
4b5cc050d5 Add clip-shadow-above configuration and wintype option
Added the new `clip-shadow-above` configuration and wintype option.
These allow the user to select windows to clip from the shadow region of
other windows, i.e. don't paint shadows on top of them.

This should provide a more useful and userfriendly alternative to the
deprecated `shadow-exclude-reg` option — especially for docks and bars.
2021-07-14 14:43:28 +02:00
Yuxuan Shui
73c35c20f3 backend: remove unnecessary clone_image calls
No need to clone image to set_image_property, they are only needed for
image_op.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2021-07-13 22:14:30 +01:00
Yuxuan Shui
d9836a6751 backend: fix NULL dereference when rendering inverted windows
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2021-07-09 19:15:16 +01:00
Yuxuan Shui
f44d6cd7c1 backend: remove a redundant if
set_image_property is a cheap operation.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2021-07-09 19:01:31 +01:00
Yuxuan Shui
2a60836a9b backend: split image_op into image_op and set_image_property
Currently there is some inconsistency in how image_op is implemented
across backends. The glx backend applies some of the image operations
lazily, and not always in the order the operations were made; while the
xrender backend applies the operations eagerly. This can lead to
different render result in some cases.

Instead of trying to preserving the order of operations, which would be
unnecessary, we re-model the API to better reflect the implementation.
We make it clear that setting the property doesn't change the image
data, and properties are only applied during composition and in a
specific order.

This makes sure the render result looks consistent across backends.
Should also improve the performance of the xrender backend, even if only
slightly.

Also distill out the property management code so they can be shared.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2021-06-20 06:49:38 +01:00
Yuxuan Shui
21dfe20794 backend: rename copy -> clone_image
This feels more appropriate as this operation doesn't necessarily copy
data.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2021-06-14 01:58:30 +01:00
Yuxuan Shui
8c1b0657ff Refresh the TODO comments
Removed the outdated ones, clarified some of them, and assigned them to
me.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2020-08-30 15:25:58 +01:00
Yuxuan Shui
da2b824aa6 backend: remove unneeded check for NVIDIA driver
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2020-04-22 20:24:15 +01:00
Bernd Busse
ad8632b017 New backends: smoothly fade blur-texture on fade-in/-out
* Add new field `opacity_target_old` to `struct managed_win` for
tracking relevant `opacity_target` changes.
* Smoothly fade blur-texture opacity on window opacity changes (based on
window opacity), when the window was or will be fully transparent
(`w->opacity ~< 0.004`).
* Fixed alpha-clipping of the blur-texture when using `inactive-opacity` or
repeatedly setting window opacity with large fade intervals (should fix #314).
2020-04-08 23:22:06 +01:00
Yuxuan Shui
a23bac727c new backend: assert blur_opacity is in [0, 1]
Related to: #314 #318

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2020-04-04 15:55:30 +01:00
Yuxuan Shui
0e158c508f new backend: clear background if there is no wallpaper
So windows won't left a trail when you move them, because they are drawn
over previously drawn stuff.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2020-04-02 17:37:52 +01:00
Yuxuan Shui
6a3d1354be backend: allow transparent windows to clip other windows
Transparent windows usually blends on top of other windows, this commit
adds an option to make transparent windows clip other windows like
non-transparent windows do.

Closes #265

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-11-30 21:29:07 +00:00
Yuxuan Shui
7040579a38 backend: clarify comments about reg_paint
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-11-30 21:23:22 +00:00
Yuxuan Shui
b11e11e682 backend: add missing header xcb/sync.h
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-11-10 02:31:55 +00:00
Yuxuan Shui
6c96e1f3c6 backend: add missing header x.h
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-11-10 02:30:56 +00:00
Yuxuan Shui
2c1fdefe3b backend: enable xsync fence for nvidia users
This was already done in the legacy backends, this commit adds the same
thing to the new backends.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-11-09 20:01:38 +00:00
Rytis Karpuska
ec76c5f286 parameterize max brightness limit 2019-11-09 17:56:38 +02:00
Yuxuan Shui
eecee130b8 win: split WIN_FLAGS_IMAGE_STALE
Split it into PIXMAP_STALE and SHADOW_STALE, this allows us to update
pixmaps and shadow images separately.

Also added PIXMAP_NONE and SHADOW_NONE, as redundancy to detect logic
errors.

Convenient constants and functions are provided for updating pixmap and
shadow together.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-09-20 01:25:07 +01:00
Yuxuan Shui
0ba7761bd5 Untangle headers
Thanks, clang -fmodules.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-08-10 00:56:26 +01:00
Yuxuan Shui
4dc5a04735 core: fix background not blurred under transparent windows
When a window has 0 opacity, it's rendering is skipped completely. Thus
its background isn't blurred.

This commit fixes that.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-08-04 23:15:10 +01:00
Yuxuan Shui
8eb9d07fa8 Add dummy backend
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-08-04 17:52:45 +01:00
Yuxuan Shui
d7415fcf2e new backends: blur background before rendering shadow
Otherwise the blurred background will have a darker edge because the
shadow is blended in.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-07-29 21:19:06 +01:00
Yuxuan Shui
a229f34eaa new backend: fix background blur of window with opacity set
Only render blur with transparency when window is fading in/out.
Otherwise, a window with a set opacity will always have a completely
blurred background.

Fixes #198

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-07-26 23:43:28 +01:00
Yuxuan Shui
e3b93a4f84 Additional blur artifact fix
There were still some artifacts left when multiple semi-transparent
windows are stacked on top of each other.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-07-26 18:28:22 +01:00
Yuxuan Shui
06dba4b196 backend: do partial updates
Although the functionality is not implemented by any backends yet.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-07-26 02:05:06 +01:00
Yuxuan Shui
f86d6b7cbd backend: update present interface for partial updates
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-07-26 02:05:00 +01:00
Yuxuan Shui
372f4f816e new backend: ignore window tranparency info from the backend
Doing this forces compton to blur every windows' background.

However, doing this can be beneficial, we will figure out a way
to do this properly in the future.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-07-13 12:44:41 +01:00
Yuxuan Shui
426043baa7 Improve transparency detection for blur
Previously, only the WM windows (window manager usually reparents the
application windows under its own window so it can manage them) are
checked for alpha channels. Some of the window managers (e.g. awesome)
acquire alpha channels for all of the WM windows, whether the underlying
application windows have alpha channel or not.

With this change, the application windows are also checked for alpha
channels. If a WM window has alpha but its child doesn't, only the WM
frame will be considered to be semi-transparent. Thus preventing some
unnecessary blurring.

Closes #191

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-07-13 12:37:28 +01:00
Yuxuan Shui
67f0ec773a new backends: blur interface update
To prepare for different blur methods, the blur interface of backends
has been splitted into two parts.

Now to use blur, a blur context must be created first; then, the blur
method should be called with the blur context created.

Updated the existing backends to the new interface. Also implemented
handling of the new blur options.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-06-09 19:26:41 +01:00
Yuxuan Shui
80c7b2f7ec new backend: glx: implement IMAGE_OP_APPLY_ALPHA
Slight change to the backend_operations::fill interface.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-05-21 20:15:35 +01:00
Yuxuan Shui
939f2fb602 common.h: general clean up
Remove unused functions and definitions. Move some macros into the files
they belong.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-05-21 20:15:34 +01:00
Yuxuan Shui
bd4c242015 win: split struct win
Currently compton handles window creation event by immediately query all
the information it needs and create a window struct with that
information. However, this is prone to race conditions.

In the future, we want to react to window creation event by creating a
placeholder in the window stack, and only query window information in a
critical section where the X server is grabbed by us.

This commit split struct win into two struct, one as placeholder, the
other for holding actual window information.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-05-21 20:15:29 +01:00
Yuxuan Shui
0037b7e5fb Eliminate implicit conversions
Use explicit conversions everywhere. Adding bounds check assertions when
necessary.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-05-21 20:15:25 +01:00
Yuxuan Shui
a93754009c Dump damage region info in trace log
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-05-21 20:15:24 +01:00
Yuxuan Shui
1f80e547bc core: remove unnecessary win_check_fade_finished
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-05-21 20:15:24 +01:00
Yuxuan Shui
f501d35ba9 core: re-run paint_preprocess after redirecting
paint_preprocess calls redir_start if it decides to redirect the screen.
redir_start might change the state of the windows. For example, when the
image of the window fails to bind, redir_start sets the error flag. And
those state changes might exclude the window from being rendered. Thus,
paint_preprocess should be re-run to make sure the new states are
honoured.

Fixes a crash when window images fail to bind after redirecting.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2019-05-21 20:15:23 +01:00