Skip to content

Commit fa17406

Browse files
authored
Fixed Ui Image slicing (#12047)
# Objective Fixes #11944 ## Solution #11600 made an incorrect assumption on what `UiImageSize` does, removing its usage in slicing fixes the problem
1 parent 9d67edc commit fa17406

File tree

2 files changed

+10
-27
lines changed

2 files changed

+10
-27
lines changed

crates/bevy_sprite/src/sprite.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ pub struct Sprite {
3232
}
3333

3434
/// Controls how the image is altered when scaled.
35+
///
36+
/// Note: This is not yet compatible with texture atlases
3537
#[derive(Component, Debug, Clone, Reflect)]
3638
#[reflect(Component)]
3739
pub enum ImageScaleMode {

crates/bevy_ui/src/texture_slice.rs

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use bevy_sprite::{ImageScaleMode, TextureSlice};
1010
use bevy_transform::prelude::*;
1111
use bevy_utils::HashSet;
1212

13-
use crate::{widget::UiImageSize, BackgroundColor, CalculatedClip, ExtractedUiNode, Node, UiImage};
13+
use crate::{BackgroundColor, CalculatedClip, ExtractedUiNode, Node, UiImage};
1414

1515
/// Component storing texture slices for image nodes entities with a tiled or sliced [`ImageScaleMode`]
1616
///
@@ -119,13 +119,7 @@ pub(crate) fn compute_slices_on_asset_event(
119119
mut commands: Commands,
120120
mut events: EventReader<AssetEvent<Image>>,
121121
images: Res<Assets<Image>>,
122-
ui_nodes: Query<(
123-
Entity,
124-
&ImageScaleMode,
125-
&Node,
126-
Option<&UiImageSize>,
127-
&UiImage,
128-
)>,
122+
ui_nodes: Query<(Entity, &ImageScaleMode, &Node, &UiImage)>,
129123
) {
130124
// We store the asset ids of added/modified image assets
131125
let added_handles: HashSet<_> = events
@@ -139,12 +133,11 @@ pub(crate) fn compute_slices_on_asset_event(
139133
return;
140134
}
141135
// We recompute the sprite slices for sprite entities with a matching asset handle id
142-
for (entity, scale_mode, ui_node, size, image) in &ui_nodes {
136+
for (entity, scale_mode, ui_node, image) in &ui_nodes {
143137
if !added_handles.contains(&image.texture.id()) {
144138
continue;
145139
}
146-
let size = size.map(|s| s.size()).unwrap_or(ui_node.size());
147-
if let Some(slices) = compute_texture_slices(size, scale_mode, image, &images) {
140+
if let Some(slices) = compute_texture_slices(ui_node.size(), scale_mode, image, &images) {
148141
commands.entity(entity).insert(slices);
149142
}
150143
}
@@ -156,24 +149,12 @@ pub(crate) fn compute_slices_on_image_change(
156149
mut commands: Commands,
157150
images: Res<Assets<Image>>,
158151
changed_nodes: Query<
159-
(
160-
Entity,
161-
&ImageScaleMode,
162-
&Node,
163-
Option<&UiImageSize>,
164-
&UiImage,
165-
),
166-
Or<(
167-
Changed<ImageScaleMode>,
168-
Changed<UiImage>,
169-
Changed<UiImageSize>,
170-
Changed<Node>,
171-
)>,
152+
(Entity, &ImageScaleMode, &Node, &UiImage),
153+
Or<(Changed<ImageScaleMode>, Changed<UiImage>, Changed<Node>)>,
172154
>,
173155
) {
174-
for (entity, scale_mode, ui_node, size, image) in &changed_nodes {
175-
let size = size.map(|s| s.size()).unwrap_or(ui_node.size());
176-
if let Some(slices) = compute_texture_slices(size, scale_mode, image, &images) {
156+
for (entity, scale_mode, ui_node, image) in &changed_nodes {
157+
if let Some(slices) = compute_texture_slices(ui_node.size(), scale_mode, image, &images) {
177158
commands.entity(entity).insert(slices);
178159
}
179160
}

0 commit comments

Comments
 (0)