mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
nsdefaults: use awt.Color unstead of strings, impl getHighlightColor
This commit is contained in:
@@ -4,13 +4,21 @@ package com.intellij.ui.mac.foundation;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class NSDefaults {
|
||||
private static final Logger LOG = Logger.getInstance(NSDefaults.class);
|
||||
|
||||
private static final Map<Integer, Color> ourAccentColId2Color;
|
||||
private static final Color ourDefaultAccentColor = new Color(46, 125, 246); // blue
|
||||
private static final Color ourDefaultHighlightColor = new Color(185, 215, 251); // blue
|
||||
|
||||
// NOTE: skip call of Foundation.invoke(myDefaults, "synchronize") (when read settings)
|
||||
// It waits for any pending asynchronous updates to the defaults database and returns; this method is unnecessary and shouldn't be used.
|
||||
|
||||
@@ -18,6 +26,17 @@ public class NSDefaults {
|
||||
public static final String ourTouchBarNode = "PresentationModePerApp";
|
||||
public static final String ourTouchBarShowFnValue = "functionKeys";
|
||||
|
||||
static {
|
||||
ourAccentColId2Color = new HashMap<Integer, Color>();
|
||||
ourAccentColId2Color.put(5, new Color(138, 69, 146)); // purple
|
||||
ourAccentColId2Color.put(6, new Color(229, 94, 156)); // pink
|
||||
ourAccentColId2Color.put(0, new Color(207, 71, 69)); // red
|
||||
ourAccentColId2Color.put(1, new Color(232, 135, 58)); // orange
|
||||
ourAccentColId2Color.put(2, new Color(243, 185, 75)); // yellow
|
||||
ourAccentColId2Color.put(3, new Color(120, 183, 86)); // green
|
||||
ourAccentColId2Color.put(-1, new Color(152, 152, 152)); // graphite
|
||||
}
|
||||
|
||||
private static class Path {
|
||||
private final @NotNull ArrayList<Node> myPath = new ArrayList<Node>();
|
||||
|
||||
@@ -281,28 +300,46 @@ public class NSDefaults {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getAccentColor() {
|
||||
public static @NotNull Color getHighlightColor() {
|
||||
// Blue : default (key doesn't exist)
|
||||
// 0.968627 0.831373 1.000000 Purple
|
||||
// 1.000000 0.749020 0.823529 Pink
|
||||
// 1.000000 0.733333 0.721569 Red
|
||||
// 1.000000 0.874510 0.701961 Orange
|
||||
// 1.000000 0.937255 0.690196 Yellow
|
||||
// 0.752941 0.964706 0.678431 Green
|
||||
// 0.847059 0.847059 0.862745 Graphite
|
||||
|
||||
final String sval = _getHighlightColor();
|
||||
if (sval == null)
|
||||
return ourDefaultHighlightColor;
|
||||
|
||||
final String[] spl = sval.split(" ");
|
||||
if (spl != null && spl.length >= 3) {
|
||||
final float r,g,b;
|
||||
try {
|
||||
r = Float.parseFloat(spl[0]);
|
||||
g = Float.parseFloat(spl[1]);
|
||||
b = Float.parseFloat(spl[2]);
|
||||
return new Color(r, g, b);
|
||||
} catch (NumberFormatException nfe) {
|
||||
LOG.error(nfe);
|
||||
} catch (NullPointerException npe) {
|
||||
LOG.error(npe);
|
||||
}
|
||||
}
|
||||
|
||||
LOG.error("incorrect format of registry value 'AppleHighlightColor': " + sval);
|
||||
return ourDefaultHighlightColor;
|
||||
}
|
||||
|
||||
public static @Nullable Color getAccentColor() {
|
||||
if (!SystemInfo.isMac || !SystemInfo.isOsVersionAtLeast("10.14"))
|
||||
return null;
|
||||
// Blue : default (key doesn't exist)
|
||||
// Purple : 5
|
||||
// Pink : 6
|
||||
// Red : 0
|
||||
// Orange : 1
|
||||
// Yellow : 2
|
||||
// Green : 3
|
||||
// Graphite: -1
|
||||
|
||||
final int nval = _getAccentColor();
|
||||
switch (nval) {
|
||||
case 5: return "purple";
|
||||
case 6: return "pink";
|
||||
case 0: return "red";
|
||||
case 1: return "orange";
|
||||
case 2: return "yellow";
|
||||
case 3: return "green";
|
||||
case -1: return "graphite";
|
||||
default: return "blue";
|
||||
}
|
||||
final Color result = ourAccentColId2Color.get(nval);
|
||||
return result == null ? ourDefaultAccentColor : result;
|
||||
}
|
||||
|
||||
private static int _getAccentColor() {
|
||||
@@ -327,6 +364,26 @@ public class NSDefaults {
|
||||
}
|
||||
}
|
||||
|
||||
private static String _getHighlightColor() {
|
||||
final Foundation.NSAutoreleasePool pool = new Foundation.NSAutoreleasePool();
|
||||
try {
|
||||
final ID defaults = Foundation.invoke("NSUserDefaults", "standardUserDefaults");
|
||||
if (defaults == null || defaults.equals(ID.NIL))
|
||||
return null;
|
||||
final ID domObj = Foundation.invoke(defaults, "persistentDomainForName:", Foundation.nsString("Apple Global Domain"));
|
||||
if (domObj == null || domObj.equals(ID.NIL))
|
||||
return null;
|
||||
|
||||
final ID strObj = Foundation.invoke(domObj, "objectForKey:", Foundation.nsString("AppleHighlightColor"));
|
||||
if (strObj == null || strObj.equals(ID.NIL))
|
||||
return null;
|
||||
|
||||
return Foundation.toStringViaUTF8(strObj);
|
||||
} finally {
|
||||
pool.drain();
|
||||
}
|
||||
}
|
||||
|
||||
// for debug
|
||||
private List<String> _listAllKeys() {
|
||||
List<String> res = new ArrayList<String>(100);
|
||||
|
||||
Reference in New Issue
Block a user