From d4433bc35170a65ffc5d3eda28d6ca96119d00d8 Mon Sep 17 00:00:00 2001 From: Kirill Kirichenko Date: Fri, 7 Jul 2017 18:23:53 +0300 Subject: [PATCH] IDEA-171869 Win10 LaF Table borders fixed and combobox fixed for fractional HiDPI scale factor --- .../match/ArrangementMatchingRulesPanel.java | 3 ++ .../util/AbstractTreeClassChooserDialog.java | 6 ++-- .../intellij/ide/util/DirectoryChooser.java | 8 ++++- .../ide/util/gotoByName/ChooseByNameBase.java | 1 + .../src/com/intellij/openapi/ui/Messages.java | 14 +++++++-- .../laf/intellij/WinIntelliJComboBoxUI.java | 12 +++----- .../laf/intellij/WinIntelliJTextFieldUI.java | 4 ++- .../devkit/src/dom/generator/DomGenPanel.form | 30 ++++++++++--------- ...GroovyCodeStyleGenerationConfigurable.java | 2 +- 9 files changed, 48 insertions(+), 32 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchingRulesPanel.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchingRulesPanel.java index 1baa50ecbc22..fedc66f83685 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchingRulesPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchingRulesPanel.java @@ -26,8 +26,10 @@ import com.intellij.psi.codeStyle.arrangement.match.ArrangementSectionRule; import com.intellij.psi.codeStyle.arrangement.std.ArrangementStandardSettingsManager; import com.intellij.psi.codeStyle.arrangement.std.StdArrangementRuleAliasToken; import com.intellij.ui.IdeBorderFactory; +import com.intellij.ui.SideBorder; import com.intellij.ui.components.JBScrollPane; import com.intellij.util.ui.GridBag; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -52,6 +54,7 @@ public class ArrangementMatchingRulesPanel extends JPanel implements DataProvide super(new GridBagLayout()); JBScrollPane scrollPane = new JBScrollPane(); + scrollPane.putClientProperty(UIUtil.KEEP_BORDER_SIDES, SideBorder.ALL); final JViewport viewport = scrollPane.getViewport(); ArrangementSectionRulesControl.RepresentationCallback callback = new ArrangementSectionRulesControl.RepresentationCallback() { @Override diff --git a/platform/lang-impl/src/com/intellij/ide/util/AbstractTreeClassChooserDialog.java b/platform/lang-impl/src/com/intellij/ide/util/AbstractTreeClassChooserDialog.java index 7e4a948b141d..56bb629f29c7 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/AbstractTreeClassChooserDialog.java +++ b/platform/lang-impl/src/com/intellij/ide/util/AbstractTreeClassChooserDialog.java @@ -40,10 +40,7 @@ import com.intellij.psi.PsiNamedElement; import com.intellij.psi.presentation.java.SymbolPresentationUtil; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiUtilBase; -import com.intellij.ui.DoubleClickListener; -import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.TabbedPaneWrapper; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.*; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; @@ -188,6 +185,7 @@ public abstract class AbstractTreeClassChooserDialog JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTree); scrollPane.setPreferredSize(JBUI.size(500, 300)); + scrollPane.putClientProperty(UIUtil.KEEP_BORDER_SIDES, SideBorder.RIGHT | SideBorder.LEFT | SideBorder.BOTTOM); myTree.addKeyListener(new KeyAdapter() { @Override diff --git a/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooser.java b/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooser.java index 7f14e5276cb4..d4e6feae2473 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooser.java +++ b/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooser.java @@ -20,7 +20,10 @@ import com.intellij.icons.AllIcons; import com.intellij.ide.util.gotoByName.ChooseByNamePanel; import com.intellij.ide.util.gotoByName.ChooseByNamePopupComponent; import com.intellij.ide.util.gotoByName.GotoClassModel2; -import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.actionSystem.ActionManager; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.actionSystem.ToggleAction; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectUtil; @@ -40,6 +43,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.refactoring.RefactoringBundle; import com.intellij.ui.ScrollPaneFactory; +import com.intellij.ui.SideBorder; import com.intellij.ui.TabbedPaneWrapper; import com.intellij.util.ArrayUtil; import com.intellij.util.PlatformIcons; @@ -141,6 +145,8 @@ public class DirectoryChooser extends DialogWrapper { //noinspection HardCodedStringLiteral int prototypeWidth = component.getFontMetrics(component.getFont()).stringWidth("X:\\1234567890\\1234567890\\com\\company\\system\\subsystem"); jScrollPane.setPreferredSize(new Dimension(Math.max(300, prototypeWidth),300)); + jScrollPane.putClientProperty(UIUtil.KEEP_BORDER_SIDES, SideBorder.ALL); + installEnterAction(component); panel.add(jScrollPane, BorderLayout.CENTER); diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java index 38c7ead3c68b..515bed0fc383 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java @@ -655,6 +655,7 @@ public abstract class ChooseByNameBase { myListScrollPane = ScrollPaneFactory.createScrollPane(myList); myListScrollPane.setViewportBorder(JBUI.Borders.empty()); + myListScrollPane.putClientProperty(UIUtil.KEEP_BORDER_SIDES, SideBorder.ALL); myTextFieldPanel.setBorder(JBUI.Borders.empty(5)); diff --git a/platform/platform-api/src/com/intellij/openapi/ui/Messages.java b/platform/platform-api/src/com/intellij/openapi/ui/Messages.java index b910fbd488ab..ec906b1fb548 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/Messages.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/Messages.java @@ -44,7 +44,6 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.JTextComponent; -import javax.swing.text.html.HTMLEditorKit; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; @@ -1823,11 +1822,15 @@ public class Messages { } myField = createTextFieldComponent(); - messagePanel.add(myField, BorderLayout.SOUTH); + messagePanel.add(createScrollableTextComponent(), BorderLayout.SOUTH); return messagePanel; } + protected JComponent createScrollableTextComponent() { + return myField; + } + protected JComponent createTextComponent() { JComponent textComponent; if (BasicHTML.isHTMLString(myMessage)) { @@ -1880,6 +1883,11 @@ public class Messages { protected JTextComponent createTextFieldComponent() { return new JTextArea(7, 50); } + + @Override + protected JComponent createScrollableTextComponent() { + return new JBScrollPane(myField); + } } protected static class PasswordInputDialog extends InputDialog { @@ -1930,7 +1938,7 @@ public class Messages { } myField = createTextFieldComponent(); - messagePanel.add(myField, BorderLayout.CENTER); + messagePanel.add(createScrollableTextComponent(), BorderLayout.CENTER); myCheckBox = new JCheckBox(); messagePanel.add(myCheckBox, BorderLayout.SOUTH); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java index 436f44021293..53b5e3254238 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java @@ -146,18 +146,14 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { arrowButton.getWidth() - i.right: arrowButton.getWidth() - i.left; } + int vOffset = JBUI.scale(comboBox.isEditable() ? 0 : 1); Rectangle rect = (comboBox.getComponentOrientation().isLeftToRight()) ? - new Rectangle(i.left, i.top - JBUI.scale(1), + new Rectangle(i.left, i.top - vOffset, w - (i.left + i.right + buttonWidth), h - (i.top + i.bottom)) : - new Rectangle(i.left + buttonWidth, i.top - JBUI.scale(1), + new Rectangle(i.left + buttonWidth, i.top - vOffset, w - (i.left + i.right + buttonWidth), h - (i.top + i.bottom)); - - if (editor instanceof JComponent) { - JBInsets.removeFrom(rect, ((JComponent)editor).getInsets()); - } - return rect; } @@ -541,7 +537,7 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } - if (editor != null) { + if (comboBox.isEditable() && editor != null) { Rectangle er = rectangleForCurrentValue(); editor.setBounds(er); } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java index 6a7b86b5690b..4d6534053635 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java @@ -16,6 +16,7 @@ package com.intellij.ide.ui.laf.intellij; import com.intellij.ide.ui.laf.darcula.DarculaUIUtil; +import com.intellij.ide.ui.laf.darcula.ui.DarculaEditorTextFieldBorder; import com.intellij.ide.ui.laf.darcula.ui.DarculaTextFieldUI; import com.intellij.openapi.util.IconLoader; import com.intellij.ui.components.panels.Wrapper; @@ -111,7 +112,8 @@ public class WinIntelliJTextFieldUI extends DarculaTextFieldUI { @Override public Dimension getPreferredSize(JComponent c) { Dimension size = super.getPreferredSize(c); - size.height = Math.max(JBUI.scale(24), size.height); + int maxHeight = JBUI.scale(DarculaEditorTextFieldBorder.isComboBoxEditor(c) ? 18 : 24); + size.height = Math.max(maxHeight, size.height); return size; } diff --git a/plugins/devkit/src/dom/generator/DomGenPanel.form b/plugins/devkit/src/dom/generator/DomGenPanel.form index 5ae4445e47c5..87ffbcc34529 100644 --- a/plugins/devkit/src/dom/generator/DomGenPanel.form +++ b/plugins/devkit/src/dom/generator/DomGenPanel.form @@ -1,6 +1,6 @@
- + @@ -19,11 +19,6 @@ - - - - - @@ -108,14 +103,6 @@ - - - - - - - - @@ -147,6 +134,21 @@ + + + + + + + + + + + + + + + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeStyle/GroovyCodeStyleGenerationConfigurable.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeStyle/GroovyCodeStyleGenerationConfigurable.java index 2faa4130fb18..a29cf27ed8fc 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeStyle/GroovyCodeStyleGenerationConfigurable.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeStyle/GroovyCodeStyleGenerationConfigurable.java @@ -46,9 +46,9 @@ public class GroovyCodeStyleGenerationConfigurable implements CodeStyleConfigura public JComponent createComponent() { JPanel panel = ToolbarDecorator.createDecorator(myMembersOrderList) .disableAddAction().disableRemoveAction().createPanel(); - panel.setBorder(IdeBorderFactory.createTitledBorder(ApplicationBundle.message("title.order.of.members"), true, new JBInsets(0, 10, 10, 10))); JPanel wholePanel = new JPanel(new BorderLayout()); + wholePanel.setBorder(IdeBorderFactory.createTitledBorder(ApplicationBundle.message("title.order.of.members"), true, new JBInsets(0, 10, 10, 10))); wholePanel.add(panel, BorderLayout.NORTH); return wholePanel; }