@@ -449,6 +449,15 @@ public final class WinUIBackend: AppBackend {
449
449
// The default minimum picker height is 32 pixels
450
450
max ( Int ( labelSize. height) + 12 , 32 )
451
451
)
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 )
452
461
}
453
462
454
463
let oldWidth = widget. width
@@ -1117,6 +1126,32 @@ public final class WinUIBackend: AppBackend {
1117
1126
tapGestureTarget. height = tapGestureTarget. child!. height
1118
1127
}
1119
1128
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
+
1120
1155
// public func createTable(rows: Int, columns: Int) -> Widget {
1121
1156
// let grid = Grid()
1122
1157
// grid.columnSpacing = 10
0 commit comments