Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
3931119
more cleanup
schriftgestalt Oct 31, 2021
a4b1a9a
use system colors
schriftgestalt Oct 31, 2021
9407a1e
use block based image drawing and modernise and more compact drawing
schriftgestalt Oct 31, 2021
9b2fa24
WIP: improve performance
schriftgestalt Nov 1, 2021
c77898d
dont read all values if we are only interested in one
schriftgestalt Oct 31, 2021
b87d396
use condensed font if available
schriftgestalt Oct 31, 2021
a62b4a1
more compact
schriftgestalt Oct 31, 2021
282fab9
fix memory leaks
schriftgestalt Oct 31, 2021
02bd2fe
better image loading API
schriftgestalt Oct 31, 2021
9ee4d82
use small gap for unit
schriftgestalt Oct 31, 2021
f79e2a9
give the text in the about tab a bit padding
schriftgestalt Oct 31, 2021
bed0d77
improve behaviour of the checkboxes in the CPU settings
schriftgestalt Oct 31, 2021
b26a8e7
use dynamic colors (for dark mode)
schriftgestalt Oct 31, 2021
266d8d8
more cleanup
schriftgestalt Oct 31, 2021
6c41d5d
small fixes and cleanup
schriftgestalt Oct 31, 2021
688f925
remove old preferences syncing
schriftgestalt Nov 1, 2021
5eca62f
update loc files
schriftgestalt Nov 1, 2021
d6a6e94
more userdefaults caching
schriftgestalt Nov 1, 2021
05be9da
use lighter font and make it a bit smaller
schriftgestalt Nov 1, 2021
74cdace
that condition was wrong, hope this is what was intended
schriftgestalt Nov 1, 2021
2d3f283
the units are not localised, anway
schriftgestalt Nov 1, 2021
85b7432
performance
schriftgestalt Nov 1, 2021
d075a2d
use menuitem.indentation instead of adding adding a binch of spaces t…
schriftgestalt Nov 1, 2021
c0b9e17
move tallMenuBar into MenuMeterDefaults
schriftgestalt Nov 1, 2021
c7237c1
give thermometer some padding
schriftgestalt Nov 1, 2021
cc2ccff
when using fully decolonized images make it a template image to bette…
schriftgestalt Nov 1, 2021
a1f73c5
use a toolbar for tabview in Gig Sur and later
schriftgestalt Nov 1, 2021
5f78495
small adjustment
schriftgestalt Nov 1, 2021
a972eee
found some more
schriftgestalt Nov 1, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions Common/MenuMeterCPU.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@

// Widths of the various displays
#define kCPUPercentDisplayBorderWidth 2
#define kCPUThermometerDisplayWidth 11.0f
#define kCPUDisplayMultiProcGapWidth 5
#define kCPUThermometerDisplayWidth 9
#define kCPUDisplayMultiProcGapWidth 1
#define kCPULabelOnlyWidth 25

// Menu item indexes
Expand All @@ -48,27 +48,27 @@
///////////////////////////////////////////////////////////////

