diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/side/DiffContentPanel.java b/platform/diff-impl/src/com/intellij/diff/tools/util/side/DiffContentPanel.java index 6b5accef623a..d124cbc53c8d 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/side/DiffContentPanel.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/side/DiffContentPanel.java @@ -121,7 +121,7 @@ class DiffContentPanel extends JPanel { totalHeight += size.height; if (component == myTitle && size.height != 0) { - totalHeight += DiffUtil.TITLE_GAP; + totalHeight += DiffUtil.TITLE_GAP.get(); } } @@ -142,7 +142,7 @@ class DiffContentPanel extends JPanel { myTitle.setBounds(0, y, width, titleSize.height); y += titleSize.height; - if (titleSize.height != 0) y += DiffUtil.TITLE_GAP; + if (titleSize.height != 0) y += DiffUtil.TITLE_GAP.get(); myTopBreadcrumbs.setBounds(0, y, width, topSize.height); y += topSize.height; diff --git a/platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java b/platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java index 3257599f5622..104750768b92 100644 --- a/platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java +++ b/platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java @@ -87,12 +87,13 @@ import com.intellij.testFramework.LightVirtualFile; import com.intellij.ui.*; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.components.JBLabel; -import com.intellij.ui.scale.JBUIScale; +import com.intellij.ui.components.panels.VerticalLayout; import com.intellij.util.*; import com.intellij.util.concurrency.annotations.RequiresEdt; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Convertor; import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.JBValue; import com.intellij.util.ui.SingleComponentCenteringLayout; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.components.BorderLayoutPanel; @@ -118,7 +119,7 @@ public final class DiffUtil { public static final Key TEMP_FILE_KEY = Key.create("Diff.TempFile"); @NotNull @NonNls public static final String DIFF_CONFIG = "diff.xml"; - public static final int TITLE_GAP = JBUIScale.scale(2); + public static final JBValue TITLE_GAP = new JBValue.Float(2); public static final NotNullLazyValue> DIFF_FRAME_ICONS = NotNullLazyValue.createValue(() -> { return Arrays.asList( @@ -695,8 +696,8 @@ public final class DiffUtil { } @NotNull - public static JComponent createStackedComponents(@NotNull List components, int vGap) { - JPanel panel = new JPanel(new VerticalStackLayout(vGap)); + public static JComponent createStackedComponents(@NotNull List components, @NotNull JBValue vGap) { + JPanel panel = new JPanel(new VerticalLayout(vGap, VerticalLayout.FILL)); for (JComponent component : components) { panel.add(component); } diff --git a/platform/diff-impl/src/com/intellij/diff/util/VerticalStackLayout.java b/platform/diff-impl/src/com/intellij/diff/util/VerticalStackLayout.java deleted file mode 100644 index f814ab0d1c1a..000000000000 --- a/platform/diff-impl/src/com/intellij/diff/util/VerticalStackLayout.java +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.diff.util; - -import com.intellij.util.ui.AbstractLayoutManager; -import com.intellij.util.ui.JBUI; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.*; - -class VerticalStackLayout extends AbstractLayoutManager { - private final int myVGap; - - VerticalStackLayout(int vGap) { - myVGap = vGap; - } - - @Override - public Dimension preferredLayoutSize(Container parent) { - int totalWidth = 0; - int totalHeight = 0; - - for (Component component : parent.getComponents()) { - Dimension size = getPreferredSize(component); - - totalWidth = Math.max(size.width, totalWidth); - if (size.height != 0 && totalHeight != 0) totalHeight += myVGap; - totalHeight += size.height; - } - - return new Dimension(totalWidth, totalHeight); - } - - @Override - public void layoutContainer(@NotNull Container parent) { - int width = parent.getWidth(); - - int y = 0; - for (Component component : parent.getComponents()) { - Dimension size = getPreferredSize(component); - - component.setBounds(0, y, width, size.height); - if (size.height != 0) y += myVGap; - y += size.height; - } - } - - @NotNull - private static Dimension getPreferredSize(@NotNull Component component) { - return component.isVisible() ? component.getPreferredSize() : new Dimension(); - } -} diff --git a/platform/platform-api/src/com/intellij/ui/components/panels/HorizontalLayout.java b/platform/platform-api/src/com/intellij/ui/components/panels/HorizontalLayout.java index 20f4a77c8304..7362532a82db 100644 --- a/platform/platform-api/src/com/intellij/ui/components/panels/HorizontalLayout.java +++ b/platform/platform-api/src/com/intellij/ui/components/panels/HorizontalLayout.java @@ -2,7 +2,8 @@ package com.intellij.ui.components.panels; import com.intellij.util.ui.JBInsets; -import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.JBValue; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; @@ -19,6 +20,7 @@ import java.util.List; * @see VerticalLayout */ public final class HorizontalLayout implements LayoutManager2 { + public static final int FILL = -1; public static final String LEFT = "LEFT"; public static final String RIGHT = "RIGHT"; public static final String CENTER = "CENTER"; @@ -27,7 +29,7 @@ public final class HorizontalLayout implements LayoutManager2 { private final ArrayList myRight = new ArrayList<>(); private final ArrayList myCenter = new ArrayList<>(); private final int myAlignment; - private final int myGap; + private final JBValue myGap; /** * Creates a layout with the specified gap. @@ -35,11 +37,10 @@ public final class HorizontalLayout implements LayoutManager2 { * but their heights will be set according to the container. * The gap will be scaled automatically. * - * @param gap horizontal gap between components + * @param gap horizontal gap between components, without DPI scaling */ public HorizontalLayout(int gap) { - myGap = gap; - myAlignment = -1; + this(gap, FILL); } /** @@ -47,16 +48,20 @@ public final class HorizontalLayout implements LayoutManager2 { * All components will have preferred sizes. * The gap will be scaled automatically. * - * @param gap horizontal gap between components + * @param gap horizontal gap between components, without DPI scaling * @param alignment vertical alignment for components - * * @see SwingConstants#TOP * @see SwingConstants#BOTTOM * @see SwingConstants#CENTER */ public HorizontalLayout(int gap, int alignment) { + this(new JBValue.Float(Math.max(0, gap)), alignment); + } + + public HorizontalLayout(@NotNull JBValue gap, int alignment) { myGap = gap; switch (alignment) { + case FILL: case SwingConstants.TOP: case SwingConstants.BOTTOM: case SwingConstants.CENTER: @@ -133,7 +138,7 @@ public final class HorizontalLayout implements LayoutManager2 { @Override public void layoutContainer(Container container) { - int gap = myGap <= 0 ? 0 : JBUI.scale(myGap); + int gap = myGap.get(); synchronized (container.getTreeLock()) { Dimension left = getPreferredSize(myLeft); Dimension right = getPreferredSize(myRight); @@ -177,12 +182,12 @@ public final class HorizontalLayout implements LayoutManager2 { } private int layout(List list, int x, int height, Insets insets) { - int gap = myGap <= 0 ? 0 : JBUI.scale(myGap); + int gap = myGap.get(); for (Component component : list) { if (component.isVisible()) { Dimension size = component.getPreferredSize(); int y = 0; - if (myAlignment == -1) { + if (myAlignment == FILL) { size.height = height; } else if (myAlignment != SwingConstants.TOP) { @@ -213,7 +218,7 @@ public final class HorizontalLayout implements LayoutManager2 { } private Dimension getPreferredSize(List list) { - int gap = myGap <= 0 ? 0 : JBUI.scale(myGap); + int gap = myGap.get(); Dimension result = null; for (Component component : list) { if (component.isVisible()) { @@ -224,7 +229,7 @@ public final class HorizontalLayout implements LayoutManager2 { } private Dimension getPreferredSize(Container container, boolean aligned) { - int gap2 = myGap <= 0 ? 0 : 2 * JBUI.scale(myGap); + int gap2 = 2 * myGap.get(); synchronized (container.getTreeLock()) { Dimension left = getPreferredSize(myLeft); Dimension right = getPreferredSize(myRight); diff --git a/platform/platform-api/src/com/intellij/ui/components/panels/VerticalLayout.java b/platform/platform-api/src/com/intellij/ui/components/panels/VerticalLayout.java index d7ca5f7c5290..1063b1eefdbb 100644 --- a/platform/platform-api/src/com/intellij/ui/components/panels/VerticalLayout.java +++ b/platform/platform-api/src/com/intellij/ui/components/panels/VerticalLayout.java @@ -2,7 +2,8 @@ package com.intellij.ui.components.panels; import com.intellij.util.ui.JBInsets; -import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.JBValue; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; @@ -19,6 +20,7 @@ import java.util.List; * @see HorizontalLayout */ public final class VerticalLayout implements LayoutManager2 { + public static final int FILL = -1; public static final String TOP = "TOP"; public static final String BOTTOM = "BOTTOM"; public static final String CENTER = "CENTER"; @@ -27,7 +29,7 @@ public final class VerticalLayout implements LayoutManager2 { private final ArrayList myBottom = new ArrayList<>(); private final ArrayList myCenter = new ArrayList<>(); private final int myAlignment; - private final int myGap; + private final JBValue myGap; /** * Creates a layout with the specified gap. @@ -35,11 +37,10 @@ public final class VerticalLayout implements LayoutManager2 { * but their widths will be set according to the container. * The gap will be scaled automatically. * - * @param gap vertical gap between components + * @param gap vertical gap between components, without DPI scaling */ public VerticalLayout(int gap) { - myGap = gap; - myAlignment = -1; + this(gap, FILL); } /** @@ -47,16 +48,20 @@ public final class VerticalLayout implements LayoutManager2 { * All components will have preferred sizes. * The gap will be scaled automatically. * - * @param gap vertical gap between components + * @param gap vertical gap between components, without DPI scaling * @param alignment horizontal alignment for components - * * @see SwingConstants#LEFT * @see SwingConstants#RIGHT * @see SwingConstants#CENTER */ public VerticalLayout(int gap, int alignment) { + this(new JBValue.Float(Math.max(0, gap)), alignment); + } + + public VerticalLayout(@NotNull JBValue gap, int alignment) { myGap = gap; switch (alignment) { + case FILL: case SwingConstants.LEFT: case SwingConstants.RIGHT: case SwingConstants.CENTER: @@ -133,7 +138,7 @@ public final class VerticalLayout implements LayoutManager2 { @Override public void layoutContainer(Container container) { - int gap = myGap <= 0 ? 0 : JBUI.scale(myGap); + int gap = myGap.get(); synchronized (container.getTreeLock()) { Dimension top = getPreferredSize(myTop); Dimension bottom = getPreferredSize(myBottom); @@ -177,12 +182,12 @@ public final class VerticalLayout implements LayoutManager2 { } private int layout(List list, int y, int width, Insets insets) { - int gap = myGap <= 0 ? 0 : JBUI.scale(myGap); + int gap = myGap.get(); for (Component component : list) { if (component.isVisible()) { Dimension size = component.getPreferredSize(); int x = 0; - if (myAlignment == -1) { + if (myAlignment == FILL) { size.width = width; } else if (myAlignment != SwingConstants.LEFT) { @@ -213,7 +218,7 @@ public final class VerticalLayout implements LayoutManager2 { } private Dimension getPreferredSize(List list) { - int gap = myGap <= 0 ? 0 : JBUI.scale(myGap); + int gap = myGap.get(); Dimension result = null; for (Component component : list) { if (component.isVisible()) { @@ -224,7 +229,7 @@ public final class VerticalLayout implements LayoutManager2 { } private Dimension getPreferredSize(Container container, boolean aligned) { - int gap2 = myGap <= 0 ? 0 : 2 * JBUI.scale(myGap); + int gap2 = 2 * myGap.get(); synchronized (container.getTreeLock()) { Dimension top = getPreferredSize(myTop); Dimension bottom = getPreferredSize(myBottom); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/tool/PatchDiffTool.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/tool/PatchDiffTool.java index ae875f3fb2d0..1f61c50ae819 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/tool/PatchDiffTool.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/tool/PatchDiffTool.java @@ -69,7 +69,7 @@ final class PatchDiffTool implements FrameDiffTool { myEditor = DiffUtil.createEditor(document, myProject, true, true); myPrevNextDifferenceIterable = new MyPrevNextDifferenceIterable(); - Wrapper editorPanel = new Wrapper(new BorderLayout(0, DiffUtil.TITLE_GAP), myEditor.getComponent()); + Wrapper editorPanel = new Wrapper(new BorderLayout(0, DiffUtil.TITLE_GAP.get()), myEditor.getComponent()); String panelTitle = request.getPanelTitle(); if (panelTitle != null) { editorPanel.add(DiffUtil.createTitle(panelTitle), BorderLayout.NORTH);