Skip to content

Commit 7b842e3

Browse files
authored
UI: rounded border should use camera instead of windows (#12601)
# Objective - #12500 use the primary window resolution to do all its calculation. This means bad support for multiple windows or multiple ui camera ## Solution - Use camera driven UI (#10559)
1 parent bd90a64 commit 7b842e3

File tree

1 file changed

+32
-17
lines changed
  • crates/bevy_ui/src/render

1 file changed

+32
-17
lines changed

crates/bevy_ui/src/render/mod.rs

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use bevy_core_pipeline::{core_2d::Camera2d, core_3d::Camera3d};
99
use bevy_hierarchy::Parent;
1010
use bevy_render::{render_phase::PhaseItem, view::ViewVisibility, ExtractSchedule, Render};
1111
use bevy_sprite::{SpriteAssetEvents, TextureAtlas};
12-
use bevy_window::{PrimaryWindow, Window};
1312
pub use pipeline::*;
1413
pub use render_pass::*;
1514
pub use ui_material_pipeline::*;
@@ -181,7 +180,7 @@ pub struct ExtractedUiNodes {
181180

182181
pub fn extract_uinode_background_colors(
183182
mut extracted_uinodes: ResMut<ExtractedUiNodes>,
184-
windows: Extract<Query<&Window, With<PrimaryWindow>>>,
183+
camera_query: Extract<Query<(Entity, &Camera)>>,
185184
default_ui_camera: Extract<DefaultUiCamera>,
186185
ui_scale: Extract<Res<UiScale>>,
187186
uinode_query: Extract<
@@ -197,12 +196,6 @@ pub fn extract_uinode_background_colors(
197196
)>,
198197
>,
199198
) {
200-
let viewport_size = windows
201-
.get_single()
202-
.map(|window| window.resolution.size())
203-
.unwrap_or(Vec2::ZERO)
204-
* ui_scale.0;
205-
206199
for (
207200
entity,
208201
uinode,
@@ -224,8 +217,22 @@ pub fn extract_uinode_background_colors(
224217
continue;
225218
}
226219

220+
let ui_logical_viewport_size = camera_query
221+
.get(camera_entity)
222+
.ok()
223+
.and_then(|(_, c)| c.logical_viewport_size())
224+
.unwrap_or(Vec2::ZERO)
225+
// The logical window resolution returned by `Window` only takes into account the window scale factor and not `UiScale`,
226+
// so we have to divide by `UiScale` to get the size of the UI viewport.
227+
/ ui_scale.0;
228+
227229
let border_radius = if let Some(border_radius) = border_radius {
228-
resolve_border_radius(border_radius, uinode.size(), viewport_size, ui_scale.0)
230+
resolve_border_radius(
231+
border_radius,
232+
uinode.size(),
233+
ui_logical_viewport_size,
234+
ui_scale.0,
235+
)
229236
} else {
230237
[0.; 4]
231238
};
@@ -257,7 +264,7 @@ pub fn extract_uinode_background_colors(
257264
pub fn extract_uinode_images(
258265
mut commands: Commands,
259266
mut extracted_uinodes: ResMut<ExtractedUiNodes>,
260-
windows: Extract<Query<&Window, With<PrimaryWindow>>>,
267+
camera_query: Extract<Query<(Entity, &Camera)>>,
261268
texture_atlases: Extract<Res<Assets<TextureAtlasLayout>>>,
262269
ui_scale: Extract<Res<UiScale>>,
263270
default_ui_camera: Extract<DefaultUiCamera>,
@@ -275,12 +282,6 @@ pub fn extract_uinode_images(
275282
)>,
276283
>,
277284
) {
278-
let viewport_size = windows
279-
.get_single()
280-
.map(|window| window.resolution.size())
281-
.unwrap_or(Vec2::ZERO)
282-
* ui_scale.0;
283-
284285
for (uinode, transform, view_visibility, clip, camera, image, atlas, slices, border_radius) in
285286
&uinode_query
286287
{
@@ -326,8 +327,22 @@ pub fn extract_uinode_images(
326327
),
327328
};
328329

330+
let ui_logical_viewport_size = camera_query
331+
.get(camera_entity)
332+
.ok()
333+
.and_then(|(_, c)| c.logical_viewport_size())
334+
.unwrap_or(Vec2::ZERO)
335+
// The logical window resolution returned by `Window` only takes into account the window scale factor and not `UiScale`,
336+
// so we have to divide by `UiScale` to get the size of the UI viewport.
337+
/ ui_scale.0;
338+
329339
let border_radius = if let Some(border_radius) = border_radius {
330-
resolve_border_radius(border_radius, uinode.size(), viewport_size, ui_scale.0)
340+
resolve_border_radius(
341+
border_radius,
342+
uinode.size(),
343+
ui_logical_viewport_size,
344+
ui_scale.0,
345+
)
331346
} else {
332347
[0.; 4]
333348
};

0 commit comments

Comments
 (0)