bevyengine / bevy

A refreshingly simple data-driven game engine built in Rust
https://bevyengine.org
Apache License 2.0
36.46k stars 3.6k forks source link

Remove the measure func for image nodes with the default UI texture #16351

Closed ickshonpe closed 2 weeks ago

ickshonpe commented 2 weeks ago

Objective

ButtonBundle has an ImageNode component (renamed from UiImage) which wasn't a problem in 0.14 but in 0.15 requires pulls in the ContentSize and NodeImageSize which means that by default ButtonBundle nodes are given a measure func based on the size of the image belonging to TRANSPARENT_IMAGE_HANDLE, which is 1x1.

This doesn't make sense and the behaviour for default image nodes should either be to go to zero size or not add a measure func.

Solution

Check if an image has a TRANSPARENT_IMAGE_HANDLE and if it does remove its measure func.

Possibly a zero-sized measure would make more sense, but that would break existing code.

Testing

Used ButtonBundle in the 0.15 button example and the border doesn't render, after this change it does.

JMS55 commented 2 weeks ago

Is this just the fault of required components? I don't love hacking around that :/

ickshonpe commented 2 weeks ago

Is this just the fault of required components? I don't love hacking around that :/

Yeah, it feels really unpleasant. I'm not very happy with any of the image node changes but I've just done whatever was needed to get the new design with required components to work.