better align completion list with the text
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Fri, 17 Jul 2015 15:07:58 +0000 (18:07 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Fri, 17 Jul 2015 15:09:04 +0000 (18:09 +0300)
platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java
platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupUi.java

index 59934194f1eb743a4175006064c9cabf7ac1a8fc..adfe43f65c30a42b8ff4ae15d27f74ec96a18e32 100644 (file)
@@ -36,9 +36,7 @@ import com.intellij.ui.components.JBList;
 import com.intellij.ui.speedSearch.SpeedSearchUtil;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.containers.FList;
-import com.intellij.util.ui.EmptyIcon;
-import com.intellij.util.ui.GraphicsUtil;
-import com.intellij.util.ui.UIUtil;
+import com.intellij.util.ui.*;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -94,7 +92,8 @@ public class LookupCellRenderer implements ListCellRenderer {
 
     myLookup = lookup;
     myNameComponent = new MySimpleColoredComponent();
-    myNameComponent.setIpad(new Insets(0, 0, 0, 0));
+    myNameComponent.setIpad(JBUI.insetsLeft(2));
+    myNameComponent.setMyBorder(null);
 
     myTailComponent = new MySimpleColoredComponent();
     myTailComponent.setIpad(new Insets(0, 0, 0, 0));
@@ -135,7 +134,7 @@ public class LookupCellRenderer implements ListCellRenderer {
     final Color background = nonFocusedSelection ? SELECTED_NON_FOCUSED_BACKGROUND_COLOR :
                              isSelected ? SELECTED_BACKGROUND_COLOR : BACKGROUND_COLOR;
 
-    int allowedWidth = list.getWidth() - AFTER_TAIL - AFTER_TYPE - getIconIndent();
+    int allowedWidth = list.getWidth() - AFTER_TAIL - AFTER_TYPE - getTextIndent();
 
     FontMetrics normalMetrics = getRealFontMetrics(item, false);
     FontMetrics boldMetrics = getRealFontMetrics(item, true);
@@ -457,11 +456,10 @@ public class LookupCellRenderer implements ListCellRenderer {
     return RealLookupElementPresentation.calculateWidth(p, getRealFontMetrics(item, false), getRealFontMetrics(item, true)) + AFTER_TAIL + AFTER_TYPE;
   }
 
-  public int getIconIndent() {
-    return myNameComponent.getIconTextGap() + myEmptyIcon.getIconWidth();
+  public int getTextIndent() {
+    return myNameComponent.getIpad().left + myEmptyIcon.getIconWidth() + myNameComponent.getIconTextGap();
   }
 
-
   private static class MySimpleColoredComponent extends SimpleColoredComponent {
     private MySimpleColoredComponent() {
       setFocusBorderAroundIcon(true);
index 2b6c9f638b9d647350ce38022e0d4610ed57ca1a..53c6c19268d74cff7e2b2ebf3fb59ef53b78fcd0 100644 (file)
@@ -49,6 +49,7 @@ import com.intellij.util.PlatformIcons;
 import com.intellij.util.ui.AbstractLayoutManager;
 import com.intellij.util.ui.ButtonlessScrollBarUI;
 import com.intellij.util.ui.JBUI;
+import com.intellij.util.ui.UIUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -268,7 +269,8 @@ class LookupUi {
 
   // in layered pane coordinate system.
   Rectangle calculatePosition() {
-    Dimension dim = myLookup.getComponent().getPreferredSize();
+    final JComponent lookupComponent = myLookup.getComponent();
+    Dimension dim = lookupComponent.getPreferredSize();
     int lookupStart = myLookup.getLookupStart();
     Editor editor = myLookup.getEditor();
     if (lookupStart < 0 || lookupStart > editor.getDocument().getTextLength()) {
@@ -279,7 +281,13 @@ class LookupUi {
     LogicalPosition pos = editor.offsetToLogicalPosition(lookupStart);
     Point location = editor.logicalPositionToXY(pos);
     location.y += editor.getLineHeight();
-    location.x -= myLookup.myCellRenderer.getIconIndent() + myLookup.getComponent().getInsets().left;
+    location.x -= myLookup.myCellRenderer.getTextIndent();
+    // extra check for other borders
+    final Window window = UIUtil.getWindow(lookupComponent);
+    if (window != null) {
+      final Point point = SwingUtilities.convertPoint(lookupComponent, 0, 0, window);
+      location.x -= point.x;
+    }
 
     SwingUtilities.convertPointToScreen(location, editor.getContentComponent());
     final Rectangle screenRectangle = ScreenUtil.getScreenRectangle(location);
@@ -322,7 +330,7 @@ class LookupUi {
       setLayout(new AbstractLayoutManager() {
         @Override
         public Dimension preferredLayoutSize(@Nullable Container parent) {
-          int maxCellWidth = myLookup.myLookupTextWidth + myLookup.myCellRenderer.getIconIndent();
+          int maxCellWidth = myLookup.myLookupTextWidth + myLookup.myCellRenderer.getTextIndent();
           int scrollBarWidth = myScrollPane.getPreferredSize().width - myScrollPane.getViewport().getPreferredSize().width;
           int listWidth = Math.min(scrollBarWidth + maxCellWidth, UISettings.getInstance().MAX_LOOKUP_WIDTH2);