diff --git a/Kit/Widgets/BarChart.swift b/Kit/Widgets/BarChart.swift index 9265bcc7..1a73be38 100644 --- a/Kit/Widgets/BarChart.swift +++ b/Kit/Widgets/BarChart.swift @@ -15,7 +15,7 @@ public class BarChart: WidgetWrapper { private var labelState: Bool = false private var boxState: Bool = true private var frameState: Bool = false - private var colorState: Color = .systemAccent + public var colorState: Color = .systemAccent private var colors: [Color] = Color.allCases private var _value: [[ColorValue]] = [[]] @@ -181,7 +181,6 @@ public class BarChart: WidgetWrapper { case .systemAccent: NSColor.controlAccentColor.set() case .utilization: partitionValue.value.usageColor(zones: colorZones, reversed: self.title == "Battery").set() case .pressure: pressureLevel.pressureColor().set() - case .cluster: (partitionValue.value.clusterColor(i) ?? .controlAccentColor).set() case .monochrome: if self.boxState { (isDarkMode ? NSColor.black : NSColor.white).set() diff --git a/Kit/extensions.swift b/Kit/extensions.swift index 65e074d6..12f3c42d 100644 --- a/Kit/extensions.swift +++ b/Kit/extensions.swift @@ -201,22 +201,6 @@ public extension Double { } } - func clusterColor(_ i: Int) -> NSColor? { - guard let cores = SystemKit.shared.device.info.cpu?.cores, - let core = cores.first(where: {$0.id == i }) else { - return nil - } - - switch core.type { - case .efficiency: - return .systemTeal - case .performance: - return .systemBlue - default: - return nil - } - } - func secondsToHoursMinutesSeconds() -> (Int, Int) { let mins = (self.truncatingRemainder(dividingBy: 3600)) / 60 return (Int(self / 3600), Int(mins)) diff --git a/Kit/types.swift b/Kit/types.swift index 28a15e39..69bb4df2 100644 --- a/Kit/types.swift +++ b/Kit/types.swift @@ -156,7 +156,7 @@ public struct Color: KeyValue_p, Equatable { extension Color: CaseIterable { public static var utilization: Color { return Color(key: "utilization", value: "Based on utilization", additional: NSColor.black) } public static var pressure: Color { return Color(key: "pressure", value: "Based on pressure", additional: NSColor.black) } - public static var cluster: Color { return Color(key: "cluster", value: "Based on cluster", additional: NSColor.black) } + public static var cluster: Color { return Color(key: "cluster", value: "Based on cluster", additional: NSColor.controlAccentColor) } public static var separator1: Color { return Color(key: "separator_1", value: "separator_1", additional: NSColor.black) } diff --git a/Modules/CPU/main.swift b/Modules/CPU/main.swift index c1e3ad76..86544f60 100644 --- a/Modules/CPU/main.swift +++ b/Modules/CPU/main.swift @@ -76,6 +76,23 @@ public class CPU: Module { return color.additional as! NSColor } + private var eCoreColor: NSColor { + let color = Color.teal + let key = Store.shared.string(key: "\(self.config.name)_eCoresColor", defaultValue: color.key) + if let c = Color.fromString(key).additional as? NSColor { + return c + } + return color.additional as! NSColor + } + private var pCoreColor: NSColor { + let color = Color.secondBlue + let key = Store.shared.string(key: "\(self.config.name)_pCoresColor", defaultValue: color.key) + if let c = Color.fromString(key).additional as? NSColor { + return c + } + return color.additional as! NSColor + } + public init() { self.settingsView = Settings("CPU") self.popupView = Popup("CPU") @@ -187,18 +204,32 @@ public class CPU: Module { case let widget as LineChart: widget.setValue(value.totalUsage) case let widget as BarChart: var val: [[ColorValue]] = [[ColorValue(value.totalUsage)]] + let cores = SystemKit.shared.device.info.cpu?.cores ?? [] + if self.usagePerCoreState { - val = value.usagePerCore.map({ [ColorValue($0)] }) + if widget.colorState == .cluster { + val = [] + for (i, v) in value.usagePerCore.enumerated() { + let core = cores.first(where: {$0.id == i }) + val.append([ColorValue(v, color: core?.type == .efficiency ? self.eCoreColor : self.pCoreColor)]) + } + } else { + val = value.usagePerCore.map({ [ColorValue($0)] }) + } } else if self.splitValueState { val = [[ ColorValue(value.systemLoad, color: self.systemColor), ColorValue(value.userLoad, color: self.userColor) ]] } else if self.groupByClustersState, let e = value.usageECores, let p = value.usagePCores { - val = [ - [ColorValue(e, color: NSColor.systemTeal)], - [ColorValue(p, color: NSColor.systemBlue)] - ] + if widget.colorState == .cluster { + val = [ + [ColorValue(e, color: self.eCoreColor)], + [ColorValue(p, color: self.pCoreColor)] + ] + } else { + val = [[ColorValue(e)], [ColorValue(p)]] + } } widget.setValue(val) case let widget as PieChart: