From d7d7fd53269f4650a00bcdbb1ed753eb4f875454 Mon Sep 17 00:00:00 2001 From: obo Date: Fri, 24 Mar 2023 20:03:35 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-92439=20mac=E4=B8=8B-=E5=B1=95=E5=BC=80?= =?UTF-8?q?=E6=94=B6=E8=B5=B7=E5=9B=BE=E6=A0=87=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/base/svg/SVGIcon.java | 17 ++++--- .../icontainer/UIEastResizableContainer.java | 12 ++--- .../gui/icontainer/UIResizableContainer.java | 44 +++++++++++++------ .../mainframe/EastRegionContainerPane.java | 12 ++--- .../com/fr/design/utils/SvgPaintUtils.java | 22 +++------- 5 files changed, 62 insertions(+), 45 deletions(-) diff --git a/designer-base/src/main/java/com/fr/base/svg/SVGIcon.java b/designer-base/src/main/java/com/fr/base/svg/SVGIcon.java index 172b10dac5..a15b2118d3 100644 --- a/designer-base/src/main/java/com/fr/base/svg/SVGIcon.java +++ b/designer-base/src/main/java/com/fr/base/svg/SVGIcon.java @@ -1,9 +1,12 @@ package com.fr.base.svg; +import com.fr.design.utils.SvgPaintWorker; import com.fr.general.IOUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.Icon; +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -34,10 +37,12 @@ public class SVGIcon implements Icon { public void paintIcon(Component c, Graphics g, int x, int y) { if (HI_DPI_SURPORT) { Graphics2D graphics = (Graphics2D) g.create(x, y, image.getWidth(null), image.getHeight(null)); - float scale = SYSTEM_SCALE; - graphics.scale(1 / scale, 1 / scale); - graphics.drawImage(image, 0, 0, null); - graphics.scale(1.0D, 1.0D); + new SvgPaintWorker(graphics) { + @Override + protected void doPrint() { + this.drawImage(image, 0, 0, null); + } + }.execute(); graphics.dispose(); } else { g.drawImage(image, x, y, null); diff --git a/designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java b/designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java index 2a9fcacb82..5029ccf98d 100644 --- a/designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java +++ b/designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java @@ -5,7 +5,7 @@ import com.fr.design.base.mode.DesignModeContext; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.utils.SvgPaintUtils; +import com.fr.design.utils.SvgPaintWorker; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.JComponent; @@ -18,7 +18,6 @@ import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.Image; import java.awt.LayoutManager; import java.awt.event.MouseAdapter; @@ -338,10 +337,13 @@ public class UIEastResizableContainer extends JPanel { button = UIConstants.DRAG_RIGHT_PRESS; } } - SvgPaintUtils.beforePaint((Graphics2D) g); //如果环境支持高清化,在调整缩放比例时绘制svg会影响到位置的变化,若图标无确定裁剪位置,则需要进行调整 - g.drawImage(button, SvgPaintUtils.calculatePositionX(10), SvgPaintUtils.calculatePositionY(7), null); - SvgPaintUtils.afterPaint((Graphics2D) g); + new SvgPaintWorker(g) { + @Override + protected void doPrint() { + this.drawImage(button, 10, 7, null); + } + }.execute(); } } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/gui/icontainer/UIResizableContainer.java b/designer-base/src/main/java/com/fr/design/gui/icontainer/UIResizableContainer.java index 44806b3bf9..ceaabe56e6 100644 --- a/designer-base/src/main/java/com/fr/design/gui/icontainer/UIResizableContainer.java +++ b/designer-base/src/main/java/com/fr/design/gui/icontainer/UIResizableContainer.java @@ -3,7 +3,7 @@ package com.fr.design.gui.icontainer; import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.utils.SvgPaintUtils; +import com.fr.design.utils.SvgPaintWorker; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.Constants; @@ -17,7 +17,6 @@ import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.Image; import java.awt.LayoutManager; import java.awt.event.MouseAdapter; @@ -422,12 +421,24 @@ public class UIResizableContainer extends JPanel { Image upButton = (upModel == UIConstants.MODEL_NORMAL ? UIConstants.DRAG_UP_NORMAL : UIConstants.DRAG_UP_PRESS); Image downButton = (downModel == UIConstants.MODEL_NORMAL ? UIConstants.DRAG_DOWN_NORMAL : UIConstants.DRAG_DOWN_PRESS); g.drawImage(UIConstants.DRAG_BAR_LIGHT, 0, 0, getWidth(), getHeight(), null); - SvgPaintUtils.beforePaint((Graphics2D) g); - //如果环境支持高清化,在调整缩放比例时绘制svg会影响到位置的变化,若图标无确定裁剪位置,则需要进行调整 - g.drawImage(UIConstants.DRAG_LINE, SvgPaintUtils.calculatePositionX((getWidth() - toolPaneHeight) / 2), SvgPaintUtils.calculatePositionY(3), null); - g.drawImage(upButton, ARROW_MARGIN, 0, null); - g.drawImage(downButton, SvgPaintUtils.calculatePositionX(getWidth() - toolPaneHeight - ARROW_MARGIN), 0, null); - SvgPaintUtils.afterPaint((Graphics2D) g); + new SvgPaintWorker(g) { + @Override + protected void doPrint() { + this.drawImage(UIConstants.DRAG_LINE, (getWidth() - toolPaneHeight) / 2, 3, null); + } + }.execute(); + new SvgPaintWorker(g) { + @Override + protected void doPrint() { + this.drawImage(upButton, ARROW_MARGIN, 0, null); + } + }.execute(); + new SvgPaintWorker(g) { + @Override + protected void doPrint() { + this.drawImage(downButton, (getWidth() - toolPaneHeight - ARROW_MARGIN), 0, null); + } + }.execute(); } } @@ -524,10 +535,12 @@ public class UIResizableContainer extends JPanel { button = UIConstants.DRAG_LEFT_PRESS; } } - SvgPaintUtils.beforePaint((Graphics2D) g); - //如果环境支持高清化,在调整缩放比例时绘制svg会影响到位置的变化,若图标无确定裁剪位置,则需要进行调整 - g.drawImage(button, SvgPaintUtils.calculatePositionX(-6), SvgPaintUtils.calculatePositionY(ARROW_MARGIN_VERTICAL), this); - SvgPaintUtils.afterPaint((Graphics2D) g); + new SvgPaintWorker(g) { + @Override + protected void doPrint() { + this.drawImage(button, -6, ARROW_MARGIN_VERTICAL, VerticalToolPane.this); + } + }.execute(); } else { g.drawImage(UIConstants.DRAG_BAR_LIGHT, 0, 0, toolPaneHeight, getHeight(), null); if (containerWidth == toolPaneHeight) { @@ -543,7 +556,12 @@ public class UIResizableContainer extends JPanel { button = UIConstants.DRAG_RIGHT_PRESS; } } - g.drawImage(button, SvgPaintUtils.calculatePositionX(10), ARROW_MARGIN_VERTICAL, this); + new SvgPaintWorker(g) { + @Override + protected void doPrint() { + this.drawImage(button, 10, ARROW_MARGIN_VERTICAL, VerticalToolPane.this); + } + }.execute(); } if (isLeftRightDragEnabled) { g.drawImage(UIConstants.DRAG_DOT_VERTICAL, 2, getHeight() / 2, 5, toolPaneHeight, null); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index b460e1e31d..858e76048d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -19,7 +19,7 @@ import com.fr.design.notification.SnapChat; import com.fr.design.notification.SnapChatFactory; import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.DesignUtils; -import com.fr.design.utils.SvgPaintUtils; +import com.fr.design.utils.SvgPaintWorker; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.log.FineLoggerFactory; @@ -1314,10 +1314,12 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } else { button = UIConstants.POP_BUTTON_UP; } - SvgPaintUtils.beforePaint((Graphics2D) g); - //如果环境支持高清化,在调整缩放比例时绘制svg会影响到位置的变化,若图标无确定裁剪位置,则需要进行调整 - g.drawImage(button, SvgPaintUtils.calculatePositionX(ARROW_RANGE_START + 8), SvgPaintUtils.calculatePositionY(4), null); - SvgPaintUtils.afterPaint((Graphics2D) g); + new SvgPaintWorker(g) { + @Override + protected void doPrint() { + this.drawImage(button, (ARROW_RANGE_START + 8), 4, null); + } + }.execute(); } } diff --git a/designer-base/src/main/java/com/fr/design/utils/SvgPaintUtils.java b/designer-base/src/main/java/com/fr/design/utils/SvgPaintUtils.java index 85e34caba2..507768a047 100644 --- a/designer-base/src/main/java/com/fr/design/utils/SvgPaintUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/SvgPaintUtils.java @@ -24,26 +24,16 @@ public class SvgPaintUtils { public static void afterPaint(Graphics2D g2) { if (HI_DPI_ENABLED) { - g2.scale(1.0D, 1.0D); + g2.scale(SVGLoader.SYSTEM_SCALE, SVGLoader.SYSTEM_SCALE); } } /** - * 计算高缩放下绘制svg图标时新的的位置x - * @param x 旧x的值 - * @return 新的x值 + * 计算高缩放下绘制svg图标时新的的位置x,y + * @param position 旧坐标的值 + * @return 新的position值 * */ - public static int calculatePositionX(int x) { - return HI_DPI_ENABLED ? (int) (x * SVGLoader.SYSTEM_SCALE) : x; + public static int calculatePosition(int position) { + return HI_DPI_ENABLED ? (int) (position * SVGLoader.SYSTEM_SCALE) : position; } - - /** - * 计算高缩放下绘制svg图标时新的的位置y - * @param y 旧y的值 - * @return 新的y值 - * */ - public static int calculatePositionY(int y) { - return HI_DPI_ENABLED ? (int) (y * SVGLoader.SYSTEM_SCALE) : y; - } - }