From b35ef472e4dd3955eb021708e0a5c8fa542e322d Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Fri, 16 Oct 2015 22:11:00 +0300 Subject: [PATCH] Support font rendering in UI Designer --- .../src/com/intellij/ui/FontInfoRenderer.java | 4 ++ .../editors/FontEditorDialog.java | 38 +++++++++++++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/FontInfoRenderer.java b/platform/platform-impl/src/com/intellij/ui/FontInfoRenderer.java index ea063a80e10c..3fbc8c61cbb4 100644 --- a/platform/platform-impl/src/com/intellij/ui/FontInfoRenderer.java +++ b/platform/platform-impl/src/com/intellij/ui/FontInfoRenderer.java @@ -18,6 +18,7 @@ package com.intellij.ui; import com.intellij.ide.ui.AntialiasingType; import com.intellij.ide.ui.UISettings; import com.intellij.util.ui.FontInfo; +import com.intellij.util.ui.UIUtil; import sun.swing.SwingUtilities2; import java.awt.Font; @@ -39,6 +40,9 @@ public class FontInfoRenderer extends ListCellRendererWrapper { setFont(list.getFont()); } setText(value == null ? "" : value.toString()); + setForeground(list.isEnabled() + ? UIUtil.getListForeground(selected) + : UIUtil.getLabelDisabledForeground()); AntialiasingType type = getAntialiasingType(); if (type == null) type = AntialiasingType.GREYSCALE; diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditorDialog.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditorDialog.java index 2ed89053d6e0..232bf1ed1db9 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditorDialog.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditorDialog.java @@ -18,10 +18,12 @@ package com.intellij.uiDesigner.propertyInspector.editors; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.ui.ColoredListCellRenderer; +import com.intellij.ui.FontInfoRenderer; import com.intellij.ui.SimpleTextAttributes; import com.intellij.uiDesigner.UIDesignerBundle; import com.intellij.uiDesigner.lw.FontDescriptor; import com.intellij.uiDesigner.propertyInspector.properties.IntroFontProperty; +import com.intellij.util.ui.FontInfo; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -37,11 +39,13 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Enumeration; +import java.util.List; /** * @author yole */ public class FontEditorDialog extends DialogWrapper { + private final Model myModel = new Model(); private JList myFontNameList; private JList myFontStyleList; private JList myFontSizeList; @@ -61,7 +65,8 @@ public class FontEditorDialog extends DialogWrapper { super(project, false); init(); setTitle(UIDesignerBundle.message("font.chooser.title", propertyName)); - myFontNameList.setListData(UIUtil.getValidFontNames(true)); + myFontNameList.setModel(myModel); + myFontNameList.setCellRenderer(new FontInfoRenderer()); myFontNameList.addListSelectionListener(new MyListSelectionListener(myFontNameEdit)); myFontStyleList.setListData(new String[] { UIDesignerBundle.message("font.chooser.regular"), @@ -170,7 +175,7 @@ public class FontEditorDialog extends DialogWrapper { myFontNameCheckbox.setSelected(value.getFontName() != null); myFontSizeCheckbox.setSelected(value.getFontSize() >= 0); myFontStyleCheckbox.setSelected(value.getFontStyle() >= 0); - myFontNameList.setSelectedValue(value.getFontName(), true); + myFontNameList.setSelectedValue(myModel.findElement(value.getFontName()), true); myFontStyleList.setSelectedIndex(value.getFontStyle()); if (value.getFontSize() >= 0) { myFontSizeList.setSelectedValue(Integer.toString(value.getFontSize()), true); @@ -187,7 +192,7 @@ public class FontEditorDialog extends DialogWrapper { private void updateValue() { final int fontSize = ((Integer)myFontSizeEdit.getValue()).intValue(); - myValue = new FontDescriptor(myFontNameCheckbox.isSelected() ? (String) myFontNameList.getSelectedValue() : null, + myValue = new FontDescriptor(myFontNameCheckbox.isSelected() ? toString(myFontNameList.getSelectedValue()) : null, myFontStyleCheckbox.isSelected() ? myFontStyleList.getSelectedIndex() : -1, myFontSizeCheckbox.isSelected() ? fontSize : -1); updatePreview(); @@ -221,4 +226,31 @@ public class FontEditorDialog extends DialogWrapper { updateValue(); } } + + private static String toString(Object object) { + return object == null ? null : object.toString(); + } + + private static final class Model extends AbstractListModel { + private final List myList = FontInfo.getAll(false); + + @Override + public int getSize() { + return myList.size(); + } + + @Override + public FontInfo getElementAt(int index) { + return myList.get(index); + } + + public FontInfo findElement(String name) { + for (FontInfo info : myList) { + if (info.toString().equals(name)) { + return info; + } + } + return null; + } + } }