Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Use custom Bluetooth asset in macOS UI

Add a bluetooth SVG asset and Contents.json; replace the SF
Symbol with a template Image in BluetoothListView and
PlayerControlsView. Adjust button layout, add an explicit
transition(.identity) for the picker, and change controls frame to
use minWidth.

+36 -12
macos/Rockbox.xcodeproj/project.xcworkspace/xcuserdata/tsirysandratraina.xcuserdatad/UserInterfaceState.xcuserstate

This is a binary file and will not be displayed.

+16
macos/Rockbox/Assets.xcassets/bluetooth.imageset/Contents.json
··· 1 + { 2 + "images" : [ 3 + { 4 + "filename" : "bluetooth.svg", 5 + "idiom" : "universal" 6 + } 7 + ], 8 + "info" : { 9 + "author" : "xcode", 10 + "version" : 1 11 + }, 12 + "properties" : { 13 + "preserves-vector-representation" : true, 14 + "template-rendering-intent" : "template" 15 + } 16 + }
+1
macos/Rockbox/Assets.xcassets/bluetooth.imageset/bluetooth.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-bluetooth"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M7 8l10 8l-5 4l0 -16l5 4l-10 8" /></svg>
+5 -2
macos/Rockbox/Views/Components/BluetoothListView.swift
··· 76 76 RoundedRectangle(cornerRadius: 6) 77 77 .fill(Color(hex: "1a91ff").opacity(0.12)) 78 78 .frame(width: 30, height: 30) 79 - Image(systemName: "bluetooth") 80 - .font(.system(size: 14)) 79 + Image("bluetooth") 80 + .renderingMode(.template) 81 + .resizable() 82 + .scaledToFit() 83 + .frame(width: 16, height: 16) 81 84 .foregroundStyle(Color(hex: "1a91ff")) 82 85 } 83 86
+14 -10
macos/Rockbox/Views/Components/PlayerControlsView.swift
··· 241 241 // Bluetooth picker button — only shown when bluetooth is available 242 242 if bluetoothState.available { 243 243 Button(action: { showBluetoothPicker.toggle() }) { 244 - Image(systemName: "bluetooth") 245 - .font(.system(size: 14)) 246 - .foregroundStyle(showBluetoothPicker ? Color(hex: "1a91ff") : (isHoveringBluetooth ? .primary : .secondary)) 247 - .frame(width: 32, height: 32) 248 - .background( 249 - RoundedRectangle(cornerRadius: 6) 250 - .fill(isHoveringBluetooth || showBluetoothPicker ? Color.secondary.opacity(0.15) : Color.clear) 251 - ) 252 - .contentShape(Rectangle()) 244 + ZStack { 245 + RoundedRectangle(cornerRadius: 6) 246 + .fill(isHoveringBluetooth || showBluetoothPicker ? Color.secondary.opacity(0.15) : Color.clear) 247 + Image("bluetooth") 248 + .renderingMode(.template) 249 + .resizable() 250 + .scaledToFit() 251 + .frame(width: 16, height: 16) 252 + .foregroundStyle(showBluetoothPicker ? Color(hex: "1a91ff") : (isHoveringBluetooth ? Color.primary : Color.secondary)) 253 + } 254 + .frame(width: 32, height: 32) 255 + .contentShape(Rectangle()) 253 256 } 254 257 .buttonStyle(.plain) 255 258 .onHover { hovering in ··· 261 264 BluetoothListView() 262 265 .environmentObject(bluetoothState) 263 266 } 267 + .transition(.identity) 264 268 } 265 269 266 270 // Device picker button ··· 320 324 } 321 325 } 322 326 } 323 - .frame(width: 80) 327 + .frame(minWidth: 80) 324 328 } 325 329 .padding(.horizontal, 16) 326 330 .padding(.vertical, 10)