@@ -449,6 +449,15 @@ public final class WinUIBackend: AppBackend {
449449 // The default minimum picker height is 32 pixels
450450 max ( Int ( labelSize. height) + 12 , 32 )
451451 )
452+ } else if let spinner = widget as? ProgressRing {
453+ // ProgressRing appears to kind of grow to fill by default, but
454+ // SwiftCrossUI expects progress spinners to be fixed size, which
455+ // results in WinUI progress rings getting given astronomically
456+ // large fixed dimensions and causing crashes. To work around that,
457+ // we just override their 'natural size' to 32x32, which is based off
458+ // the defaults set in the following code from the WinUI repository:
459+ // https://github.com/marcelwgn/microsoft-ui-xaml/blob/ff21f9b212cea2191b959649e45e52486c8465aa/src/controls/dev/ProgressRing/ProgressRing.xaml#L12
460+ return SIMD2 ( 32 , 32 )
452461 }
453462
454463 let oldWidth = widget. width
@@ -1117,6 +1126,32 @@ public final class WinUIBackend: AppBackend {
11171126 tapGestureTarget. height = tapGestureTarget. child!. height
11181127 }
11191128
1129+ public func createProgressSpinner( ) -> Widget {
1130+ let spinner = ProgressRing ( )
1131+ spinner. isIndeterminate = true
1132+ return spinner
1133+ }
1134+
1135+ public func createProgressBar( ) -> Widget {
1136+ let progressBar = ProgressBar ( )
1137+ progressBar. maximum = 10_000
1138+ return progressBar
1139+ }
1140+
1141+ public func updateProgressBar(
1142+ _ widget: Widget ,
1143+ progressFraction: Double ? ,
1144+ environment: EnvironmentValues
1145+ ) {
1146+ let progressBar = widget as! ProgressBar
1147+ if let progressFraction = progressFraction {
1148+ progressBar. isIndeterminate = false
1149+ progressBar. value = progressBar. maximum * progressFraction
1150+ } else {
1151+ progressBar. isIndeterminate = true
1152+ }
1153+ }
1154+
11201155 // public func createTable(rows: Int, columns: Int) -> Widget {
11211156 // let grid = Grid()
11221157 // grid.columnSpacing = 10
0 commit comments