Full ColorSync expert profile compatibility for software adjustments. Needs more testing.

This commit is contained in:
waydabber 2021-08-14 00:43:53 +02:00
parent 2dd284370b
commit 2a816b8da8
16 changed files with 83 additions and 105 deletions

View file

@ -124,8 +124,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
func displayReconfigured() {
self.reconfigureID += 1
os_log("Bumping reconfigureID to %{public}@", type: .info, String(self.reconfigureID))
if self.sleepID == 0 {
self.reconfigureID += 1
let dispatchedReconfigureID = self.reconfigureID
os_log("Display to be reconfigured with reconfigureID %{public}@", type: .info, String(dispatchedReconfigureID))
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
@ -255,6 +256,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
NotificationCenter.default.addObserver(self, selector: #selector(handleFriendlyNameChanged), name: .friendlyName, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handlePreferenceReset), name: .preferenceReset, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(audioDeviceChanged), name: Notification.Name.defaultOutputDeviceChanged, object: nil) // subscribe Audio output detector (SimplyCoreAudio)
NotificationCenter.default.addObserver(self, selector: #selector(colorSyncSettingsChanged), name: NSNotification.Name(rawValue: kColorSyncDisplayDeviceProfilesNotification.takeRetainedValue() as String), object: nil) // ColorSync change
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.sleepNotification), name: NSWorkspace.screensDidSleepNotification, object: nil) // sleep and wake listeners
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.wakeNotofication), name: NSWorkspace.screensDidWakeNotification, object: nil)
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.sleepNotification), name: NSWorkspace.willSleepNotification, object: nil)
@ -284,7 +287,11 @@ class AppDelegate: NSObject, NSApplicationDelegate {
if self.sleepID == dispatchedSleepID {
os_log("Sober from sleep %{public}@", type: .info, String(self.sleepID))
self.sleepID = 0
self.updateDisplays()
if self.reconfigureID != 0 {
let dispatchedReconfigureID = self.reconfigureID
os_log("Display needs reconfig after sober with reconfigureID %{public}@", type: .info, String(dispatchedReconfigureID))
self.updateDisplays(dispatchedReconfigureID: dispatchedReconfigureID)
}
}
}
@ -480,4 +487,9 @@ extension AppDelegate: MediaKeyTapDelegate {
#endif
self.updateMediaKeyTap()
}
@objc private func colorSyncSettingsChanged() {
// We should perform a protected colorsync reset here using CGDisplayRestoreColorSyncSettings(), black bug check and recovery if needed
// Afterwards we should perform a swUpdateDefaultGammaTable() for every display
}
}

View file

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>2156</string>
<string>2240</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>

View file

