mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-200171 High Contrast Theme: Editor color scheme remains "High Contrast" after changing theme to "Darcula"
This commit is contained in:
@@ -5,16 +5,18 @@ import com.intellij.CommonBundle;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.WelcomeWizardUtil;
|
||||
import com.intellij.ide.ui.LafManager;
|
||||
import com.intellij.ide.ui.LafManagerListener;
|
||||
import com.intellij.ide.ui.UISettings;
|
||||
import com.intellij.ide.ui.UIThemeProvider;
|
||||
import com.intellij.ide.ui.*;
|
||||
import com.intellij.ide.ui.laf.darcula.DarculaInstaller;
|
||||
import com.intellij.ide.ui.laf.darcula.DarculaLaf;
|
||||
import com.intellij.ide.ui.laf.darcula.DarculaLookAndFeelInfo;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.*;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsScheme;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.ui.popup.util.PopupUtil;
|
||||
@@ -23,6 +25,7 @@ import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.UserDataHolder;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.ui.ColorUtil;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.intellij.ui.ScreenUtil;
|
||||
import com.intellij.ui.components.BasicOptionButtonUI;
|
||||
@@ -68,6 +71,9 @@ public final class LafManagerImpl extends LafManager implements PersistentStateC
|
||||
@NonNls private static final String ATTRIBUTE_THEME_NAME = "themeId";
|
||||
@NonNls private static final String GNOME_THEME_PROPERTY_NAME = "gnome.Net/ThemeName";
|
||||
|
||||
private static final String DARCULA_EDITOR_THEME_KEY = "Darcula.SavedEditorTheme";
|
||||
private static final String DEFAULT_EDITOR_THEME_KEY = "Default.SavedEditorTheme";
|
||||
|
||||
@NonNls private static final String[] ourPatchableFontResources = {"Button.font", "ToggleButton.font", "RadioButton.font",
|
||||
"CheckBox.font", "ColorChooser.font", "ComboBox.font", "Label.font", "List.font", "MenuBar.font", "MenuItem.font",
|
||||
"MenuItem.acceleratorFont", "RadioButtonMenuItem.font", "CheckBoxMenuItem.font", "Menu.font", "PopupMenu.font", "OptionPane.font",
|
||||
@@ -400,7 +406,39 @@ public final class LafManagerImpl extends LafManager implements PersistentStateC
|
||||
((UIThemeBasedLookAndFeelInfo)myCurrentLaf).dispose();
|
||||
}
|
||||
|
||||
|
||||
final UIManager.LookAndFeelInfo oldLaf = myCurrentLaf;
|
||||
myCurrentLaf = ObjectUtils.chooseNotNull(lookAndFeelInfo, findLaf(lookAndFeelInfo.getClassName()));
|
||||
|
||||
ApplicationManager.getApplication().invokeLater(() -> updateEditorScheme(oldLaf));
|
||||
}
|
||||
|
||||
private static void updateEditorScheme(UIManager.LookAndFeelInfo oldLaf) {
|
||||
boolean dark = UIUtil.isUnderDarcula();
|
||||
EditorColorsManager colorsManager = EditorColorsManager.getInstance();
|
||||
EditorColorsScheme current = colorsManager.getGlobalScheme();
|
||||
boolean wasUITheme = oldLaf instanceof UIThemeBasedLookAndFeelInfo;
|
||||
if (dark != ColorUtil.isDark(current.getDefaultBackground()) || wasUITheme) {
|
||||
String targetScheme = dark ? DarculaLaf.NAME : EditorColorsScheme.DEFAULT_SCHEME_NAME;
|
||||
PropertiesComponent properties = PropertiesComponent.getInstance();
|
||||
String savedEditorThemeKey = dark ? DARCULA_EDITOR_THEME_KEY : DEFAULT_EDITOR_THEME_KEY;
|
||||
String toSavedEditorThemeKey = dark ? DEFAULT_EDITOR_THEME_KEY : DARCULA_EDITOR_THEME_KEY;
|
||||
String themeName = wasUITheme ? dark ? DarculaLaf.NAME : EditorColorsScheme.DEFAULT_SCHEME_NAME
|
||||
: properties.getValue(savedEditorThemeKey);
|
||||
if (themeName != null && colorsManager.getScheme(themeName) != null) {
|
||||
targetScheme = themeName;
|
||||
}
|
||||
if (!wasUITheme) {
|
||||
properties.setValue(toSavedEditorThemeKey, current.getName(), dark ? EditorColorsScheme.DEFAULT_SCHEME_NAME : DarculaLaf.NAME);
|
||||
}
|
||||
|
||||
EditorColorsScheme scheme = colorsManager.getScheme(targetScheme);
|
||||
if (scheme != null) {
|
||||
colorsManager.setGlobalScheme(scheme);
|
||||
}
|
||||
}
|
||||
UISettings.getShadowInstance().fireUISettingsChanged();
|
||||
ActionToolbarImpl.updateAllToolbarsImmediately();
|
||||
}
|
||||
|
||||
public static void updateForDarcula(boolean isDarcula) {
|
||||
|
||||
@@ -15,23 +15,13 @@
|
||||
*/
|
||||
package com.intellij.ide.ui.laf.darcula;
|
||||
|
||||
import com.intellij.ide.ui.UISettings;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsScheme;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.ui.ColorUtil;
|
||||
import com.intellij.ui.JBColor;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class DarculaInstaller {
|
||||
private static final String DARCULA_EDITOR_THEME_KEY = "Darcula.savedEditorTheme";
|
||||
private static final String DEFAULT_EDITOR_THEME_KEY = "Default.savedEditorTheme";
|
||||
|
||||
public static void uninstall() {
|
||||
performImpl(false);
|
||||
}
|
||||
@@ -43,31 +33,5 @@ public class DarculaInstaller {
|
||||
private static void performImpl(final boolean dark) {
|
||||
JBColor.setDark(dark);
|
||||
IconLoader.setUseDarkIcons(dark);
|
||||
ApplicationManager.getApplication().invokeLater(() -> {
|
||||
EditorColorsManager colorsManager = EditorColorsManager.getInstance();
|
||||
EditorColorsScheme current = colorsManager.getGlobalScheme();
|
||||
if (dark != ColorUtil.isDark(current.getDefaultBackground())) {
|
||||
String targetScheme = dark ? DarculaLaf.NAME : EditorColorsScheme.DEFAULT_SCHEME_NAME;
|
||||
PropertiesComponent properties = PropertiesComponent.getInstance();
|
||||
String savedEditorThemeKey = dark ? DARCULA_EDITOR_THEME_KEY : DEFAULT_EDITOR_THEME_KEY;
|
||||
String toSavedEditorThemeKey = dark ? DEFAULT_EDITOR_THEME_KEY : DARCULA_EDITOR_THEME_KEY;
|
||||
String themeName = properties.getValue(savedEditorThemeKey);
|
||||
if (themeName != null && colorsManager.getScheme(themeName) != null) {
|
||||
targetScheme = themeName;
|
||||
}
|
||||
properties.setValue(toSavedEditorThemeKey, current.getName(), dark ? EditorColorsScheme.DEFAULT_SCHEME_NAME : DarculaLaf.NAME);
|
||||
|
||||
EditorColorsScheme scheme = colorsManager.getScheme(targetScheme);
|
||||
if (scheme != null) {
|
||||
colorsManager.setGlobalScheme(scheme);
|
||||
}
|
||||
}
|
||||
update();
|
||||
});
|
||||
}
|
||||
|
||||
protected static void update() {
|
||||
UISettings.getShadowInstance().fireUISettingsChanged();
|
||||
ActionToolbarImpl.updateAllToolbarsImmediately();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user