diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/SimpleFocusBorder.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/SimpleFocusBorder.kt index 9d6272f83363..d7e947be4bb4 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/SimpleFocusBorder.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/SimpleFocusBorder.kt @@ -2,8 +2,6 @@ package com.intellij.collaboration.ui import com.intellij.ide.ui.laf.darcula.DarculaUIUtil -import com.intellij.ui.scale.JBUIScale -import com.intellij.util.ui.UIUtil import java.awt.Component import java.awt.Graphics import java.awt.Graphics2D @@ -18,10 +16,8 @@ internal class SimpleFocusBorder : Border { } override fun getBorderInsets(c: Component): Insets { - val bw = if (UIUtil.isUnderDefaultMacTheme()) JBUIScale.scale(3).toFloat() else DarculaUIUtil.BW.float - val g = c.graphics - val f = if (g is Graphics2D && UIUtil.isRetina(g)) 0.5f else 1.0f - val lw = if (UIUtil.isUnderDefaultMacTheme()) JBUIScale.scale(f) else DarculaUIUtil.LW.float + val bw = DarculaUIUtil.BW.float + val lw = DarculaUIUtil.LW.float val insets = (bw + lw).toInt() return Insets(insets, insets, insets, insets) } 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 44005c1d6e4c..c635bedbc68c 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.kt +++ b/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.kt @@ -16,13 +16,33 @@ import com.intellij.ui.components.JBLayeredPane import com.intellij.ui.components.panels.NonOpaquePanel import com.intellij.ui.components.panels.VerticalLayout import com.intellij.util.animation.FloatConsumer -import com.intellij.util.ui.* -import kotlinx.coroutines.* +import com.intellij.util.ui.AnimatedIcon +import com.intellij.util.ui.Animator +import com.intellij.util.ui.AsyncProcessIcon +import com.intellij.util.ui.GraphicsUtil +import com.intellij.util.ui.ImageUtil +import com.intellij.util.ui.JBUI +import com.intellij.util.ui.StartupUiUtil +import com.intellij.util.ui.UIUtil +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.jetbrains.annotations.ApiStatus.Internal import org.jetbrains.annotations.Nls -import java.awt.* +import java.awt.AlphaComposite +import java.awt.Color +import java.awt.Dimension +import java.awt.Graphics +import java.awt.Graphics2D +import java.awt.GridBagLayout import java.awt.image.BufferedImage -import javax.swing.* +import javax.swing.JComponent +import javax.swing.JLabel +import javax.swing.JLayeredPane +import javax.swing.JPanel +import javax.swing.SwingConstants open class LoadingDecorator @JvmOverloads constructor( content: JComponent?, @@ -193,7 +213,7 @@ open class LoadingDecorator @JvmOverloads constructor( isVisible = true currentAlpha = -1f if (takeSnapshot && width > 0 && height > 0) { - snapshot = ImageUtil.createImage(graphics, width, height, BufferedImage.TYPE_INT_RGB) + snapshot = ImageUtil.createImage(GraphicsUtil.safelyGetGraphics(this), width, height, BufferedImage.TYPE_INT_RGB) val g = snapshot!!.createGraphics() pane.paint(g) val opaque = UIUtil.findNearestOpaque(this) diff --git a/platform/platform-api/src/com/intellij/ui/components/ZoomingDelegate.java b/platform/platform-api/src/com/intellij/ui/components/ZoomingDelegate.java index 96578d2baed3..6ffe67b75f4a 100644 --- a/platform/platform-api/src/com/intellij/ui/components/ZoomingDelegate.java +++ b/platform/platform-api/src/com/intellij/ui/components/ZoomingDelegate.java @@ -2,12 +2,19 @@ package com.intellij.ui.components; import com.intellij.ui.ComponentUtil; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.ImageUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import javax.swing.*; -import java.awt.*; +import javax.swing.JComponent; +import javax.swing.JScrollBar; +import javax.swing.JScrollPane; +import javax.swing.SwingUtilities; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; import java.awt.image.BufferedImage; public class ZoomingDelegate { @@ -96,7 +103,7 @@ public class ZoomingDelegate { if (bounds.width <= 0 || bounds.height <= 0) return; BufferedImage image = - ImageUtil.createImage(myViewportComponent.getGraphics(), bounds.width, bounds.height, BufferedImage.TYPE_INT_RGB); + ImageUtil.createImage(GraphicsUtil.safelyGetGraphics(myViewportComponent), bounds.width, bounds.height, BufferedImage.TYPE_INT_RGB); Graphics graphics = image.getGraphics(); graphics.setClip(0, 0, bounds.width, bounds.height); diff --git a/platform/platform-impl/internal/src/com/intellij/internal/focus/FocusDebuggerAction.java b/platform/platform-impl/internal/src/com/intellij/internal/focus/FocusDebuggerAction.java index 2897210e5295..796222d01df4 100644 --- a/platform/platform-impl/internal/src/com/intellij/internal/focus/FocusDebuggerAction.java +++ b/platform/platform-impl/internal/src/com/intellij/internal/focus/FocusDebuggerAction.java @@ -14,6 +14,7 @@ import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.wm.IdeFrame; import com.intellij.ui.JBColor; import com.intellij.ui.scale.JBUIScale; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -131,7 +132,7 @@ final class FocusDebuggerAction extends AnAction implements DumbAware { private void paintFocusBorders(boolean clean) { if (myCurrent != null) { - Graphics graphics = myCurrent.getGraphics(); + Graphics graphics = GraphicsUtil.safelyGetGraphics(myCurrent); Graphics2D currentFocusGraphics = (Graphics2D)(graphics != null ? graphics.create() : null); try { if (currentFocusGraphics != null) { @@ -150,7 +151,8 @@ final class FocusDebuggerAction extends AnAction implements DumbAware { if (currentFocusGraphics != null) currentFocusGraphics.dispose(); } if (myPrevious != null) { - Graphics2D previousFocusGraphics = (Graphics2D)(myPrevious.getGraphics() != null ? myPrevious.getGraphics().create() : null); + Graphics prior = GraphicsUtil.safelyGetGraphics(myPrevious); + Graphics2D previousFocusGraphics = (Graphics2D)(prior != null ? prior.create() : null); try { if (previousFocusGraphics != null) { if (clean) { diff --git a/platform/platform-impl/internal/src/com/intellij/internal/focus/FocusTracesDialog.java b/platform/platform-impl/internal/src/com/intellij/internal/focus/FocusTracesDialog.java index fe948bf86a16..426b6d6238f5 100644 --- a/platform/platform-impl/internal/src/com/intellij/internal/focus/FocusTracesDialog.java +++ b/platform/platform-impl/internal/src/com/intellij/internal/focus/FocusTracesDialog.java @@ -15,6 +15,7 @@ import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.scale.JBUIScale; import com.intellij.ui.table.JBTable; import com.intellij.util.ExceptionUtil; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -23,7 +24,10 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumnModel; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.text.SimpleDateFormat; @@ -173,7 +177,7 @@ public final class FocusTracesDialog extends DialogWrapper { } prev = info.component.get(); if (prev != null && prev.isDisplayable()) { - final Graphics g = prev.getGraphics(); + final Graphics g = GraphicsUtil.safelyGetGraphics(prev); g.setColor(JBColor.RED); final Dimension sz = prev.getSize(); UIUtil.drawDottedRectangle(g, 1, 1, sz.width - 2, sz.height - 2); diff --git a/platform/platform-impl/internal/src/com/intellij/internal/focus/Util.java b/platform/platform-impl/internal/src/com/intellij/internal/focus/Util.java index 85734eeaa693..e840c7b39a1f 100644 --- a/platform/platform-impl/internal/src/com/intellij/internal/focus/Util.java +++ b/platform/platform-impl/internal/src/com/intellij/internal/focus/Util.java @@ -1,8 +1,13 @@ // Copyright 2000-2020 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.internal.focus; -import javax.swing.*; -import java.awt.*; +import com.intellij.util.ui.GraphicsUtil; + +import javax.swing.JFrame; +import javax.swing.RootPaneContainer; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.Graphics2D; import java.util.Arrays; import java.util.function.Consumer; @@ -17,7 +22,7 @@ public final class Util { filter(f -> f.getGlassPane() != null). filter(window -> window.getRootPane() != null). map(window -> (window).getGlassPane()). - map(jGlassPane -> jGlassPane.getGraphics()). + map(jGlassPane -> GraphicsUtil.safelyGetGraphics(jGlassPane)). filter(g -> g != null). forEach(graphics -> { Graphics glassPaneGraphics = graphics.create(); diff --git a/platform/platform-impl/src/com/intellij/ide/actions/SwitcherRendering.kt b/platform/platform-impl/src/com/intellij/ide/actions/SwitcherRendering.kt index d0c621b9ffbd..97a8d78dc273 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/SwitcherRendering.kt +++ b/platform/platform-impl/src/com/intellij/ide/actions/SwitcherRendering.kt @@ -20,13 +20,19 @@ import com.intellij.openapi.wm.ex.ToolWindowManagerEx import com.intellij.openapi.wm.impl.ToolWindowManagerImpl import com.intellij.problems.WolfTheProblemSolver import com.intellij.toolWindow.ToolWindowEventSource -import com.intellij.ui.* +import com.intellij.ui.BackgroundSupplier +import com.intellij.ui.CellRendererPanel +import com.intellij.ui.ExperimentalUI +import com.intellij.ui.JBColor +import com.intellij.ui.SimpleColoredComponent +import com.intellij.ui.SimpleTextAttributes import com.intellij.ui.paint.PaintUtil import com.intellij.ui.render.RenderingUtil import com.intellij.ui.speedSearch.SpeedSearchUtil.applySpeedSearchHighlighting import com.intellij.util.IconUtil import com.intellij.util.ui.EmptyIcon import com.intellij.util.ui.JBUI +import com.intellij.util.ui.UIUtil import org.jetbrains.annotations.ApiStatus.Internal import org.jetbrains.annotations.Nls import java.awt.BorderLayout @@ -165,9 +171,8 @@ class SwitcherVirtualFile( } component.append(mainText, SimpleTextAttributes(style, foreground, effectColor)) component.font?.let { - val fontMetrics = component.getFontMetrics(it) - val mainTextWidth = PaintUtil.getStringWidth(mainText, component.graphics, fontMetrics) - val shortcutTextWidth = shortcutText?.let { PaintUtil.getStringWidth(it, component.graphics, fontMetrics) } ?: 0 + val mainTextWidth = UIUtil.computeStringWidth(component, mainText) + val shortcutTextWidth = shortcutText?.let { UIUtil.computeStringWidth(component, it) } ?: 0 val width = component.width - mainTextWidth - shortcutTextWidth - component.iconTextGap - component.icon.iconWidth - component.insets.left - component.insets.right if (width <= 0) return@let null diff --git a/platform/platform-impl/src/com/intellij/ide/trustedProjects/impl/TrustedProjectsStartupDialog.kt b/platform/platform-impl/src/com/intellij/ide/trustedProjects/impl/TrustedProjectsStartupDialog.kt index 43ed11dbd51e..dbd5138a8352 100644 --- a/platform/platform-impl/src/com/intellij/ide/trustedProjects/impl/TrustedProjectsStartupDialog.kt +++ b/platform/platform-impl/src/com/intellij/ide/trustedProjects/impl/TrustedProjectsStartupDialog.kt @@ -20,8 +20,14 @@ import com.intellij.ui.MouseDragHelper import com.intellij.ui.PopupBorder import com.intellij.ui.WindowRoundedCornersManager import com.intellij.ui.components.JBCheckBox -import com.intellij.ui.dsl.builder.* +import com.intellij.ui.dsl.builder.AlignX +import com.intellij.ui.dsl.builder.AlignY +import com.intellij.ui.dsl.builder.Cell +import com.intellij.ui.dsl.builder.bindSelected +import com.intellij.ui.dsl.builder.panel +import com.intellij.ui.dsl.builder.plus import com.intellij.ui.util.width +import com.intellij.util.ui.GraphicsUtil import com.intellij.util.ui.JBFont import com.intellij.util.ui.JBUI import com.intellij.util.ui.UIUtil @@ -30,7 +36,13 @@ import java.awt.event.ActionEvent import java.awt.event.MouseAdapter import java.awt.event.MouseEvent import java.nio.file.Path -import javax.swing.* +import javax.swing.AbstractAction +import javax.swing.Action +import javax.swing.JButton +import javax.swing.JComponent +import javax.swing.JPanel +import javax.swing.JRootPane +import javax.swing.SwingUtilities import javax.swing.border.Border import javax.swing.text.View import kotlin.io.path.name @@ -191,7 +203,7 @@ internal class TrustedProjectsStartupDialog( val text = htmlDocument?.getText(0, htmlDocument.length)?.replace("\n", "") ?: textWithMarkedElements val fontMetrics = checkBox.getFontMetrics(checkBox.font) - val bounds = fontMetrics.getStringBounds(text, checkBox.graphics) + val bounds = fontMetrics.getStringBounds(text, GraphicsUtil.safelyGetGraphics(checkBox)) val x = checkBox.width - bounds.width - checkBox.insets.width bounds.setRect(x + bounds.x, bounds.y, bounds.width, bounds.height) val mousePosition = position.x - x diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/ToolbarComboButtonUI.kt b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/ToolbarComboButtonUI.kt index c979c941ef10..624eda292a18 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/ToolbarComboButtonUI.kt +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/ToolbarComboButtonUI.kt @@ -8,11 +8,17 @@ import com.intellij.openapi.wm.impl.AbstractToolbarCombo import com.intellij.openapi.wm.impl.ToolbarComboButton import com.intellij.ui.ClickListener import com.intellij.ui.hover.HoverListener -import com.intellij.ui.paint.PaintUtil import com.intellij.util.ui.GraphicsUtil import com.intellij.util.ui.JBInsets import com.intellij.util.ui.JBUI -import java.awt.* +import com.intellij.util.ui.UIUtil +import java.awt.Color +import java.awt.Component +import java.awt.Dimension +import java.awt.Graphics +import java.awt.Graphics2D +import java.awt.Rectangle +import java.awt.RenderingHints import java.awt.event.ActionEvent import java.awt.event.ActionListener import java.awt.event.MouseEvent @@ -119,7 +125,7 @@ internal class ToolbarComboButtonUI: AbstractToolbarComboUI() { } val metrics = c.getFontMetrics(c.getFont()) val text = getText(combo) - result.width += PaintUtil.getStringWidth(text, c.graphics, metrics) + result.width += UIUtil.computeStringWidth(c, metrics, text) result.height = max(result.height, metrics.height) } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/ToolbarComboWidgetUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/ToolbarComboWidgetUI.java index ca930445c38e..43588eea112a 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/ToolbarComboWidgetUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/ToolbarComboWidgetUI.java @@ -10,7 +10,6 @@ import com.intellij.openapi.wm.impl.TextCutStrategy; import com.intellij.openapi.wm.impl.ToolbarComboWidget; import com.intellij.ui.ClickListener; import com.intellij.ui.JBColor; -import com.intellij.ui.paint.PaintUtil; import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.JBEmptyBorder; import com.intellij.util.ui.JBUI; @@ -310,7 +309,7 @@ public final class ToolbarComboWidgetUI extends ComponentUI implements PropertyC if (!StringUtil.isEmpty(combo.getText())) { FontMetrics metrics = c.getFontMetrics(c.getFont()); String text = getText(combo); - res.width += PaintUtil.getStringWidth(text, c.getGraphics(), metrics); + res.width += UIUtil.computeStringWidth(c, metrics, text); res.height = Math.max(res.height, metrics.getHeight()); skipNextGap = false; } diff --git a/platform/platform-impl/src/com/intellij/openapi/progress/util/PotemkinOverlayProgress.java b/platform/platform-impl/src/com/intellij/openapi/progress/util/PotemkinOverlayProgress.java index 9000cbf37fe8..f311dd516626 100644 --- a/platform/platform-impl/src/com/intellij/openapi/progress/util/PotemkinOverlayProgress.java +++ b/platform/platform-impl/src/com/intellij/openapi/progress/util/PotemkinOverlayProgress.java @@ -24,8 +24,13 @@ import org.jetbrains.annotations.ApiStatus.Obsolete; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; -import java.awt.*; +import javax.swing.JRootPane; +import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Rectangle; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; @@ -144,7 +149,7 @@ public final class PotemkinOverlayProgress extends AbstractProgressIndicatorBase String text = KeymapUtil.getShortcutText(CANCEL_SHORTCUT) + " to cancel, " + KeymapUtil.getShortcutText(DUMP_SHORTCUT) + " to dump threads (" + NlsMessages.formatDurationApproximateNarrow(roundedDuration) + ")"; - Graphics graphics = rootPane.getGraphics(); + Graphics graphics = GraphicsUtil.safelyGetGraphics(rootPane); GraphicsUtil.setupAAPainting(graphics); Rectangle viewR = rootPane.getBounds(), iconR = new Rectangle(), textR = new Rectangle(); FontMetrics fm = graphics.getFontMetrics(); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/FloatingDecorator.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/FloatingDecorator.java index 9e32fe1dcd9c..1dbf845fbdf4 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/FloatingDecorator.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/FloatingDecorator.java @@ -19,6 +19,7 @@ import com.intellij.ui.paint.LinePainter2D; import com.intellij.util.Alarm; import com.intellij.util.MathUtil; import com.intellij.util.SingleEdtTaskScheduler; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.JBInsets; import kotlin.Unit; import org.jetbrains.annotations.ApiStatus; @@ -156,7 +157,8 @@ public final class FloatingDecorator extends JDialog implements FloatingDecorato } // this prevents annoying flick - paint(getGraphics()); + // todo: do we really need this? + paint(GraphicsUtil.safelyGetGraphics(this)); ApplicationManager.getApplication().getMessageBus().connect(disposable).subscribe(UISettingsListener.TOPIC, uiSettingsListener); } diff --git a/platform/platform-impl/src/com/intellij/ui/layout/migLayout/patched/SwingComponentWrapper.kt b/platform/platform-impl/src/com/intellij/ui/layout/migLayout/patched/SwingComponentWrapper.kt index 853bf9f9b5ef..57943983030e 100755 --- a/platform/platform-impl/src/com/intellij/ui/layout/migLayout/patched/SwingComponentWrapper.kt +++ b/platform/platform-impl/src/com/intellij/ui/layout/migLayout/patched/SwingComponentWrapper.kt @@ -36,11 +36,16 @@ package com.intellij.ui.layout.migLayout.patched import com.intellij.ide.ui.laf.VisualPaddingsProvider import com.intellij.openapi.ui.ComponentWithBrowseButton import com.intellij.util.ThreeState +import com.intellij.util.ui.GraphicsUtil import net.miginfocom.layout.ComponentWrapper import net.miginfocom.layout.ContainerWrapper import net.miginfocom.layout.LayoutUtil import net.miginfocom.layout.PlatformDefaults -import java.awt.* +import java.awt.BasicStroke +import java.awt.Color +import java.awt.Graphics2D +import java.awt.HeadlessException +import java.awt.Point import javax.swing.JComponent import javax.swing.JEditorPane import javax.swing.JTextArea @@ -233,7 +238,7 @@ internal open class SwingComponentWrapper(private val c: JComponent) : Component return } - val g = c.graphics as? Graphics2D ?: return + val g = GraphicsUtil.safelyGetGraphics(c) as? Graphics2D ?: return g.paint = DB_COMP_OUTLINE g.stroke = BasicStroke(1f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, 10f, floatArrayOf(2f, 4f), 0f) diff --git a/platform/platform-impl/src/com/intellij/ui/layout/migLayout/patched/SwingContainerWrapper.kt b/platform/platform-impl/src/com/intellij/ui/layout/migLayout/patched/SwingContainerWrapper.kt index 464197329c64..d2ff2088c98c 100755 --- a/platform/platform-impl/src/com/intellij/ui/layout/migLayout/patched/SwingContainerWrapper.kt +++ b/platform/platform-impl/src/com/intellij/ui/layout/migLayout/patched/SwingContainerWrapper.kt @@ -35,6 +35,7 @@ package com.intellij.ui.layout.migLayout.patched * Date: 2006-sep-08 */ +import com.intellij.util.ui.GraphicsUtil import net.miginfocom.layout.ComponentWrapper import net.miginfocom.layout.ContainerWrapper import java.awt.BasicStroke @@ -68,7 +69,7 @@ internal class SwingContainerWrapper(c: JComponent) : SwingComponentWrapper(c), return } - val g = c.graphics as? Graphics2D ?: return + val g = GraphicsUtil.safelyGetGraphics(c) as? Graphics2D ?: return g.stroke = BasicStroke(1f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, 10f, floatArrayOf(2f, 3f), 0f) g.paint = DB_CELL_OUTLINE diff --git a/platform/recentFiles/frontend/src/com/intellij/platform/recentFiles/frontend/SwitcherRendering.kt b/platform/recentFiles/frontend/src/com/intellij/platform/recentFiles/frontend/SwitcherRendering.kt index 1fb139cc4870..b9f57dac524f 100644 --- a/platform/recentFiles/frontend/src/com/intellij/platform/recentFiles/frontend/SwitcherRendering.kt +++ b/platform/recentFiles/frontend/src/com/intellij/platform/recentFiles/frontend/SwitcherRendering.kt @@ -17,13 +17,19 @@ import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.wm.ToolWindow import com.intellij.platform.recentFiles.shared.SwitcherRpcDto -import com.intellij.ui.* +import com.intellij.ui.BackgroundSupplier +import com.intellij.ui.CellRendererPanel +import com.intellij.ui.ExperimentalUI +import com.intellij.ui.JBColor +import com.intellij.ui.SimpleColoredComponent +import com.intellij.ui.SimpleTextAttributes import com.intellij.ui.paint.PaintUtil import com.intellij.ui.render.RenderingUtil import com.intellij.ui.speedSearch.SpeedSearchUtil.applySpeedSearchHighlighting import com.intellij.util.IconUtil import com.intellij.util.ui.EmptyIcon import com.intellij.util.ui.JBUI +import com.intellij.util.ui.UIUtil import org.jetbrains.annotations.ApiStatus.Internal import java.awt.BorderLayout import java.awt.Color @@ -174,8 +180,8 @@ class SwitcherVirtualFile : SwitcherListItem, BackgroundSupplier { component.append(mainText, SimpleTextAttributes(style, foreground, effectColor)) component.font?.let { val fontMetrics = component.getFontMetrics(it) - val mainTextWidth = PaintUtil.getStringWidth(mainText, component.graphics, fontMetrics) - val shortcutTextWidth = shortcutText?.let { shortcut -> PaintUtil.getStringWidth(shortcut, component.graphics, fontMetrics) } ?: 0 + val mainTextWidth = UIUtil.computeStringWidth(component, fontMetrics, mainText) + val shortcutTextWidth = shortcutText?.let { shortcut -> UIUtil.computeStringWidth(component, fontMetrics, shortcut) } ?: 0 val iconWidth = component.icon?.iconWidth ?: AllIcons.FileTypes.Text.iconWidth val width = component.width - mainTextWidth - shortcutTextWidth - component.iconTextGap - iconWidth - component.insets.left - component.insets.right diff --git a/platform/util/ui/src/com/intellij/ui/paint/PaintUtil.java b/platform/util/ui/src/com/intellij/ui/paint/PaintUtil.java index d34fffec03e6..3b9b519b8bda 100644 --- a/platform/util/ui/src/com/intellij/ui/paint/PaintUtil.java +++ b/platform/util/ui/src/com/intellij/ui/paint/PaintUtil.java @@ -13,7 +13,8 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; +import javax.swing.JComponent; +import javax.swing.JRootPane; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; @@ -424,11 +425,14 @@ public final class PaintUtil { * @param g The Graphics context used for rendering the text. * @param metrics The FontMetrics object associated with the font used for rendering the text. * @return The width of the text string in pixels when drawn using the specified Graphics context and FontMetrics. + + * @deprecated Prefer using {@link UIUtil#computeStringWidth(JComponent, String)} instead */ + @Deprecated(forRemoval = true) public static int getStringWidth(String text, Graphics g, FontMetrics metrics) { return metrics.getStringBounds(text, g).getBounds().width; } - + @ApiStatus.Internal @Contract("!null, _, _ -> !null") public static @Nullable String cutContainerText(@Nullable String text, int maxWidth, @NotNull JComponent component) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/history/SvnHistoryProvider.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/history/SvnHistoryProvider.java index a1dda0d34930..a25e8494bc61 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/history/SvnHistoryProvider.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/history/SvnHistoryProvider.java @@ -42,7 +42,10 @@ import org.jetbrains.idea.svn.info.Info; import javax.swing.*; import javax.swing.table.TableCellRenderer; -import java.awt.*; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.FontMetrics; +import java.awt.Graphics; import java.awt.event.MouseEvent; import java.util.Collections; import java.util.Date; @@ -750,16 +753,15 @@ public class SvnHistoryProvider implements VcsHistoryProvider, VcsCacheableHisto private @Nls @NotNull String cutString(@Nls @NotNull String text, double maxWidth) { FontMetrics m = getFontMetrics(getFont()); - Graphics g = getGraphics(); String suffix = ELLIPSIS; - if (m.getStringBounds(text, g).getWidth() < maxWidth) return text; + if (UIUtil.computeStringWidth(this, m, text) < maxWidth) return text; - double suffixWidth = m.getStringBounds(suffix, g).getWidth(); + double suffixWidth = UIUtil.computeStringWidth(this, m, suffix); if (suffixWidth >= maxWidth) return suffix; for (int i = 1; i < text.length(); i++) { - if ((m.getStringBounds(text, 0, i, g).getWidth() + suffixWidth) >= maxWidth) { + if ((UIUtil.computeStringWidth(this, m, text) + suffixWidth) >= maxWidth) { return text.substring(0, i - 1) + suffix; } }