@ -87,8 +87,7 @@ class DisplayManager {
func restoreSwBrightnessForAllDisplays() {
for externalDisplay in self.getExternalDisplays() {
if externalDisplay.getValue(for: .brightness) == 0 || externalDisplay.isSw() {
// Out of caution we won't let it restore to complete darkness, not to interfere with login, etc. This is how Apple devices work as well.
_ = externalDisplay.setSwBrightness(value: UInt8(max(externalDisplay.getSwBrightnessPrefValue(), 20)))
_ = externalDisplay.setSwBrightness(value: UInt8(externalDisplay.getSwBrightnessPrefValue()))
} else {
_ = externalDisplay.setSwBrightness(value: externalDisplay.getSwMaxBrightness())
}

View file

@ -32,6 +32,12 @@ class Display {
var isVirtual: Bool = false
var defaultGammaTableRed = [CGGammaValue](repeating: 0, count: 256)
var defaultGammaTableGreen = [CGGammaValue](repeating: 0, count: 256)
var defaultGammaTableBlue = [CGGammaValue](repeating: 0, count: 256)
var defaultGammaTableSampleCount: UInt32 = 0
var defaultGammaTablePeak: Float = 1
private let prefs = UserDefaults.standard
internal init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false) {
@ -40,6 +46,7 @@ class Display {
self.vendorNumber = vendorNumber
self.modelNumber = modelNumber
self.isVirtual = isVirtual
self.swUpdateDefaultGammaTable()
}
func stepBrightness(isUp _: Bool, isSmallIncrement _: Bool) {}
@ -69,8 +76,16 @@ class Display {
return self.identifier
}
func swUpdateDefaultGammaTable() {
CGGetDisplayTransferByTable(self.identifier, 256, &self.defaultGammaTableRed, &self.defaultGammaTableGreen, &self.defaultGammaTableBlue, &self.defaultGammaTableSampleCount)
let redPeak = self.defaultGammaTableRed.max() ?? 0
let greenPeak = self.defaultGammaTableGreen.max() ?? 0
let bluePeak = self.defaultGammaTableBlue.max() ?? 0
self.defaultGammaTablePeak = max(redPeak, greenPeak, bluePeak)
}
func swBrightnessTransform(value: Float, reverse: Bool = false) -> Float {
let lowTreshold: Float = 0.05 // We don't allow decrease lower than 5% for safety reasons and because some displays blank off after a while on full screen black
let lowTreshold: Float = 0.05 // We don't allow decrease lower than 5% for safety reasons and because some displays blank off after a while on full black screen due to energy saving settings
if !reverse {
return value * (1 - lowTreshold) + lowTreshold
} else {
@ -78,50 +93,44 @@ class Display {
}
}
func setSwBrightness(value: UInt8, fast: Bool = false) -> Bool {
var redMin: CGGammaValue = 0
var redMax: CGGammaValue = 0
var redGamma: CGGammaValue = 0
var greenMin: CGGammaValue = 0
var greenMax: CGGammaValue = 0
var greenGamma: CGGammaValue = 0
var blueMin: CGGammaValue = 0
var blueMax: CGGammaValue = 0
var blueGamma: CGGammaValue = 0
func setSwBrightness(value: UInt8, fast _: Bool = false) -> Bool {
let brightnessValue: UInt8 = min(getSwMaxBrightness(), value)
var floatValue = Float(Float(brightnessValue) / Float(self.getSwMaxBrightness()))
floatValue = self.swBrightnessTransform(value: floatValue)
os_log("setting software brightness to: %{public}@", type: .debug, String(floatValue))
if CGGetDisplayTransferByFormula(self.identifier, &redMin, &redMax, &redGamma, &greenMin, &greenMax, &greenGamma, &blueMin, &blueMax, &blueGamma) == CGError.success {
if !fast {
DispatchQueue.global(qos: .userInitiated).async {
for value in stride(from: redMax, to: floatValue, by: 0.0025 * (redMax > floatValue ? -1 : 1)) {
CGSetDisplayTransferByFormula(self.identifier, 0, value, redGamma, 0, value, greenGamma, 0, value, blueGamma)
Thread.sleep(forTimeInterval: 0.001)
}
}
} else {
CGSetDisplayTransferByFormula(self.identifier, 0, floatValue, redGamma, 0, floatValue, greenGamma, 0, floatValue, blueGamma)
}
self.saveSwBirghtnessPrefValue(Int(brightnessValue))
return true
}
return false
var currentValue = Float(self.getSwBrightness()) / Float(self.getSwMaxBrightness())
// var currentValue = Float(self.getSwBrightnessPrefValue()) / Float(self.getSwMaxBrightness()) // Better for async version but is not right after display reconfiguration
self.saveSwBirghtnessPrefValue(Int(brightnessValue))
var newValue = Float(Float(brightnessValue)) / Float(self.getSwMaxBrightness())
currentValue = self.swBrightnessTransform(value: currentValue)
newValue = self.swBrightnessTransform(value: newValue)
os_log("setting software brightness to: %{public}@", type: .debug, String(newValue))
let gammaTableRed = self.defaultGammaTableRed.map { $0 * /* transientValue */ newValue }
let gammaTableGreen = self.defaultGammaTableGreen.map { $0 * /* transientValue */ newValue }
let gammaTableBlue = self.defaultGammaTableBlue.map { $0 * /* transientValue */ newValue }
CGSetDisplayTransferByTable(self.identifier, self.defaultGammaTableSampleCount, gammaTableRed, gammaTableGreen, gammaTableBlue)
// DispatchQueue.global(qos: .userInitiated).async {
// for transientValue in stride(from: currentValue, to: newValue, by: 0.0025 * (currentValue > newValue ? -1 : 1)) {
// let gammaTableRed = self.defaultGammaTableRed.map { $0 * transientValue }
// let gammaTableGreen = self.defaultGammaTableGreen.map { $0 * transientValue }
// let gammaTableBlue = self.defaultGammaTableBlue.map { $0 * transientValue }
// CGSetDisplayTransferByTable(self.identifier, self.defaultGammaTableSampleCount, gammaTableRed, gammaTableGreen, gammaTableBlue)
// Thread.sleep(forTimeInterval: 0.0005) // This will make things a bit nicer and mimic delay of DDC communication for consistency
// }
// }
return true
}
func getSwBrightness() -> UInt8 {
var redMin: CGGammaValue = 0
var redMax: CGGammaValue = 0
var redGamma: CGGammaValue = 0
var greenMin: CGGammaValue = 0
var greenMax: CGGammaValue = 0
var greenGamma: CGGammaValue = 0
var blueMin: CGGammaValue = 0
var blueMax: CGGammaValue = 0
var blueGamma: CGGammaValue = 0
if CGGetDisplayTransferByFormula(self.identifier, &redMin, &redMax, &redGamma, &greenMin, &greenMax, &greenGamma, &blueMin, &blueMax, &blueGamma) == CGError.success {
let brightnessValue = UInt8(round(swBrightnessTransform(value: max(redMax, greenMax, blueMax), reverse: true) * Float(self.getSwMaxBrightness())))
os_log("Current read software brightness is: %{public}@", type: .debug, String(brightnessValue))
var gammaTableRed = [CGGammaValue](repeating: 0, count: 256)
var gammaTableGreen = [CGGammaValue](repeating: 0, count: 256)
var gammaTableBlue = [CGGammaValue](repeating: 0, count: 256)
var gammaTableSampleCount: UInt32 = 0
if CGGetDisplayTransferByTable(self.identifier, 256, &gammaTableRed, &gammaTableGreen, &gammaTableBlue, &gammaTableSampleCount) == CGError.success {
let redPeak = gammaTableRed.max() ?? 0
let greenPeak = gammaTableGreen.max() ?? 0
let bluePeak = gammaTableBlue.max() ?? 0
let gammaTablePeak = max(redPeak, greenPeak, bluePeak)
let peakRatio = gammaTablePeak / self.defaultGammaTablePeak
let brightnessValue = UInt8(round(self.swBrightnessTransform(value: peakRatio, reverse: true) * Float(self.getSwMaxBrightness())))
os_log("Current software gammatable brightness is: %{public}@", type: .debug, String(brightnessValue))
return brightnessValue
}
return self.getSwMaxBrightness()

View file

@ -309,10 +309,10 @@
<objects>
<viewController storyboardIdentifier="MainPrefsVC" id="BGD-tY-Myx" customClass="MainPrefsViewController" customModule="MonitorControl" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" horizontalHuggingPriority="1" translatesAutoresizingMaskIntoConstraints="NO" id="COE-Oc-gZs">
<rect key="frame" x="0.0" y="0.0" width="691" height="500"/>
<rect key="frame" x="0.0" y="0.0" width="691" height="452"/>
<subviews>
<gridView xPlacement="leading" yPlacement="fill" rowAlignment="none" rowSpacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="noT-gJ-0yS">
<rect key="frame" x="20" y="20" width="651" height="460"/>
<rect key="frame" x="20" y="20" width="651" height="412"/>
<rows>
<gridRow bottomPadding="-5" id="d70-FX-dma"/>
<gridRow bottomPadding="-10" id="QQ6-z4-SQj"/>
@ -325,7 +325,6 @@
<gridRow bottomPadding="-10" id="xlB-05-nd7"/>
<gridRow bottomPadding="-10" id="fnu-hr-lg2"/>
<gridRow bottomPadding="-5" id="fZn-VF-HKh"/>
<gridRow id="hKt-Zi-ARh"/>
<gridRow height="2" bottomPadding="-5" id="gGa-4U-s7D"/>
<gridRow height="16" bottomPadding="-10" id="g3B-cE-vmT"/>
<gridRow bottomPadding="-5" id="Unk-I5-6mY"/>
@ -338,7 +337,7 @@
<gridCells>
<gridCell row="d70-FX-dma" column="eHC-Ur-UsS" xPlacement="trailing" id="ixb-6N-RsC">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HkH-iv-GLz">
<rect key="frame" x="152" y="444" width="76" height="16"/>
<rect key="frame" x="152" y="396" width="76" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" baseWritingDirection="leftToRight" alignment="right" title="Application:" id="okD-DG-pYa">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -348,7 +347,7 @@
</gridCell>
<gridCell row="d70-FX-dma" column="64O-72-10l" xPlacement="leading" id="v0S-4P-60y">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9Gu-aU-Td2">
<rect key="frame" x="235" y="443" width="108" height="18"/>
<rect key="frame" x="235" y="395" width="108" height="18"/>
<buttonCell key="cell" type="check" title="Start at Login" bezelStyle="regularSquare" imagePosition="left" inset="2" id="j72-NF-zsW">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@ -361,7 +360,7 @@
<gridCell row="QQ6-z4-SQj" column="eHC-Ur-UsS" xPlacement="trailing" id="Kx3-tx-tfm"/>
<gridCell row="QQ6-z4-SQj" column="64O-72-10l" id="okK-xx-Dxu">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mvI-eU-qF0">
<rect key="frame" x="235" y="412" width="416" height="18"/>
<rect key="frame" x="235" y="364" width="416" height="18"/>
<buttonCell key="cell" type="check" title="Hide Menu Icon" bezelStyle="regularSquare" imagePosition="left" inset="2" id="aXL-i8-S6R">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@ -374,7 +373,7 @@
<gridCell row="SYZ-Ci-NFT" column="eHC-Ur-UsS" xPlacement="trailing" id="2pd-qA-kLg"/>
<gridCell row="SYZ-Ci-NFT" column="64O-72-10l" id="KSN-i7-5AM">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9JI-rw-5OZ">
<rect key="frame" x="235" y="390" width="418" height="13"/>
<rect key="frame" x="235" y="342" width="418" height="13"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="clipping" title="If the menu item is hidden, just relaunch the app to reveal Preferences!" id="PVE-y7-zIk">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
@ -384,13 +383,13 @@
</gridCell>
<gridCell row="kq5-g8-wyx" column="eHC-Ur-UsS" headOfMergedCell="Mt2-uw-XYS" id="Mt2-uw-XYS">
<box key="contentView" autoresizesSubviews="NO" horizontalHuggingPriority="1" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" placeholderIntrinsicWidth="651" placeholderIntrinsicHeight="2" verifyAmbiguity="off" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="Hy5-8z-HH1">
<rect key="frame" x="0.0" y="366" width="651" height="6"/>
<rect key="frame" x="0.0" y="318" width="651" height="6"/>
</box>
</gridCell>
<gridCell row="kq5-g8-wyx" column="64O-72-10l" headOfMergedCell="Mt2-uw-XYS" id="G91-kj-yti"/>
<gridCell row="sTd-j8-JBA" column="eHC-Ur-UsS" xPlacement="trailing" id="Lmh-9O-zi6">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hSH-na-AhI">
<rect key="frame" x="130" y="337" width="98" height="16"/>
<rect key="frame" x="130" y="289" width="98" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Menu contents:" id="MJx-MK-e7D">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -400,7 +399,7 @@
</gridCell>
<gridCell row="sTd-j8-JBA" column="64O-72-10l" id="DbJ-oq-2oU">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jiL-N0-OxS">
<rect key="frame" x="235" y="336" width="416" height="18"/>
<rect key="frame" x="235" y="288" width="416" height="18"/>
<buttonCell key="cell" type="check" title="Show volume slider in menu" bezelStyle="regularSquare" imagePosition="left" inset="2" id="dhP-eB-1L6">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@ -413,7 +412,7 @@
<gridCell row="ndw-Bq-1vH" column="eHC-Ur-UsS" xPlacement="trailing" id="XyP-dx-B3A"/>
<gridCell row="ndw-Bq-1vH" column="64O-72-10l" xPlacement="leading" id="AlB-kz-Uue">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xGa-qG-9ut">
<rect key="frame" x="235" y="300" width="202" height="18"/>
<rect key="frame" x="235" y="252" width="202" height="18"/>
<buttonCell key="cell" type="check" title="Show contrast slider in menu" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="xSI-8W-Xd0">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@ -425,13 +424,13 @@
</gridCell>
<gridCell row="CrM-x5-re7" column="eHC-Ur-UsS" headOfMergedCell="UBc-A2-Il4" id="UBc-A2-Il4">
<box key="contentView" autoresizesSubviews="NO" horizontalHuggingPriority="1" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" placeholderIntrinsicWidth="651" placeholderIntrinsicHeight="2" verifyAmbiguity="off" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="YEg-U6-LH4">
<rect key="frame" x="0.0" y="282" width="651" height="6"/>
<rect key="frame" x="0.0" y="234" width="651" height="6"/>
</box>
</gridCell>
<gridCell row="CrM-x5-re7" column="64O-72-10l" headOfMergedCell="UBc-A2-Il4" id="s0l-Gz-1c0"/>
<gridCell row="DnA-aR-kcy" column="eHC-Ur-UsS" xPlacement="trailing" id="vO3-t1-Aqs">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zi2-7o-qA0">
<rect key="frame" x="109" y="253" width="119" height="16"/>
<rect key="frame" x="109" y="205" width="119" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Brightness control:" id="hdd-Zz-buN">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -441,7 +440,7 @@
</gridCell>
<gridCell row="DnA-aR-kcy" column="64O-72-10l" id="Srb-mF-ZHj">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IDx-gH-haW">
<rect key="frame" x="235" y="252" width="416" height="18"/>
<rect key="frame" x="235" y="204" width="416" height="18"/>
<buttonCell key="cell" type="check" title="Fallback to software dimming if required" bezelStyle="regularSquare" imagePosition="left" inset="2" id="kMa-3q-udl">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@ -454,7 +453,7 @@
<gridCell row="xlB-05-nd7" column="eHC-Ur-UsS" id="A6K-rU-q8d"/>
<gridCell row="xlB-05-nd7" column="64O-72-10l" id="3by-qE-2cw">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bl8-vV-CVn">
<rect key="frame" x="235" y="215" width="418" height="28"/>
<rect key="frame" x="235" y="167" width="418" height="28"/>
<textFieldCell key="cell" controlSize="small" title="If an external display can't be controlled, software dimming will be used instead." id="n4V-jQ-1Ri">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
@ -465,7 +464,7 @@
<gridCell row="fnu-hr-lg2" column="eHC-Ur-UsS" xPlacement="trailing" id="7Br-bw-2Th"/>
<gridCell row="fnu-hr-lg2" column="64O-72-10l" xPlacement="leading" id="VsI-fh-hJ5">
<button key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="i5K-Cd-wxm">
<rect key="frame" x="235" y="188" width="307" height="18"/>
<rect key="frame" x="235" y="140" width="307" height="18"/>
<buttonCell key="cell" type="check" title="Further lower brightness via software dimming" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="fhy-Er-0aI">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@ -478,7 +477,7 @@
<gridCell row="fZn-VF-HKh" column="eHC-Ur-UsS" xPlacement="trailing" id="4xt-0S-gdo"/>
<gridCell row="fZn-VF-HKh" column="64O-72-10l" xPlacement="leading" id="CMT-YB-Lnh">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" placeholderIntrinsicWidth="400" placeholderIntrinsicHeight="28" preferredMaxLayoutWidth="400" translatesAutoresizingMaskIntoConstraints="NO" id="XMe-OL-ELb">
<rect key="frame" x="235" y="151" width="404" height="28"/>
<rect key="frame" x="235" y="103" width="404" height="28"/>
<textFieldCell key="cell" controlSize="small" title="This lets you further lower brightness via software dimming even after display has reached zero brightness." id="yeg-GN-SuO">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
@ -486,17 +485,6 @@
</textFieldCell>
</textField>
</gridCell>
<gridCell row="hKt-Zi-ARh" column="eHC-Ur-UsS" id="3OM-jW-1Kg"/>
<gridCell row="hKt-Zi-ARh" column="64O-72-10l" id="0ZZ-ZJ-Sry">
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gpq-uh-XWx">
<rect key="frame" x="235" y="108" width="418" height="28"/>
<textFieldCell key="cell" controlSize="small" title="Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!" id="3BD-NN-46v">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</gridCell>
<gridCell row="gGa-4U-s7D" column="eHC-Ur-UsS" headOfMergedCell="hH2-hj-VXr" id="hH2-hj-VXr">
<box key="contentView" autoresizesSubviews="NO" horizontalHuggingPriority="1" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" placeholderIntrinsicWidth="651" placeholderIntrinsicHeight="2" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="zA4-hk-MYo">
<rect key="frame" x="0.0" y="84" width="651" height="6"/>

View file

@ -1,9 +1,6 @@
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "Einstellungen zurücksetzen";

View file

@ -4,9 +4,6 @@
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "2gr-xG-Byx"; */
"2gr-xG-Byx.title" = "Text Cell";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "Reset Preferences";

View file

@ -1,9 +1,6 @@
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "Reset Preferences";

View file

@ -1,9 +1,6 @@
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "Alapértelmezett beállítások";

View file

@ -1,9 +1,6 @@
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "Reset Preferences";

View file

@ -4,9 +4,6 @@
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "2gr-xG-Byx"; */
"2gr-xG-Byx.title" = "Text Cell";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "初期設定に戻す";

View file

@ -1,9 +1,6 @@
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "Resetowanie ustawień";

View file

@ -1,9 +1,6 @@
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "Сброс настроек";

View file

@ -1,9 +1,6 @@
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "Відновлення налаштувань";

View file

@ -1,9 +1,6 @@
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSTextFieldCell"; title = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!"; ObjectID = "3BD-NN-46v"; */
"3BD-NN-46v.title" = "Please be aware that both of these features are currently incompatible with custom ColorSync Display Calibration Profiles!";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "4Pj-3t-PJr"; */
"4Pj-3t-PJr.title" = "重置偏好设置";

View file

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>2156</string>
<string>2240</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSBackgroundOnly</key>