Commit graph

120 commits

Author SHA1 Message Date
Ian Douglas Scott
7a687105e3 Update windows-sys and image 2023-04-06 08:37:57 -07:00
Ian Douglas Scott
a09e4cf679
Owned pixel buffer for no-copy presentation
This is based on the API that will be used for no-copy presentation. But
wraps it in `set_buffer`.

This also fixes the Wayland buffer code to set `self.width` and
`self.height` on resize, and set the length of the shared memory file
when the buffer is created.

Co-authored-by: jtnunley <jtnunley01@gmail.com>
2023-04-06 10:30:59 +03:00
John Nunley
e5d546ff9e
Update README.md to have a checkmark next to libxcb support (#84) 2023-04-05 11:41:37 -07:00
John Nunley
77f9f68f45
Bump MSRV to 1.64 (#81)
raw-window-handle bumped MSRV, so should we
2023-03-17 19:56:10 -07:00
Ian Douglas Scott
1381217fe5
Merge pull request #72 from rust-windowing/run-wasm
Add `run-wasm` workspace member, as used in `winit`
2023-02-23 10:58:57 -08:00
Ian Douglas Scott
3b9976685c Add run-wasm workspace member, as used in winit
This makes it easy to run examples with the web backend, in the same way
that winit examples are run.
2023-02-23 08:49:36 -08:00
Jeremy Soller
83c0f92dc5
Merge pull request #71 from rust-windowing/dependencies
Update dependencies
2023-02-21 09:44:20 -07:00
Ian Douglas Scott
dce6cbc111 Update windows-sys dependency, and winit dev dependency
Using the latest `winit` version in examples fixes resizing behavior on
Wayland, so the workaround for that in the `winit` example is also
removed here.
2023-02-20 10:22:34 -08:00
David Johnson
fec8decc43
Merge pull request #70 from AngelOnFira/patch-1
Fix changelog link
2023-01-26 16:19:42 -06:00
Forest Anderson
f98b8c4e25
Fix changelog link 2023-01-26 17:15:14 -05:00
Jeremy Soller
31c06ac394
Merge pull request #69 from pop-os/buffer-resize
fix: update width and height when resizing buffer
2023-01-23 06:39:18 -07:00
Ashley Wulber
0bdbf1a752
fix: update width and height when resizing buffer 2023-01-22 22:23:44 -05:00
Mads Marquart
787958b2a6
Merge pull request #68 from slint-ui/simon/macos-scale-on-setbuffer
mac: Fix layer scale not being updated when contents is updated and window is on a new screen
2023-01-15 18:12:03 +01:00
Simon Hausmann
7ca503cafe add ChangeLog entry for the contents scale update change 2023-01-15 17:35:52 +01:00
Simon Hausmann
4c6631c764 mac: retain the NSWindow to ensure that the call to retrieving the backing scale factor in set_buffer works 2023-01-15 17:04:57 +01:00
Simon Hausmann
2832a6e42b mac: Fix layer scale not being updated when contents is updated and window is on a new screen
cc #67
2023-01-15 09:12:28 +01:00
John Nunley
33a4c3741b
m: Cache document in web frontend (#66) 2023-01-14 05:48:44 +00:00
Ian Douglas Scott
125ad070c2
Merge pull request #64 from rust-windowing/display-window-split
Split display/window wrappers
2023-01-10 16:05:46 -08:00
Ian Douglas Scott
129069996e Split GraphicsContext into Context and Surface
A `Context` is created with a display handle, and a `Surface` is created
with a `&Context` and a window handle. Thus multiple windows can be
created from the same context without duplicating anything that can be
shared. This API is broadly similar to `wgpu` or `glutin`.

On Wayland, the `Context` contains the `EventQueue`, which is shared
between windows, and the `WlShm` global. On X11, `Context::new` checks
for the availability of XShm, and contains a bool representing that as
well as the `XCBConnection`. The shared context data is stored within
the window in an `Arc`.

On other platforms, the display isn't used and `Context` is empty. This
does however test that the display handle has the right type on those
platforms and fail otherwise. Previously the code didn't test that.

Closes https://github.com/rust-windowing/softbuffer/issues/37.
2023-01-06 21:36:53 -08:00
Jeremy Soller
3b33bbb0f5
Merge pull request #63 from rust-windowing/0.2.0
0.2.0
2023-01-06 09:20:43 -07:00
Jeremy Soller
02da341d51
0.2.0 2023-01-06 09:07:11 -07:00
Jeremy Soller
c0142e9faf
Merge pull request #59 from thedjinn/disable-calayer-actions
Disable CALayer fade action when setting buffers
2023-01-06 09:06:51 -07:00
Jeremy Soller
ee3e6e8870
Merge pull request #62 from rust-windowing/seal-shrink
wayland: Seal memfd to prevent shrinking
2023-01-06 09:01:55 -07:00
Ian Douglas Scott
165a15e92c wayland: Seal memfd to prevent shrinking
I believe this should be possible wherever `memfd_create` is available.

Sealing isn't required, but Wayland doesn't allow a client to shrink an
shm pool, so there's no reason we should shrink the file. And if we mmap
the file, this prevents a `SIGBUS` if the compositor (incorrectly)
shrunk it.

So we might as well do this.
2023-01-06 07:52:59 -08:00
Jeremy Soller
2cdbb48b8c
Merge pull request #61 from rust-windowing/notgull/changelog
chore: Create changelog for past few weeks of changes
2023-01-06 08:51:11 -07:00
jtnunley
32fc52ab9b Create changelog 2023-01-06 07:48:29 -08:00
John Nunley
a6042f664d
x11: Implement image transfer using the MIT-SHM extension (#46)
* Implement shared memory transfer for X11

* Change to x11rb

* Fix leak + review from psychon

* Add waits to prevent illegal writes to SHM

* @ids1024 code review
2023-01-05 19:27:54 -08:00
John Nunley
0f1effe958
chore: Alphabetize dependencies (#58) 2023-01-05 22:37:30 +00:00
Emil Loer
b72055d122
Disable CALayer fade action when setting buffers
This commit fixes a bug in the Core Graphics backend that causes a new
buffer not be shown immediately but instead use a quarter second fade
transition. This happens because the CALayer has a default action
associated with a change in the layer contents.

The problem was mitigated by wrapping the contents change in a
transaction and disabling all actions for the duration of this
transaction.
2023-01-05 22:17:10 +01:00
Emil Loer
a78becd316
Add rectangle toggle example
This commit adds a new example that shows a XOR pattern. A rectangle can
be superimposed on the background by pressing the space bar.

This example was created to demonstrate a bug in the Core Graphics
backend that causes the buffer to fade when calling set_buffer, instead
of applying it immediately.
2023-01-05 22:16:24 +01:00
Jeremy Soller
13853fe967
Merge pull request #54 from ids1024/bsd
Add support and CI tests for BSDs
2023-01-04 07:04:37 -07:00
Jeremy Soller
c374c9ebcb
Merge pull request #55 from ids1024/wayland-buffer
wayland: Block dispatching if back buffer isn't released
2023-01-04 07:01:37 -07:00
Ian Douglas Scott
a90c7bca04 Use cfg_aliases crate to make Wayland/X #[cfg(..)] less redundant 2023-01-03 12:45:18 -08:00
Ian Douglas Scott
4f6542ceaa Add support and CI tests for BSDs
This adds a fallback using `shm_open`/`shm_unlink` for platforms where
`memfd_create` doesn't exist. This seems to be how this is normally
handled, though it's a bit ugly.

This also builds the wayland/x11 code for NetBSD/OpenBSD/DragonFlyBSD.

Add CI builds for FreeBSD and NetBSD. We would need some kind of
virtualisation though to actually run tests on such targets.

I've tested the `shm_open` logic on Linux, but haven't run it on any
BSDs.
2023-01-03 12:45:15 -08:00
David Johnson
afe6da235b
Merge pull request #56 from i509VCB/doc-wayland-set-buffer
detail platform specific behavior of set_buffer on Wayland
2023-01-03 00:11:02 -06:00
i509VCB
4aac1d2860
detail platform specific behavior of set_buffer on Wayland 2023-01-01 13:52:47 -06:00
Ian Douglas Scott
aad40343bc wayland: Block dispatching if back buffer isn't released
https://github.com/rust-windowing/softbuffer/issues/41

If `set_buffer` can just be called in a loop without waiting for buffers
to be released or a frame callback, but can also be called in other
ways, I don't know if there's a better solution than blocking.

Should fix https://github.com/rust-windowing/softbuffer/issues/48. The
animation example could probably be implemented better, but this is at
least better.

I guess it should be documented that `set_buffer` may block? I don't
know how this compares to other backends.
2022-12-27 15:42:28 -08:00
Ian Douglas Scott
a800ca457d
Merge pull request #53 from ids1024/update
Update to stable wayland-rs 0.30, specify `rust-version`, rename `SwBufError` back to `SoftBufferError`
2022-12-27 13:30:05 -08:00
Ian Douglas Scott
fc1bba64ab Rename SwBufError back to SoftBufferError
This seems to be the last thing left over from the `swbuf` rename.
2022-12-27 12:57:26 -08:00
Ian Douglas Scott
0109b1538a Specify rust-version in Cargo.toml 2022-12-27 12:20:07 -08:00
Ian Douglas Scott
ca3988a2f7 Use stable 0.30 release of wayland-client 2022-12-27 12:18:14 -08:00
John Nunley
3eeafad834
x11: Add XCB support to the X11 backend (#52) 2022-12-27 09:14:54 -08:00
David Johnson
d5bb2c1c78
Merge pull request #51 from rust-windowing/jackpot51/readme-fork-notice
Remove notice about fork
2022-12-23 09:47:29 -06:00
Jeremy Soller
11fdcfacd0
Remove notice about fork 2022-12-23 08:24:26 -07:00
Mads Marquart
f754bdaf37
Merge pull request #47 from rust-windowing/clarify-maintainership
Clarify maintainership
2022-12-23 06:34:06 +01:00
Mads Marquart
3b155497af
Merge pull request #50 from rust-windowing/better-unsafe
Safer `unsafe` usage
2022-12-23 06:33:41 +01:00
Mads Marquart
ff5824b6a5 Avoid a bit of unsafe in Windows backend 2022-12-23 04:20:01 +01:00
Mads Marquart
89bd260fd8 Use #![deny(unsafe_op_in_unsafe_fn)] 2022-12-23 04:19:41 +01:00
Mads Marquart
c9e3652d13 Fix typo 2022-12-23 04:16:55 +01:00
David Johnson
9023b096d7 Updated rest of the code to use softbuffer name instead of swbuf 2022-12-22 18:43:54 -06:00