my swift app for VT gyms gymtracker.jackhannon.net

Add container background to widget views for improved appearance

- Implemented a clear container background for McComas, War Memorial, Bouldering Wall, and Rectangular widgets to enhance visual integration.
- Replaced Divider with a styled Rectangle in SmallWidgetView for a more consistent design across widget components.

+12 -6
+4
GymTrackerWidget/GymTrackerLockscreenWidget.swift
··· 173 var body: some WidgetConfiguration { 174 StaticConfiguration(kind: kind, provider: UnifiedGymTrackerProvider()) { entry in 175 McComasCircularWidgetView(entry: entry) 176 } 177 .configurationDisplayName("McComas") 178 .description("McComas gym occupancy") ··· 187 var body: some WidgetConfiguration { 188 StaticConfiguration(kind: kind, provider: UnifiedGymTrackerProvider()) { entry in 189 WarMemorialCircularWidgetView(entry: entry) 190 } 191 .configurationDisplayName("War Memorial") 192 .description("War Memorial gym occupancy") ··· 201 var body: some WidgetConfiguration { 202 StaticConfiguration(kind: kind, provider: UnifiedGymTrackerProvider()) { entry in 203 BoulderingWallCircularWidgetView(entry: entry) 204 } 205 .configurationDisplayName("Bouldering Wall") 206 .description("Bouldering wall occupancy") ··· 215 var body: some WidgetConfiguration { 216 StaticConfiguration(kind: kind, provider: UnifiedGymTrackerProvider()) { entry in 217 RectangularLockScreenWidgetView(entry: entry) 218 } 219 .configurationDisplayName("VT Gyms") 220 .description("War Memorial, McComas, and Bouldering occupancy")
··· 173 var body: some WidgetConfiguration { 174 StaticConfiguration(kind: kind, provider: UnifiedGymTrackerProvider()) { entry in 175 McComasCircularWidgetView(entry: entry) 176 + .containerBackground(for: .widget) { Color.clear } 177 } 178 .configurationDisplayName("McComas") 179 .description("McComas gym occupancy") ··· 188 var body: some WidgetConfiguration { 189 StaticConfiguration(kind: kind, provider: UnifiedGymTrackerProvider()) { entry in 190 WarMemorialCircularWidgetView(entry: entry) 191 + .containerBackground(for: .widget) { Color.clear } 192 } 193 .configurationDisplayName("War Memorial") 194 .description("War Memorial gym occupancy") ··· 203 var body: some WidgetConfiguration { 204 StaticConfiguration(kind: kind, provider: UnifiedGymTrackerProvider()) { entry in 205 BoulderingWallCircularWidgetView(entry: entry) 206 + .containerBackground(for: .widget) { Color.clear } 207 } 208 .configurationDisplayName("Bouldering Wall") 209 .description("Bouldering wall occupancy") ··· 218 var body: some WidgetConfiguration { 219 StaticConfiguration(kind: kind, provider: UnifiedGymTrackerProvider()) { entry in 220 RectangularLockScreenWidgetView(entry: entry) 221 + .containerBackground(for: .widget) { Color.clear } 222 } 223 .configurationDisplayName("VT Gyms") 224 .description("War Memorial, McComas, and Bouldering occupancy")
+8 -6
GymTrackerWidget/GymTrackerWidget.swift
··· 1 import WidgetKit 2 import SwiftUI 3 4 - // Ensure UnifiedTimelineProvider.swift is part of the same target/module 5 - 6 struct GymTrackerWidgetEntryView: View { 7 var entry: UnifiedGymTrackerEntry 8 @Environment(\.widgetFamily) var widgetFamily ··· 97 widgetRenderingMode: widgetRenderingMode 98 ) 99 100 - Divider() 101 102 OccupancyRowView( 103 title: "McComas", ··· 113 widgetRenderingMode: widgetRenderingMode 114 ) 115 116 - Divider() 117 118 OccupancyRowView( 119 title: "Bouldering Wall", ··· 222 let widgetRenderingMode: WidgetRenderingMode 223 let totalSegments: Int 224 var segmentSpacing: Double = 2.0 225 - let isEmpty: Bool // New parameter to indicate empty state 226 - let showPercentageSymbol: Bool // New parameter to control "%" display 227 228 private var segmentAngle: Double { 229 (360.0 / Double(totalSegments)) - segmentSpacing
··· 1 import WidgetKit 2 import SwiftUI 3 4 struct GymTrackerWidgetEntryView: View { 5 var entry: UnifiedGymTrackerEntry 6 @Environment(\.widgetFamily) var widgetFamily ··· 95 widgetRenderingMode: widgetRenderingMode 96 ) 97 98 + Rectangle() 99 + .fill(Color.primary.opacity(0.2)) 100 + .frame(height: 1) 101 102 OccupancyRowView( 103 title: "McComas", ··· 113 widgetRenderingMode: widgetRenderingMode 114 ) 115 116 + Rectangle() 117 + .fill(Color.primary.opacity(0.2)) 118 + .frame(height: 1) 119 120 OccupancyRowView( 121 title: "Bouldering Wall", ··· 224 let widgetRenderingMode: WidgetRenderingMode 225 let totalSegments: Int 226 var segmentSpacing: Double = 2.0 227 + let isEmpty: Bool 228 + let showPercentageSymbol: Bool 229 230 private var segmentAngle: Double { 231 (360.0 / Double(totalSegments)) - segmentSpacing