@@ -23,8 +23,8 @@ use ui_texture_slice_pipeline::UiTextureSlicerPlugin;
23
23
24
24
use crate :: graph:: { NodeUi , SubGraphUi } ;
25
25
use crate :: {
26
- BackgroundColor , BorderColor , BorderRadius , CalculatedClip , ContentSize , DefaultUiCamera , Node ,
27
- Outline , Style , TargetCamera , UiImage , UiScale , Val ,
26
+ BackgroundColor , BorderColor , CalculatedClip , ContentSize , DefaultUiCamera , Node , Outline ,
27
+ Style , TargetCamera , UiImage , UiScale , Val ,
28
28
} ;
29
29
30
30
use bevy_app:: prelude:: * ;
@@ -201,7 +201,6 @@ pub fn extract_uinode_background_colors(
201
201
Option < & CalculatedClip > ,
202
202
Option < & TargetCamera > ,
203
203
& BackgroundColor ,
204
- Option < & BorderRadius > ,
205
204
& Style ,
206
205
Option < & Parent > ,
207
206
) > ,
@@ -216,7 +215,6 @@ pub fn extract_uinode_background_colors(
216
215
clip,
217
216
camera,
218
217
background_color,
219
- border_radius,
220
218
style,
221
219
parent,
222
220
) in & uinode_query
@@ -257,16 +255,13 @@ pub fn extract_uinode_background_colors(
257
255
258
256
let border = [ left, top, right, bottom] ;
259
257
260
- let border_radius = if let Some ( border_radius) = border_radius {
261
- resolve_border_radius (
262
- border_radius,
263
- uinode. size ( ) ,
264
- ui_logical_viewport_size,
265
- ui_scale. 0 ,
266
- )
267
- } else {
268
- [ 0. ; 4 ]
269
- } ;
258
+ let border_radius = [
259
+ uinode. border_radius . top_left ,
260
+ uinode. border_radius . top_right ,
261
+ uinode. border_radius . bottom_right ,
262
+ uinode. border_radius . bottom_left ,
263
+ ]
264
+ . map ( |r| r * ui_scale. 0 ) ;
270
265
271
266
extracted_uinodes. uinodes . insert (
272
267
entity,
@@ -310,7 +305,6 @@ pub fn extract_uinode_images(
310
305
Option < & TargetCamera > ,
311
306
& UiImage ,
312
307
Option < & TextureAtlas > ,
313
- Option < & BorderRadius > ,
314
308
Option < & Parent > ,
315
309
& Style ,
316
310
) ,
@@ -319,18 +313,8 @@ pub fn extract_uinode_images(
319
313
> ,
320
314
node_query : Extract < Query < & Node > > ,
321
315
) {
322
- for (
323
- uinode,
324
- transform,
325
- view_visibility,
326
- clip,
327
- camera,
328
- image,
329
- atlas,
330
- border_radius,
331
- parent,
332
- style,
333
- ) in & uinode_query
316
+ for ( uinode, transform, view_visibility, clip, camera, image, atlas, parent, style) in
317
+ & uinode_query
334
318
{
335
319
let Some ( camera_entity) = camera. map ( TargetCamera :: entity) . or ( default_ui_camera. get ( ) )
336
320
else {
@@ -391,16 +375,13 @@ pub fn extract_uinode_images(
391
375
392
376
let border = [ left, top, right, bottom] ;
393
377
394
- let border_radius = if let Some ( border_radius) = border_radius {
395
- resolve_border_radius (
396
- border_radius,
397
- uinode. size ( ) ,
398
- ui_logical_viewport_size,
399
- ui_scale. 0 ,
400
- )
401
- } else {
402
- [ 0. ; 4 ]
403
- } ;
378
+ let border_radius = [
379
+ uinode. border_radius . top_left ,
380
+ uinode. border_radius . top_right ,
381
+ uinode. border_radius . bottom_right ,
382
+ uinode. border_radius . bottom_left ,
383
+ ]
384
+ . map ( |r| r * ui_scale. 0 ) ;
404
385
405
386
extracted_uinodes. uinodes . insert (
406
387
commands. spawn_empty ( ) . id ( ) ,
@@ -435,33 +416,6 @@ pub(crate) fn resolve_border_thickness(value: Val, parent_width: f32, viewport_s
435
416
}
436
417
}
437
418
438
- pub ( crate ) fn resolve_border_radius (
439
- & values: & BorderRadius ,
440
- node_size : Vec2 ,
441
- viewport_size : Vec2 ,
442
- ui_scale : f32 ,
443
- ) -> [ f32 ; 4 ] {
444
- let max_radius = 0.5 * node_size. min_element ( ) * ui_scale;
445
- [
446
- values. top_left ,
447
- values. top_right ,
448
- values. bottom_right ,
449
- values. bottom_left ,
450
- ]
451
- . map ( |value| {
452
- match value {
453
- Val :: Auto => 0. ,
454
- Val :: Px ( px) => ui_scale * px,
455
- Val :: Percent ( percent) => node_size. min_element ( ) * percent / 100. ,
456
- Val :: Vw ( percent) => viewport_size. x * percent / 100. ,
457
- Val :: Vh ( percent) => viewport_size. y * percent / 100. ,
458
- Val :: VMin ( percent) => viewport_size. min_element ( ) * percent / 100. ,
459
- Val :: VMax ( percent) => viewport_size. max_element ( ) * percent / 100. ,
460
- }
461
- . clamp ( 0. , max_radius)
462
- } )
463
- }
464
-
465
419
#[ inline]
466
420
fn clamp_corner ( r : f32 , size : Vec2 , offset : Vec2 ) -> f32 {
467
421
let s = 0.5 * size + offset;
@@ -501,7 +455,6 @@ pub fn extract_uinode_borders(
501
455
Option < & Parent > ,
502
456
& Style ,
503
457
& BorderColor ,
504
- & BorderRadius ,
505
458
) ,
506
459
Without < ContentSize > ,
507
460
> ,
@@ -510,17 +463,8 @@ pub fn extract_uinode_borders(
510
463
) {
511
464
let image = AssetId :: < Image > :: default ( ) ;
512
465
513
- for (
514
- node,
515
- global_transform,
516
- view_visibility,
517
- clip,
518
- camera,
519
- parent,
520
- style,
521
- border_color,
522
- border_radius,
523
- ) in & uinode_query
466
+ for ( uinode, global_transform, view_visibility, clip, camera, parent, style, border_color) in
467
+ & uinode_query
524
468
{
525
469
let Some ( camera_entity) = camera. map ( TargetCamera :: entity) . or ( default_ui_camera. get ( ) )
526
470
else {
@@ -530,8 +474,8 @@ pub fn extract_uinode_borders(
530
474
// Skip invisible borders
531
475
if !view_visibility. get ( )
532
476
|| border_color. 0 . is_fully_transparent ( )
533
- || node . size ( ) . x <= 0.
534
- || node . size ( ) . y <= 0.
477
+ || uinode . size ( ) . x <= 0.
478
+ || uinode . size ( ) . y <= 0.
535
479
{
536
480
continue ;
537
481
}
@@ -567,25 +511,27 @@ pub fn extract_uinode_borders(
567
511
continue ;
568
512
}
569
513
570
- let border_radius = resolve_border_radius (
571
- border_radius,
572
- node. size ( ) ,
573
- ui_logical_viewport_size,
574
- ui_scale. 0 ,
575
- ) ;
514
+ let border_radius = [
515
+ uinode. border_radius . top_left ,
516
+ uinode. border_radius . top_right ,
517
+ uinode. border_radius . bottom_right ,
518
+ uinode. border_radius . bottom_left ,
519
+ ]
520
+ . map ( |r| r * ui_scale. 0 ) ;
521
+
522
+ let border_radius = clamp_radius ( border_radius, uinode. size ( ) , border. into ( ) ) ;
576
523
577
- let border_radius = clamp_radius ( border_radius, node. size ( ) , border. into ( ) ) ;
578
524
let transform = global_transform. compute_matrix ( ) ;
579
525
580
526
extracted_uinodes. uinodes . insert (
581
527
commands. spawn_empty ( ) . id ( ) ,
582
528
ExtractedUiNode {
583
- stack_index : node . stack_index ,
529
+ stack_index : uinode . stack_index ,
584
530
// This translates the uinode's transform to the center of the current border rectangle
585
531
transform,
586
532
color : border_color. 0 . into ( ) ,
587
533
rect : Rect {
588
- max : node . size ( ) ,
534
+ max : uinode . size ( ) ,
589
535
..Default :: default ( )
590
536
} ,
591
537
image,
0 commit comments