// Pref dictionary keys
#define kCPUIntervalPref @"CPUInterval"
#define kCPUDisplayModePref @"CPUDisplayMode"
#define kCPUPercentDisplayPref @"CPUPercentDisplayMode"
#define kCPUMaxProcessCountPref @"CPUMaxProcessCount"
#define kCPUGraphLengthPref @"CPUGraphLength"
#define kCPUHorizontalRowsPref @"CPUHorizontalRows"
#define kCPUMenuWidthPref @"CPUMenuWidth"
#define kCPUAvgAllProcsPref @"CPUAverageMultiProcs"
#define kCPUSumAllProcsPercentPref @"CPUSumAllProcsPercent"
extern NSString *kCPUIntervalPref;
extern NSString *kCPUDisplayModePref;
extern NSString *kCPUPercentDisplayPref;
extern NSString *kCPUMaxProcessCountPref;
extern NSString *kCPUGraphLengthPref;
extern NSString *kCPUHorizontalRowsPref;
extern NSString *kCPUMenuWidthPref;
extern NSString *kCPUAvgAllProcsPref;
extern NSString *kCPUSumAllProcsPercentPref;
// Note that "Lower Half" is now reused to show only physical cores
#define kCPUAvgLowerHalfProcsPref @"CPUAverageLowerHalfProcs"
#define kCPUSortByUsagePref @"CPUSortByUsage"
#define kCPUSystemColorPref @"CPUSystemColor"
#define kCPUUserColorPref @"CPUUserColor"
#define kCPUPowerMatePref @"CPUPowerMate"
#define kCPUPowerMateMode @"CPUPowerMateMode"
#define kCPUShowTemperature @"CPUTemperature"
#define kCPUTemperatureColor @"CPUTemperatureColor"
#define kCPUTemperatureSensor @"CPUTemperatureSensor"
#define kCPUTemperatureSensorDefault @"CPUTemperatureSensorDefault"
#define kCPUTemperatureUnit @"CPUTemperatureUnit"
extern NSString *kCPUAvgLowerHalfProcsPref;
extern NSString *kCPUSortByUsagePref;
extern NSString *kCPUSystemColorPref;
extern NSString *kCPUUserColorPref;
extern NSString *kCPUPowerMatePref;
extern NSString *kCPUPowerMateMode;
extern NSString *kCPUShowTemperature;
extern NSString *kCPUTemperatureColor;
extern NSString *kCPUTemperatureSensor;
extern NSString *kCPUTemperatureSensorDefault;
extern NSString *kCPUTemperatureUnit;
#define kCPUTemperatureUnitCelsius 0
#define kCPUTemperatureUnitFahrenheit 1
// Display modes
Expand Down Expand Up @@ -103,9 +103,9 @@ enum {
#define kCPUPowerMateModeDefault kCPUPowerMateGlow

// Timer
#define kCPUUpdateIntervalMin 0.5f
#define kCPUUpdateIntervalMax 10.0f
#define kCPUUpdateIntervalDefault 1.0f
#define kCPUUpdateIntervalMin 0.5
#define kCPUUpdateIntervalMax 10.0
#define kCPUUpdateIntervalDefault 1.0

// Graph display
#define kCPUGraphWidthMin 11
Expand Down Expand Up @@ -142,8 +142,8 @@ enum {

// Colors
// Maraschino
#define kCPUSystemColorDefault [NSColor colorWithDeviceRed:1.0 green:0.0 blue:0.0 alpha:1.0]
#define kCPUSystemColorDefault [NSColor systemRedColor]
// Midnight blue
#define kCPUUserColorDefault [NSColor colorWithDeviceRed:0.0 green:0.0 blue:0.5 alpha:1.0]
#define kCPUUserColorDefault [NSColor systemBlueColor]
// Orange
#define kCPUTemperatureColorDefault [NSColor colorWithDeviceRed:1.0 green:0.647 blue:0.0 alpha:1.0]
#define kCPUTemperatureColorDefault [NSColor systemOrangeColor]
29 changes: 29 additions & 0 deletions Common/MenuMeterCPU.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//
// MenuMeterCPU.m
// MenuMeters
//
// Created by Georg Seifert on 31.10.21.
//

// Pref dictionary keys
NSString *kCPUIntervalPref = @"CPUInterval";
NSString *kCPUDisplayModePref = @"CPUDisplayMode";
NSString *kCPUPercentDisplayPref = @"CPUPercentDisplayMode";
NSString *kCPUMaxProcessCountPref = @"CPUMaxProcessCount";
NSString *kCPUGraphLengthPref = @"CPUGraphLength";
NSString *kCPUHorizontalRowsPref = @"CPUHorizontalRows";
NSString *kCPUMenuWidthPref = @"CPUMenuWidth";
NSString *kCPUAvgAllProcsPref = @"CPUAverageMultiProcs";
NSString *kCPUSumAllProcsPercentPref = @"CPUSumAllProcsPercent";
// Note that "Lower Half" is now reused to show only physical cores
NSString *kCPUAvgLowerHalfProcsPref = @"CPUAverageLowerHalfProcs";
NSString *kCPUSortByUsagePref = @"CPUSortByUsage";
NSString *kCPUSystemColorPref = @"CPUSystemColor";
NSString *kCPUUserColorPref = @"CPUUserColor";
NSString *kCPUPowerMatePref = @"CPUPowerMate";
NSString *kCPUPowerMateMode = @"CPUPowerMateMode";
NSString *kCPUShowTemperature = @"CPUTemperature";
NSString *kCPUTemperatureColor = @"CPUTemperatureColor";
NSString *kCPUTemperatureSensor = @"CPUTemperatureSensor";
NSString *kCPUTemperatureSensorDefault = @"CPUTemperatureSensorDefault";
NSString *kCPUTemperatureUnit = @"CPUTemperatureUnit";
8 changes: 4 additions & 4 deletions Common/MenuMeterDefaults.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,6 @@

+ (MenuMeterDefaults *)sharedMenuMeterDefaults;

// Pref read/write

- (void)syncWithDisk;

// CPU menu prefs

- (double)cpuInterval;
Expand Down Expand Up @@ -252,4 +248,8 @@

- (void)saveNetPreferInterface:(NSString *)interface;

@property (readonly) BOOL tallMenuBar;

@property (assign) float tintPercentage;

@end
147 changes: 98 additions & 49 deletions Common/MenuMeterDefaults.m
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ - (void)saveBoolPref:(NSString *)prefName value:(BOOL)value;

- (NSColor *)loadColorPref:(NSString *)prefName defaultValue:(NSColor *)defaultValue;

- (void)saveColorPref:(NSString *)prefname value:(NSColor *)value;
- (void)saveColorPref:(NSString *)prefName value:(NSColor *)value;

- (NSString *)loadStringPref:(NSString *)prefName defaultValue:(NSString *)defaultValue;

Expand All @@ -76,7 +76,20 @@ - (void)saveStringPref:(NSString *)prefName value:(NSString *)value;
//
///////////////////////////////////////////////////////////////

@implementation MenuMeterDefaults
@implementation MenuMeterDefaults {
int _cpuDisplayMode;
BOOL _cpuAvgAllProcs;
int _cpuGraphLength;
int _cpuPercentDisplay;
BOOL _netThroughput1KBound;
BOOL _netThroughputBits;
BOOL _netThroughputLabel;
int _netDisplayOrientation;
BOOL _tallMenuBar;
}

@synthesize tallMenuBar = _tallMenuBar;

#define kMigratedFromRagingMenaceToYujitach @"migratedFromRagingMenaceToYujitach"

+ (void)movePreferencesIfNecessary {
Expand Down Expand Up @@ -117,36 +130,53 @@ + (MenuMeterDefaults *)sharedMenuMeterDefaults {
return foo;
}

- (id)init {
- (instancetype)init {

// Allow super to init
self = [super init];
if (!self) {
return nil;
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetCaches:) name:NSUserDefaultsDidChangeNotification object:NULL];
[self resetCaches:self];

CGFloat menuBarHeight = [[NSApp mainMenu] menuBarHeight];
if (menuBarHeight > 23) { // on MacBooks with notch. (TODO: or when "Menu bar size" is set to "large" system preferences?)
NSArray *screens = NSScreen.screens;
_tallMenuBar = screens.count == 1; // If there is a screen attached, it has its own (small) menu and I can’t distinguish the two right now.
}

// Send on back
return self;

} // init

- (void)dealloc {

// Save back
[self syncWithDisk];

// Super do its thing
[[NSNotificationCenter defaultCenter] removeObserver:self];

} // dealloc

///////////////////////////////////////////////////////////////
//
// Pref read/write
// Cache
//
///////////////////////////////////////////////////////////////

- (void)syncWithDisk {
} // syncFromDisk
- (void)resetCaches:(id)sender {
_cpuDisplayMode = -1;
_cpuAvgAllProcs = [self loadBoolPref:kCPUAvgAllProcsPref defaultValue:kCPUAvgAllProcsDefault];
_cpuGraphLength = -1;
_cpuPercentDisplay = -1;
_netThroughput1KBound = [self loadBoolPref:kNetThroughput1KBoundPref defaultValue:kNetThroughput1KBoundDefault];
_netThroughputBits = [self loadBoolPref:kNetThroughput1KBoundPref defaultValue:kNetThroughput1KBoundDefault];
_netThroughputLabel = [self loadBoolPref:kNetThroughputLabelPref defaultValue:kNetThroughputLabelDefault];
_netDisplayOrientation = [self loadIntPref:kNetDisplayOrientationPref
lowBound:kNetDisplayOrientTxRx
highBound:kNetDisplayOrientRxTx
defaultValue:kNetDisplayOrientationDefault];

_tintPercentage = [[NSUserDefaults standardUserDefaults] floatForKey:@"tintPercentage"];
}

///////////////////////////////////////////////////////////////
//
Expand All @@ -162,16 +192,24 @@ - (double)cpuInterval {
} // cpuInterval

- (int)cpuDisplayMode {
return [self loadBitFlagPref:kCPUDisplayModePref
validFlags:(kCPUDisplayPercent | kCPUDisplayGraph | kCPUDisplayThermometer | kCPUDisplayHorizontalThermometer)
defaultValue:kCPUDisplayDefault];
if (_cpuDisplayMode > 0) {
return _cpuDisplayMode;
}
_cpuDisplayMode = [self loadBitFlagPref:kCPUDisplayModePref
validFlags:(kCPUDisplayPercent | kCPUDisplayGraph | kCPUDisplayThermometer | kCPUDisplayHorizontalThermometer)
defaultValue:kCPUDisplayDefault];
return _cpuDisplayMode;
} // cpuDisplayMode

- (int)cpuPercentDisplay {
return [self loadIntPref:kCPUPercentDisplayPref
lowBound:kCPUPercentDisplayLarge
highBound:kCPUPercentDisplaySplit
defaultValue:kCPUPercentDisplayDefault];
if (_cpuPercentDisplay >= 0) {
return _cpuPercentDisplay;
}
_cpuPercentDisplay = [self loadIntPref:kCPUPercentDisplayPref
lowBound:kCPUPercentDisplayLarge
highBound:kCPUPercentDisplaySplit
defaultValue:kCPUPercentDisplayDefault];
return _cpuPercentDisplay;
} // cpuPercentDisplay

- (int)cpuMaxProcessCount {
Expand All @@ -182,10 +220,14 @@ - (int)cpuMaxProcessCount {
} // cpuMaxProcessCount

- (int)cpuGraphLength {
return [self loadIntPref:kCPUGraphLengthPref
lowBound:kCPUGraphWidthMin
highBound:kCPUGraphWidthMax
defaultValue:kCPUGraphWidthDefault];
if (_cpuGraphLength > 0) {
return _cpuGraphLength;
}
_cpuGraphLength = [self loadIntPref:kCPUGraphLengthPref
lowBound:kCPUGraphWidthMin
highBound:kCPUGraphWidthMax
defaultValue:kCPUGraphWidthDefault];
return _cpuGraphLength;
} // cpuGraphLength

- (int)cpuHorizontalRows {
Expand All @@ -203,7 +245,7 @@ - (int)cpuMenuWidth {
} // cpuMenuWidth

- (BOOL)cpuAvgAllProcs {
return [self loadBoolPref:kCPUAvgAllProcsPref defaultValue:kCPUAvgAllProcsDefault];
return _cpuAvgAllProcs;
} // cpuAvgAllProcs

- (BOOL)cpuSumAllProcsPercent {
Expand All @@ -230,10 +272,17 @@ - (int)cpuPowerMateMode {
} // cpuPowerMateMode

- (int)cpuTemperatureUnit {
return [self loadIntPref:kCPUTemperatureUnit
lowBound:kCPUTemperatureUnitCelsius
highBound:kCPUTemperatureUnitFahrenheit
defaultValue:kCPUTemperatureUnitCelsius];
static CFStringRef key = CFSTR("AppleTemperatureUnit");
static CFStringRef domain = CFSTR("Apple Global Domain");
CFStringRef unit = CFPreferencesCopyValue(key, domain, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
if (!unit) {
return kCPUTemperatureUnitCelsius;
}
CFComparisonResult result = CFStringCompare(unit, CFSTR("Celsius"), 0);
if (unit) {
CFRelease(unit);
}
return result == kCFCompareEqualTo ? kCPUTemperatureUnitCelsius : kCPUTemperatureUnitFahrenheit;
}

- (NSString *)cpuTemperatureSensor {
Expand Down Expand Up @@ -523,10 +572,7 @@ - (int)netDisplayMode {
} // netDisplayMode

- (int)netDisplayOrientation {
return [self loadIntPref:kNetDisplayOrientationPref
lowBound:kNetDisplayOrientTxRx
highBound:kNetDisplayOrientRxTx
defaultValue:kNetDisplayOrientationDefault];
return _netDisplayOrientation;
} // netDisplayOrientation

- (int)netScaleMode {
Expand All @@ -544,15 +590,15 @@ - (int)netScaleCalc {
} // netScaleCalc

- (BOOL)netThroughputLabel {
return [self loadBoolPref:kNetThroughputLabelPref defaultValue:kNetThroughputLabelDefault];
return _netThroughputLabel;
} // netThroughputLabel

- (BOOL)netThroughput1KBound {
return [self loadBoolPref:kNetThroughput1KBoundPref defaultValue:kNetThroughput1KBoundDefault];
return _netThroughput1KBound;
} // netThroughput1KBound

- (BOOL)netThroughputBits {
return [self loadBoolPref:kNetThroughputBitsPref defaultValue:kNetThroughputBitsDefault];
return _netThroughputBits;
} // netThroughputBits

- (int)netGraphStyle {
Expand Down Expand Up @@ -675,9 +721,11 @@ - (int)loadIntPref:(NSString *)prefName lowBound:(int)lowBound
highBound:(int)highBound
defaultValue:(int)defaultValue {

int returnValue = defaultValue;
if ([[NSUserDefaults standardUserDefaults] objectForKey:prefName]) {
returnValue = (int)[[NSUserDefaults standardUserDefaults] integerForKey:prefName];
Boolean keyExistsAndHasValidFormat = NO;
CFIndex returnValue = CFPreferencesGetAppIntegerValue((__bridge CFStringRef)prefName, kCFPreferencesCurrentApplication, &keyExistsAndHasValidFormat);

if (!keyExistsAndHasValidFormat) {
return defaultValue;
}
if (returnValue > highBound || returnValue < lowBound) {
returnValue = defaultValue;
Expand All @@ -686,17 +734,20 @@ - (int)loadIntPref:(NSString *)prefName lowBound:(int)lowBound

} // _loadIntPref

- (void)saveIntPref:(NSString *)prefname value:(int)value {
[[NSUserDefaults standardUserDefaults] setInteger:value forKey:prefname];
- (void)saveIntPref:(NSString *)prefName value:(int)value {
[[NSUserDefaults standardUserDefaults] setInteger:value forKey:prefName];
} // _saveIntPref

- (int)loadBitFlagPref:(NSString *)prefName validFlags:(int)flags defaultValue:(int)defaultValue {

if ([[NSUserDefaults standardUserDefaults] objectForKey:prefName]) {
int returnValue = (int)[[NSUserDefaults standardUserDefaults] integerForKey:prefName];
if (((returnValue | flags) == flags)) {
return returnValue;
}
Boolean keyExistsAndHasValidFormat = NO;
CFIndex returnValue = CFPreferencesGetAppIntegerValue((__bridge CFStringRef)prefName, kCFPreferencesCurrentApplication, &keyExistsAndHasValidFormat);

if (!keyExistsAndHasValidFormat) {
return defaultValue;
}
if (((returnValue | flags) == flags)) {
return (int)returnValue;
}
return defaultValue;

Expand All @@ -707,11 +758,9 @@ - (void)saveBitFlagPref:(NSString *)prefName value:(int)value {
} // _saveBitFlagPref

- (BOOL)loadBoolPref:(NSString *)prefName defaultValue:(BOOL)defaultValue {

if ([[NSUserDefaults standardUserDefaults] objectForKey:prefName]) {
return [[NSUserDefaults standardUserDefaults] boolForKey:prefName];
}
return defaultValue;
Boolean keyExistsAndHasValidFormat = NO;
Boolean result = CFPreferencesGetAppBooleanValue((__bridge CFStringRef)prefName, kCFPreferencesCurrentApplication, &keyExistsAndHasValidFormat);
return keyExistsAndHasValidFormat ? result : defaultValue;
} // _loadBoolPref

- (void)saveBoolPref:(NSString *)prefName value:(BOOL)value {
Expand Down
Loading