Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/create-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
args: --current --strip all
env:
OUTPUT: /tmp/release-notes.md
- run: sudo apt-get install libpixman-1-dev libwayland-dev meson scdoc wayland-protocols
- run: sudo apt-get update && sudo apt-get install libpixman-1-dev libwayland-dev meson scdoc wayland-protocols
- name: prepare a tarball
run: |
meson setup --buildtype release build
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- ubuntu-latest
steps:
- uses: actions/checkout@v6
- run: sudo apt-get install libpixman-1-dev libwayland-dev meson scdoc wayland-protocols
- run: sudo apt-get update && sudo apt-get install libpixman-1-dev libwayland-dev meson scdoc wayland-protocols
- run: meson setup --buildtype release build
- run: ninja -C build test
- run: ninja -C build
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.

## Unreleased

### Fixes

- avoid segfault if overlay wasn't created
- add more pixel formats

## 0.0.8 (2025-11-25)

### Fixes
Expand Down
63 changes: 53 additions & 10 deletions capture.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,65 @@ static void screencopy_handle_flags(

static pixman_format_code_t wl2pixman_format(enum wl_shm_format wl_shm_format) {
switch (wl_shm_format) {

case WL_SHM_FORMAT_ABGR1555:
return PIXMAN_a1b5g5r5;
case WL_SHM_FORMAT_ABGR4444:
return PIXMAN_a4b4g4r4;
case WL_SHM_FORMAT_ABGR8888:
return PIXMAN_a8b8g8r8;
case WL_SHM_FORMAT_ABGR2101010:
return PIXMAN_a2b10g10r10;

case WL_SHM_FORMAT_ARGB1555:
return PIXMAN_a1r5g5b5;
case WL_SHM_FORMAT_ARGB4444:
return PIXMAN_a4r4g4b4;
case WL_SHM_FORMAT_ARGB8888:
return PIXMAN_a8r8g8b8;
case WL_SHM_FORMAT_XRGB8888:
return PIXMAN_x8r8g8b8;
case WL_SHM_FORMAT_ARGB2101010:
return PIXMAN_a2r10g10b10;

case WL_SHM_FORMAT_BGR233:
return PIXMAN_b2g3r3;
case WL_SHM_FORMAT_BGR565:
return PIXMAN_b5g6r5;
case WL_SHM_FORMAT_BGR888:
return PIXMAN_b8g8r8;
case WL_SHM_FORMAT_BGRA8888:
return PIXMAN_b8g8r8a8;
case WL_SHM_FORMAT_BGRX8888:
return PIXMAN_b8g8r8x8;

case WL_SHM_FORMAT_RGB332:
return PIXMAN_r3g3b2;
case WL_SHM_FORMAT_RGB565:
return PIXMAN_r5g6b5;
case WL_SHM_FORMAT_RGB888:
return PIXMAN_r8g8b8;
case WL_SHM_FORMAT_RGBA8888:
return PIXMAN_r8g8b8a8;
case WL_SHM_FORMAT_RGBX8888:
return PIXMAN_r8g8b8x8;

case WL_SHM_FORMAT_XBGR1555:
return PIXMAN_x1b5g5r5;
case WL_SHM_FORMAT_XBGR4444:
return PIXMAN_x4b4g4r4;
case WL_SHM_FORMAT_XBGR8888:
return PIXMAN_x8b8g8r8;
case WL_SHM_FORMAT_ABGR8888:
return PIXMAN_a8b8g8r8;
case WL_SHM_FORMAT_XRGB2101010:
return PIXMAN_x2r10g10b10;
case WL_SHM_FORMAT_XBGR2101010:
return PIXMAN_x2b10g10r10;
case WL_SHM_FORMAT_ARGB2101010:
return PIXMAN_a2r10g10b10;
case WL_SHM_FORMAT_ABGR2101010:
return PIXMAN_a2b10g10r10;

case WL_SHM_FORMAT_XRGB1555:
return PIXMAN_x1r5g5b5;
case WL_SHM_FORMAT_XRGB4444:
return PIXMAN_x4r4g4b4;
case WL_SHM_FORMAT_XRGB8888:
return PIXMAN_x8r8g8b8;
case WL_SHM_FORMAT_XRGB2101010:
return PIXMAN_x2r10g10b10;

default:
return 0;
}
Expand Down
16 changes: 13 additions & 3 deletions overlay.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,18 @@ void overlay_show(struct overlay *overlay) {

void overlay_destroy(struct overlay *overlay) {
buffer_destroy(overlay->buffer);
wp_viewport_destroy(overlay->wp_viewport);
wl_surface_destroy(overlay->wl_surface);
zwlr_layer_surface_v1_destroy(overlay->wlr_layer_surface);

if (overlay->wp_viewport) {
wp_viewport_destroy(overlay->wp_viewport);
}

if (overlay->wl_surface) {
wl_surface_destroy(overlay->wl_surface);
}

if (overlay->wlr_layer_surface) {
zwlr_layer_surface_v1_destroy(overlay->wlr_layer_surface);
}

wl_output_release(overlay->wl_output);
}