From 810869bf6dea6498af602467e49f3b1d3a74796d Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 19 Aug 2013 19:30:04 +0200 Subject: [PATCH] faster lookup element painting --- .../lookup/impl/LookupCellRenderer.java | 26 +++++++++++-------- .../intellij/ui/ExpandableItemsHandler.java | 2 ++ .../ui/ExpandableItemsHandlerFactory.java | 5 ++++ .../ui/AbstractExpandableItemsHandler.java | 5 ++++ 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java index 635d3e9e2a1e..8a813b84611d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java @@ -28,6 +28,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.codeStyle.MinusculeMatcher; import com.intellij.psi.codeStyle.NameUtil; import com.intellij.ui.*; +import com.intellij.ui.components.JBList; import com.intellij.ui.speedSearch.SpeedSearchUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FList; @@ -172,17 +173,20 @@ public class LookupCellRenderer implements ListCellRenderer { myTailComponent.getPreferredSize().getWidth() + myTypeLabel.getPreferredSize().getWidth(); - myPanel.removeAll(); - if (isSelected && w > list.getWidth()) { - myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.X_AXIS)); - myPanel.add(myNameComponent); - myPanel.add(myTailComponent); - myPanel.add(myTypeLabel); - } else { - myPanel.setLayout(new BorderLayout()); - myPanel.add(myNameComponent, BorderLayout.WEST); - myPanel.add(myTailComponent, BorderLayout.CENTER); - myPanel.add(myTypeLabel, BorderLayout.EAST); + boolean useBoxLayout = isSelected && w > list.getWidth() && ((JBList)list).getExpandableItemsHandler().isEnabled(); + if (useBoxLayout != myPanel.getLayout() instanceof BoxLayout) { + myPanel.removeAll(); + if (useBoxLayout) { + myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.X_AXIS)); + myPanel.add(myNameComponent); + myPanel.add(myTailComponent); + myPanel.add(myTypeLabel); + } else { + myPanel.setLayout(new BorderLayout()); + myPanel.add(myNameComponent, BorderLayout.WEST); + myPanel.add(myTailComponent, BorderLayout.CENTER); + myPanel.add(myTypeLabel, BorderLayout.EAST); + } } return myPanel; diff --git a/platform/platform-api/src/com/intellij/ui/ExpandableItemsHandler.java b/platform/platform-api/src/com/intellij/ui/ExpandableItemsHandler.java index 4904b1616e33..b9146bcac7bc 100644 --- a/platform/platform-api/src/com/intellij/ui/ExpandableItemsHandler.java +++ b/platform/platform-api/src/com/intellij/ui/ExpandableItemsHandler.java @@ -21,6 +21,8 @@ import java.util.Collection; public interface ExpandableItemsHandler { void setEnabled(boolean enabled); + + boolean isEnabled(); @NotNull Collection getExpandedItems(); diff --git a/platform/platform-api/src/com/intellij/ui/ExpandableItemsHandlerFactory.java b/platform/platform-api/src/com/intellij/ui/ExpandableItemsHandlerFactory.java index b9002b993515..e6e2039e4146 100644 --- a/platform/platform-api/src/com/intellij/ui/ExpandableItemsHandlerFactory.java +++ b/platform/platform-api/src/com/intellij/ui/ExpandableItemsHandlerFactory.java @@ -58,6 +58,11 @@ public abstract class ExpandableItemsHandlerFactory { public void setEnabled(boolean enabled) { } + @Override + public boolean isEnabled() { + return false; + } + @NotNull @Override public Collection getExpandedItems() { diff --git a/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java b/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java index e4f117111e1e..8cc9b3d15f3b 100644 --- a/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java +++ b/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java @@ -159,6 +159,11 @@ public abstract class AbstractExpandableItemsHandler getExpandedItems() {