docs: add safety note
This commit is contained in:
parent
5a84b56025
commit
26c17d5cf9
1 changed files with 12 additions and 0 deletions
12
src/main.rs
12
src/main.rs
|
|
@ -189,6 +189,18 @@ impl State {
|
||||||
widget::image::allocate(widget::image::Handle::from_rgba(
|
widget::image::allocate(widget::image::Handle::from_rgba(
|
||||||
image.width(),
|
image.width(),
|
||||||
image.height(),
|
image.height(),
|
||||||
|
// SAFETY: this is a sort of race condition;
|
||||||
|
// will cause panics with large enough images,
|
||||||
|
// when they are edited consecutively.
|
||||||
|
//
|
||||||
|
// this can be reproduced by holding down 'i' with a 10k by 10k px image,
|
||||||
|
// which will invert the colors rapidly and eventually crash the app.
|
||||||
|
//
|
||||||
|
// however, that is not such a problem in this case,
|
||||||
|
// and I don't know a different way of doing this that doesn't copy
|
||||||
|
// (performance loss, which is can be pretty big)
|
||||||
|
// or likely cause flickering instead in such cases
|
||||||
|
// (like using Handle over Allocation to immediately drop the last one)
|
||||||
unsafe { std::mem::transmute::<&[u8], &'static [u8]>(image.as_bytes()) },
|
unsafe { std::mem::transmute::<&[u8], &'static [u8]>(image.as_bytes()) },
|
||||||
))
|
))
|
||||||
.map(Message::ImageDisplayReady)
|
.map(Message::ImageDisplayReady)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue