diff --git a/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.kt b/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.kt index 111e5bf07b37..4e37d7e02490 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.kt +++ b/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.kt @@ -255,6 +255,10 @@ class LoadingLayerAnimator( } private class LoadingDecoratorLayeredPane(private val content: JComponent?) : JBLayeredPane(), LoadingDecorator.CursorAware { + init { + isFullOverlayLayout = true + } + override fun getMinimumSize(): Dimension { return if (content != null && !isMinimumSizeSet) content.minimumSize else super.getMinimumSize() } @@ -262,17 +266,4 @@ private class LoadingDecoratorLayeredPane(private val content: JComponent?) : JB override fun getPreferredSize(): Dimension { return if (content != null && !isPreferredSizeSet) content.preferredSize else super.getPreferredSize() } - - override fun doLayout() { - super.doLayout() - for (i in 0 until componentCount) { - val each = getComponent(i) - if (each is Icon) { - each.setBounds(0, 0, each.width, each.height) - } - else { - each.setBounds(0, 0, width, height) - } - } - } } \ No newline at end of file diff --git a/platform/platform-api/src/com/intellij/ui/components/JBLayeredPane.java b/platform/platform-api/src/com/intellij/ui/components/JBLayeredPane.java index 2f7727224fe8..9a6223e5a678 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBLayeredPane.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBLayeredPane.java @@ -7,6 +7,8 @@ import javax.swing.*; import java.awt.*; public class JBLayeredPane extends JLayeredPane { + private boolean myFullOverlayLayout; + @Override public Component add(Component comp, int index) { Logger.getInstance(JBLayeredPane.class) @@ -21,4 +23,32 @@ public class JBLayeredPane extends JLayeredPane { return new Dimension(0, 0); return super.getMinimumSize(); } + + /** + * @see #setFullOverlayLayout(boolean) + */ + public boolean isFullOverlayLayout() { + return myFullOverlayLayout; + } + + /** + * When enabled, all pane's layers are resized to match pane's size at layout. + * This will override the effect from setting any layout manager. + */ + public void setFullOverlayLayout(boolean enabled) { + myFullOverlayLayout = enabled; + } + + @Override + public void doLayout() { + if (isFullOverlayLayout()) { + int width = getWidth(); + int height = getHeight(); + for (int i = getComponentCount() - 1; i >= 0; i--) { + getComponent(i).setBounds(0, 0, width, height); + } + } else { + super.doLayout(); + } + } } diff --git a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/CaptionPanel.java b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/CaptionPanel.java index 927562179b8b..0a5b87d6bde9 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/CaptionPanel.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/CaptionPanel.java @@ -46,6 +46,7 @@ public class CaptionPanel extends JBLayeredPane implements DataProvider { setBorder(IdeBorderFactory.createBorder(horizontal ? SideBorder.BOTTOM : SideBorder.RIGHT)); } + setFullOverlayLayout(true); setFocusable(true); myHorizontal = horizontal; @@ -162,14 +163,6 @@ public class CaptionPanel extends JBLayeredPane implements DataProvider { }); } - @Override - public void doLayout() { - for (int i = getComponentCount() - 1; i >= 0; i--) { - Component component = getComponent(i); - component.setBounds(0, 0, getWidth(), getHeight()); - } - } - @Override public Dimension getPreferredSize() { return new Dimension(SIZE, SIZE); diff --git a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java index 76b53be0d7ae..023eed9e8529 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java @@ -39,8 +39,8 @@ import com.intellij.ui.HyperlinkLabel; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.JBColor; import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBLayeredPane; +import com.intellij.ui.components.JBLabel; import com.intellij.util.ArrayUtilRt; import com.intellij.util.ThrowableRunnable; import com.intellij.util.containers.FixedHashMap; @@ -1021,12 +1021,8 @@ public abstract class DesignerEditorPanel extends JPanel } private final class MyLayeredPane extends JBLayeredPane implements Scrollable { - @Override - public void doLayout() { - for (int i = getComponentCount() - 1; i >= 0; i--) { - Component component = getComponent(i); - component.setBounds(0, 0, getWidth(), getHeight()); - } + private MyLayeredPane() { + setFullOverlayLayout(true); } @Override diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java index 7e5229a3bb54..a33ee312c506 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java @@ -1020,15 +1020,8 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade } private final class MyLayeredPane extends JBLayeredPane implements Scrollable { - /** - * All components allocate whole pane's area. - */ - @Override - public void doLayout() { - for (int i = getComponentCount() - 1; i >= 0; i--) { - final Component component = getComponent(i); - component.setBounds(0, 0, getWidth(), getHeight()); - } + private MyLayeredPane() { + setFullOverlayLayout(true); // All components allocate whole pane's area. } @Override