From ea134f0535f75fc8360ae118a13d57ba9cb6f16e Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 28 Dec 2021 09:58:56 +0800 Subject: [PATCH 1/6] =?UTF-8?q?REPORT-64811=20=E4=BF=9D=E6=8C=81=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E5=95=86=E5=9F=8E=E4=B8=8B=E8=BD=BDreu?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E4=B8=AD=E7=9A=84=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 更新在线组件时也要保持下载下来的reu文件与商城中的reu文件名一致 【改动思路】 同上 --- .../design/mainframe/share/ui/block/LocalWidgetUpdater.java | 5 +++-- .../design/mainframe/share/ui/local/LocalWidgetRepoPane.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetUpdater.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetUpdater.java index 68a3123f7..b7d9e7f50 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetUpdater.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetUpdater.java @@ -13,6 +13,7 @@ import com.fr.form.share.DefaultSharableWidget; import com.fr.form.share.Group; import com.fr.form.share.GroupManege; import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.bean.OnlineShareWidget; import com.fr.form.share.group.DefaultShareGroupManager; import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; @@ -54,7 +55,7 @@ public class LocalWidgetUpdater implements Process { return 0 <= processValue && processValue <= 1; } - public void updateWidget(String remoteLatestWidgetId, UpdateListener updateListener) { + public void updateWidget(OnlineShareWidget remoteLatestWidget, UpdateListener updateListener) { if (OnlineWidgetRepoPane.getInstance().isShowPackagePanel()) { ComponentCollector.getInstance().collectDownloadPktNum(); } @@ -77,7 +78,7 @@ public class LocalWidgetUpdater implements Process { } String filePath; try { - filePath = DownloadUtils.download(remoteLatestWidgetId, widget.getName() + "." + widget.getId(), LocalWidgetUpdater.this); + filePath = DownloadUtils.download(remoteLatestWidget.getId(), remoteLatestWidget.getFileLoca(), LocalWidgetUpdater.this); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); return false; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java index 169b4b5e7..f344d59b0 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java @@ -438,7 +438,7 @@ public class LocalWidgetRepoPane extends BasicPane { LocalWidgetRepoUpdater updater = LocalWidgetRepoUpdater.getInstance(); for (LocalWidgetBlock block: blockList) { OnlineShareWidget remoteLatestWidget = updater.findLatestRemoteWidget(block.getWidget()); - block.getUpdater().updateWidget(remoteLatestWidget.getId(), new LocalWidgetUpdater.UpdateListener() { + block.getUpdater().updateWidget(remoteLatestWidget, new LocalWidgetUpdater.UpdateListener() { @Override public void onUpdated(boolean success, String group, String id) { updateGuard -= 1; From 564f527587fab9d896bf1e4a8066fe47919d4937 Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 28 Dec 2021 10:43:00 +0800 Subject: [PATCH 2/6] =?UTF-8?q?REPORT-64738=20=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=BB=84=E4=BB=B6=E5=BA=93=E4=B8=AD=E5=8F=AF?= =?UTF-8?q?=E8=A7=81=E7=BB=84=E4=BB=B6=E5=BA=94=E5=8E=BB=E9=87=8D=E4=B8=94?= =?UTF-8?q?=E4=BB=85=E6=98=BE=E7=A4=BA=E5=85=BC=E5=AE=B9=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=9A=84=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 获取组件包中子组件json数据接口添加当前设计器版本参数 2. 下载组件包的接口添加当前设计器版本参数 【改动思路】 同上 --- .../mainframe/share/util/DownloadUtils.java | 43 +++++++++++++------ .../mainframe/share/util/OnlineShopUtils.java | 5 ++- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java index 020c03bff..a814dfa0a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -37,6 +37,9 @@ import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.interfaces.RSAPublicKey; import java.security.spec.X509EncodedKeySpec; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; /** * created by Harrison on 2020/05/27 @@ -68,9 +71,9 @@ public class DownloadUtils { @NotNull public static String download(String id, String fileName, com.fr.design.extra.Process process) throws Exception { - CloseableHttpResponse fileRes = getHttpResponse(getReusesUrl(), id); + CloseableHttpResponse fileRes = postDownloadHttpResponse(getReusesUrl(), id); if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) { - fileRes = getHttpResponse(fileRes.getHeaders("Location")[0].getValue()); + fileRes = getDownloadHttpResponse(fileRes.getHeaders("Location")[0].getValue()); } if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String realPath = StableUtils.pathJoin(ProductConstants.getEnvHome(), ShareComponentConstants.PLUGIN_CACHE, ShareComponentConstants.DOWNLOAD_SHARE); @@ -106,9 +109,11 @@ public class DownloadUtils { public static String downloadPackage(String id, String fileName, CancelCheck cancelCheck) throws Exception { - CloseableHttpResponse fileRes = getHttpResponse(getPackageReusesUrl(), id); + Map params = new HashMap<>(); + params.put("designerVersion", ProductConstants.RELEASE_VERSION); + CloseableHttpResponse fileRes = postDownloadHttpResponse(getPackageReusesUrl(), id, params); if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) { - fileRes = getHttpResponse(fileRes.getHeaders("Location")[0].getValue()); + fileRes = getDownloadHttpResponse(fileRes.getHeaders("Location")[0].getValue()); } String realPath = StableUtils.pathJoin(ProductConstants.getEnvHome(), ShareComponentConstants.PLUGIN_CACHE, ShareComponentConstants.DOWNLOAD_PACKAGE_SHARE); String filePath; @@ -145,9 +150,9 @@ public class DownloadUtils { public static FormTheme downloadThemeFile(String themePath) { try { - CloseableHttpResponse fileRes = getHttpResponse(themePath); + CloseableHttpResponse fileRes = getDownloadHttpResponse(themePath); if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) { - fileRes = getHttpResponse(fileRes.getHeaders("Location")[0].getValue()); + fileRes = getDownloadHttpResponse(fileRes.getHeaders("Location")[0].getValue()); } if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity entity = fileRes.getEntity(); @@ -177,21 +182,33 @@ public class DownloadUtils { return null; } - private static CloseableHttpResponse getHttpResponse(String url, String id) throws Exception { + private static CloseableHttpResponse postDownloadHttpResponse(String url, String id) throws Exception { + return postDownloadHttpResponse(url, id, new HashMap<>()); + } + + private static CloseableHttpResponse postDownloadHttpResponse(String url, String id, Map params) throws Exception { //先登录一下。不然可能失败 CloseableHttpClient client = createClient(); FineLoggerFactory.getLogger().info("login fr-market"); FineLoggerFactory.getLogger().info("start download widget {}", id); - HttpUriRequest file = RequestBuilder.post() + RequestBuilder builder = RequestBuilder.post() .setHeader("User-Agent", "Mozilla/5.0") - .setUri(url).addParameter("id", encrypt(id)).addParameter("userId", - String.valueOf(DesignerEnvManager.getEnvManager().getDesignerLoginUid())) - .build(); - return client.execute(file); + .setUri(url) + .addParameter("id", encrypt(id)) + .addParameter("userId", String.valueOf(DesignerEnvManager.getEnvManager().getDesignerLoginUid())); + + if (params != null) { + Set keys = params.keySet(); + for (String key: keys) { + builder.addParameter(key, params.get(key)); + } + } + + return client.execute(builder.build()); } - private static CloseableHttpResponse getHttpResponse(String url) throws Exception { + private static CloseableHttpResponse getDownloadHttpResponse(String url) throws Exception { //先登录一下。不然可能失败 CloseableHttpClient client = createClient(); HttpUriRequest file = RequestBuilder.get() diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/OnlineShopUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/OnlineShopUtils.java index c42f06946..7341d7cbb 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/OnlineShopUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/OnlineShopUtils.java @@ -14,6 +14,7 @@ import com.fr.general.http.HttpToolbox; import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; +import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; @@ -251,7 +252,7 @@ public class OnlineShopUtils { } public static OnlineShareWidget[] getPackageWidgets(OnlineShareWidget widgetPackage) { - String plistUrl = getPackageChildrenPath() + widgetPackage.getId(); + String plistUrl = getPackageChildrenPath() + widgetPackage.getId() + "?designerVersion="+ ProductConstants.RELEASE_VERSION; OnlineShareWidget[] widgets = getOnlineShareWidgets(plistUrl); for (OnlineShareWidget widget : widgets) { widget.setParentPackage(widgetPackage); @@ -287,7 +288,7 @@ public class OnlineShopUtils { onlineShareWidgets.add(widget); } } - return onlineShareWidgets.toArray(new OnlineShareWidget[onlineShareWidgets.size()]); + return onlineShareWidgets.toArray(new OnlineShareWidget[0]); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } From ed43a05a674c99165e460fee8b52178ffcd660b6 Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 28 Dec 2021 11:54:03 +0800 Subject: [PATCH 3/6] =?UTF-8?q?REPORT-65049=20=E3=80=90=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E8=BE=B9=E6=A1=86=E3=80=91=E6=82=AC=E6=B5=AE=E5=85=83=E7=B4=A0?= =?UTF-8?q?=E7=9A=84=E8=B7=9F=E9=9A=8F=E4=B8=BB=E9=A2=98=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=A0=BC=E6=A0=B7=E5=BC=8F=E6=98=BE=E7=A4=BA=EF=BC=8C=E5=87=BA?= =?UTF-8?q?=E7=8E=B0=E4=B8=A4=E7=A7=8D=E6=A0=B7=E5=BC=8F=E9=87=8D=E5=8F=A0?= =?UTF-8?q?=E7=9A=84=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 单独使用CellStylePreviewPane单元格样式预览面板时,需要CellStylePreviewPane在样式切换 时清理画布并重绘 2. 在CellRectangleStylePreviewPane使用CellStylePreviewPane时,也需要清理画布并重绘, 但此时的清理是CellRectangleStylePreviewPane完成。CellStylePreviewPane不清理画布,否则会 导致表示透明的马赛克图片不显示. 【改动思路】 CellStylePreviewPane增加一个是否自动清理画布的控制变量 --- .../com/fr/design/cell/CellRectangleStylePreviewPane.java | 2 +- .../java/com/fr/design/cell/CellStylePreviewPane.java | 8 +++++++- .../main/java/com/fr/design/report/ReportStylePane.java | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java index 015fecee9..d278d130f 100644 --- a/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java @@ -46,7 +46,7 @@ public class CellRectangleStylePreviewPane extends JPanel { for (int r = 0; r < ROW_COUNT; r++) { for (int c = 0; c < COLUMN_COUNT; c++) { - CellStylePreviewPane pane = new CellStylePreviewPane(); + CellStylePreviewPane pane = new CellStylePreviewPane(false); TemplateCellElement cellElement = DefaultThemedTemplateCellElementCase.createInstance(c, r); int flags = CellBorderSourceFlag.INVALID_BORDER_SOURCE; if (supportInnerBorder) { diff --git a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java index b7e43c38c..66a873d4d 100644 --- a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java @@ -33,7 +33,10 @@ public class CellStylePreviewPane extends JPanel { private String paintText = "Report"; private Style style = Style.DEFAULT_STYLE; - public CellStylePreviewPane() { + private final boolean autoClearCanvas; + + public CellStylePreviewPane(boolean autoClearCanvas) { + this.autoClearCanvas = autoClearCanvas; setPreferredSize(new Dimension(0, 0)); } @@ -55,6 +58,9 @@ public class CellStylePreviewPane extends JPanel { @Override public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; + if (autoClearCanvas) { + g2d.clearRect(0, 0, getWidth(), getHeight()); + } g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); diff --git a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java index 250861dbe..a5295ad7e 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java @@ -53,6 +53,7 @@ import java.awt.CardLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; +import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; @@ -78,7 +79,7 @@ public class ReportStylePane extends BasicPane { setLayout(FRGUIPaneFactory.createBorderLayout()); setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); - previewArea = new CellStylePreviewPane(); + previewArea = new CellStylePreviewPane(true); followingThemeButtonGroup = new UIButtonGroup<>(FOLLOWING_THEME_STRING_ARRAYS); followingThemeButtonGroup.setAutoFireStateChanged(false); customStylePane = new CustomFloatStyleSettingPane(); From a77c1731701cf19768e61571ea2c07b344673c53 Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 28 Dec 2021 14:16:57 +0800 Subject: [PATCH 4/6] =?UTF-8?q?REPORT-65059=20=E8=AE=BE=E8=AE=A1=E5=99=A8-?= =?UTF-8?q?=E7=BB=99=E5=A4=9A=E4=B8=AA=E5=8D=95=E5=85=83=E6=A0=BC=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E8=BE=B9=E6=A1=86=EF=BC=8C=E9=A2=84=E8=A7=88=E6=97=B6?= =?UTF-8?q?=E5=8F=AA=E6=9C=89=E4=B8=80=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 问题原因设置单元格边框时,如果某个位置没有单元格会自动创建一个有默认主题单元格样式的单元格, 那么之后网页查看时,默认样式单元格会生效,导致设置的有边框样式被覆盖 【改动思路】 报表工具栏上对单元格做的操作,都会将单元格样式变为自定义样式,因此需要在样式设置结束后,将样式 变为自定义样式 --- .../com/fr/design/actions/cell/BorderAction.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/actions/cell/BorderAction.java b/designer-realize/src/main/java/com/fr/design/actions/cell/BorderAction.java index 844e4f70b..8752d54de 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/cell/BorderAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/cell/BorderAction.java @@ -110,13 +110,17 @@ public class BorderAction extends ElementCaseAction implements ChangeListener { public boolean update(ElementCasePane elementCasePane) { - resetSelectedElementsStyleToCustom(elementCasePane); - + boolean success; if (oldCellBorderStyle.isNoneBorderStyle()) { //无边框格式 - return BorderUtils.updateCellBorderStyle(elementCasePane, oldCellBorderStyle); + success = BorderUtils.updateCellBorderStyle(elementCasePane, oldCellBorderStyle); + } else { + success = BorderUtils.update(elementCasePane, oldCellBorderStyle); + } + if (success) { + resetSelectedElementsStyleToCustom(elementCasePane); } - return BorderUtils.update(elementCasePane, oldCellBorderStyle); + return success; } @Override From 3712ef8a1ab87d36749a2475f1b41d827d9a95e3 Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 28 Dec 2021 15:21:50 +0800 Subject: [PATCH 5/6] =?UTF-8?q?REPORT-65060=20=E3=80=90=E8=A7=86=E8=A7=89?= =?UTF-8?q?=E9=AA=8C=E6=94=B6=E3=80=91=E6=A8=A1=E6=9D=BF=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 替换下表示透明的马赛克图片,之前给的图片里格子太大了 【改动思路】 同上 --- .../cell/CellRectangleStylePreviewPane.java | 2 +- .../fr/design/cell/CellStylePreviewPane.java | 53 ++++++++++++++++-- .../design/images/transparent_background.png | Bin 37392 -> 26250 bytes .../com/fr/design/report/ReportStylePane.java | 2 +- 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java index d278d130f..09373189e 100644 --- a/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/cell/CellRectangleStylePreviewPane.java @@ -46,7 +46,7 @@ public class CellRectangleStylePreviewPane extends JPanel { for (int r = 0; r < ROW_COUNT; r++) { for (int c = 0; c < COLUMN_COUNT; c++) { - CellStylePreviewPane pane = new CellStylePreviewPane(false); + CellStylePreviewPane pane = new CellStylePreviewPane(false, false); TemplateCellElement cellElement = DefaultThemedTemplateCellElementCase.createInstance(c, r); int flags = CellBorderSourceFlag.INVALID_BORDER_SOURCE; if (supportInnerBorder) { diff --git a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java index 66a873d4d..dc888b1c1 100644 --- a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java @@ -30,13 +30,20 @@ import java.util.List; public class CellStylePreviewPane extends JPanel { public static final int MINIMUM_HEIGHT = 40; + private static final BufferedImage transparentBackgroundImage = IOUtils.readImage("/com/fr/design/images/transparent_background.png"); + private final float transparentBackgroundWidth; + private final float transparentBackgroundHeight; private String paintText = "Report"; private Style style = Style.DEFAULT_STYLE; private final boolean autoClearCanvas; + private final boolean paintingMosaic; - public CellStylePreviewPane(boolean autoClearCanvas) { + public CellStylePreviewPane(boolean autoClearCanvas, boolean paintingMosaic) { this.autoClearCanvas = autoClearCanvas; + this.paintingMosaic = paintingMosaic; + transparentBackgroundWidth = transparentBackgroundImage.getWidth(null); + transparentBackgroundHeight = transparentBackgroundImage.getHeight(null); setPreferredSize(new Dimension(0, 0)); } @@ -64,12 +71,52 @@ public class CellStylePreviewPane extends JPanel { g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + if (paintingMosaic) { + paintTransparentBackground(g2d, style); + } + paintCellStyle(g2d, style); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); } + private void paintTransparentBackground(Graphics2D g2d, Style style) { + float alpha = computeTransparentBackgroundAlpha(style); + + float scaleWidth = 1.0F * getWidth() / transparentBackgroundWidth; + float scaleHeight = 1.0F * getHeight() / transparentBackgroundHeight; + float maxScale = Math.max(scaleWidth, scaleHeight); + + if (maxScale <= 1) { + scaleWidth = scaleHeight = 1; + } else { + scaleHeight = scaleWidth = maxScale; + } + + Composite oldComposite = g2d.getComposite(); + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); + g2d.drawImage(transparentBackgroundImage, 0, 0, (int) (transparentBackgroundWidth * scaleWidth), (int) (transparentBackgroundHeight * scaleHeight), null); + g2d.setComposite(oldComposite); + } + + private float computeTextColorBrightness(Style style) { + Color fontColor = style.getFRFont().getForeground(); + return fontColor.getRed() * 0.299F + fontColor.getGreen() * 0.587F + fontColor.getBlue() * 0.114F; + } + + private float computeTransparentBackgroundAlpha(Style style) { + float textBrightness = computeTextColorBrightness(style); + + float alpha = 1.0F; + if (textBrightness < 50) { + alpha = 0.2F; + } else if (textBrightness < 160){ + alpha = 0.5F; + } + return alpha; + } + private void paintCellStyle(Graphics2D g2d, Style style) { int resolution = ScreenResolution.getScreenResolution(); @@ -86,9 +133,7 @@ public class CellStylePreviewPane extends JPanel { Style.paintContent(g2d, paintText, style, width, height, resolution); - Style.paintBorder(g2d, style, - width - GraphHelper.getLineStyleSize(style.getBorderRight()) / 2F, - height - GraphHelper.getLineStyleSize(style.getBorderBottom()) / 2F); + Style.paintBorder(g2d, style, width, height); } @Override diff --git a/designer-base/src/main/resources/com/fr/design/images/transparent_background.png b/designer-base/src/main/resources/com/fr/design/images/transparent_background.png index 61557d0a808f9bdcd63713b5ba0db246c026e9fa..3db1fd14f20910bafaa80d16cdd8d86c8f106c55 100644 GIT binary patch literal 26250 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%0Dbh`O6$zM)@}OiJ-rY^CSv z99vWu!AnoAq;u9Q9Ls6CB-raw2@P<}>MzS>>Lffg`vi<}+aLb>F;0i^CtqnCSuqpK z?lXBUy>s+Q5>+!@+m$})CQG@GIWgxJ5cP0}U#w5~ai<#;Dbh(!A1}8BKs7q#(7#ew zGph$ho2nn?%1#r@C2DrLj zii(|?Eduu2w9usESQ&*b$=jxAOkkpn36G0v7`?35_}*LgT0&!h@~dNY6-}gXOQ-e& z4K)m&LptY;_Be|AT_BNON78T@*8W0;vxUd@36tC9SE6c zPN8$R;&lJ$cnTM6`bFuRWcjTvr;M+ZMJhq6w8~`esSNx*I2b#yo9sa9yt*7sFI)d> zOQ@}W0SLX+V{Y?^QVspGOkXyAK01FMboI->UXP4K8s@LX;#bn$1+SUDZsAkaepi-; z(HIjLST9k!4FHP-1_o-}dDOfNCY0K%1>_rC4*+kuzE}+8Wpv)>Y2m8{DW}x9y!^n* z&Z(*9ixeOPR04y+&?jrbW@d8(aI4o*XMjn8zA!&usK_1r()Z6W;rT(?AX352xqQ!Q zaadVhUER;(JS`X>JTGdSe^Gw^b7WYb%At@9c9t2c!N4mc5Qpn<-P>A>4Gi2iU}>~? z5AlUkYTQPH{{_DV3K%6~GPTBq-zlbn^OW?jmv}!x^RAgai3xhG$s^9>ER~(5{ZbXrDKIVJY3&fw;p0-;$%8 zz!w%8)jBackR(zz8fYdC#pUXDVxkcC+&^o-1>P1Suay`7-(XhwLswU5Go}GH08LhH z^u!zx-swwUxdDY0O_KjKdh5bo>0!^|5AdCxu9MzLVVmW6L%#!BaEGHuR``%`KD;wR)pYcL7Uhzn|>*3Nv_}eg{bLH;YvQI-L3^%`4Y5G~#I-Y?|Ar z$((Eda)~$6dcvpP>Q?(aFacPF87s^X!a(;6)0$5FPw6R|o=67V!&Aa$s)c(B#iW|8L#oMp5xeb0t`p-f~$XfX{#!#)B zJV>fZV_;aI{{v>_<$uGh99hf`3_POy5OcFGMsJZ{_NKlBK#r6R@8Err6paA5X~%17 z@l$K_H|Foo?t}A4jp|smz=4+^dbS40l8~>6wHtbNEyWOfDfY1UN`C`JPOK_4X7$0q zM4Wf>i$DCAZ`Z{dR~g}fL=|w#xI7o0!KMcSwHC+u&6n9VNhn^`<_-Q&c5gWgNz|>QY~cQ6 zoa&w5sBwVe0>hLDl`8ER!I4xT+z#|CLjD0PdLzSu%7W}Tl0FV?MaMfEzcYE$gu4-H zb7}F4ke5k03uI~slM1z3pWW-LH1Cb$v~#v{GtX+loD_a;F1n;V!~!PXfN>Vk8wVA1emP$^GoVOb{Qx+yKxM%!?+7g&>*0L1I+%ekGawHP)O=d4>|;(j^#&4~F> zqU5w-!`iPp+UQNg-2Z7mmPD;~ZP7dpy;dk=A-t8S&FMSL9-I{Q`}=*}_s;8Cn8Aua zWP_?7UUD)hi--CK(1VxTUkD6_{UAne`g^@MuLdT&i)!s)&7m**o0(T@<=TzZ`h)ue zlY(|P?Yf9*(TUi(ZrC|wGX{u@p_LXBN zB+YzJxPL>slPlP1N^QzQ2)IPVva_sEIsr{CiRGtbwR+ghOP`1%9$;bpwZZh0tHmk) z^O*_66|-o|b#7n}P0v-2*(i|1U-0vlb}xu;Sy#z_v_~%p7t~wtKd*?i9ho(QH~L+r zXKH>A3j+Mhlr>Ut-N>lH_zA`k`1$_rtscyLp_ir`G#s8^r!^8ik(d=sUwb{APfg(U zN+Lq&>4#=_MPwxYr4SPu0{*+`~R zSHym|z^FdtY{j1HGCa_hp}E?5#!&BrTe|l{Vv^|%)jQ=uboxZ` z5bqe+BVk@c184e-&<4MJrZ#V{bN{%U>nbzkM#)9xr1zKUm5Yxy6sL+6qhV;LtFiNL z$6`9p;$ zm=&_3!Fh7a^|^_AWkQ6fZ~vo>&mfwYTB3crvJFml0H~;^bT*@IN{^uT&7OL1HioN0 zepoH&R`U9Q9U^{e+9a#W5nH2Dybwh?gGX2Yf zx&oF~s~CO^YJJ6*@JFpH?(4q+fgRl-fG>y>AI2X$%>2L_yB4-hS{hB=y&zpk4|(Dm zt_JD8eKMxk!j<>OLM>?eaM_jR!%m*~9(A@FDjKCa3V;g0dsLg?@sFB5Uxf)1m;WGt z?T&f&naFw@^ZwM5b9u;?JZ`vI(D?mRF?$}4|3Mm7;vPcw!?Msr)mph15$x~&xvn#R zmQXCSSBu;$hgUyauqWB4_PiuAklXuSow_B*f9YX(rO~F?m*gim{|fD%@oG3;$FxzP zW?gYlKlt_Y94!bd6-)O>1i4H^@k`smPg_@NoEo1>cu6lmok#rPP<^vDUkA`dYW*3) zeHBf|PUSz#9n%!o2hWFJZc8yeQ=e4VR^NbVcUhY^m-QyUnn|ycAEzn3p4cM2#6X?Q zH-$gGH}ebET{d9B;Ksl-QcBlJy1jeyO0sde+nsy^iQ&7?_mT&e&#&nDoU&NNn!irf zn1{oRXzge87{^lBZ_o;;O- z`V2j(lcW7@H0jgr@?mFM^XB>9rSq-4ZtqVz5eR3hV?*=yElvEzC&5G)^1fZBy?x(b zV!F+qGXGwyTzRg;W@*-47AQB&>(!Hzlif?ncmIYoV%@%-Qun~TBaN`{68;27#Q&Rg zAqpTDGVyEZvcKx(*85e7@8G8m^bNo^OXdN>q?ESs@OknaiBrgKi1a)?&=*WO1!+-a ztgZ&RKdE~x+iG?Xgn51LBQr%dHsw^1q2Du1pRXyk{4?i^gMOmpDx2-1TjLV0_B1vY z=)D#RiY{v$0W$XJB_LmP8N*L8-2eeR{{i4}65wW&3K{Xr%23Ha&i^|l(?H#As~sJ$ z9h;gOtZr&;1vnrxPx11+l@$sn;MpyO$P+OG7KEHT*}*|$n(D&(_a?F1i?*@8W9b|f zIei052a%{%D`UVyD>PhlE<@%%2*VqUwaNQQ4wsxXctodwiz(#Hv0;zf^K+xlPZ>2Z z{ym5Hz`byuy-++BIloySh|$!v4pBC&^-pZ@t1{-MK@JkebbvmsIO8283&1}_h2q=f z<~K@uIccesPHhSyHq}+n9egrz=uP87y&ilM#ien_t( zf;)3Dby0KBAFZ5&?z6yAz}zWx~!%jVDo z;e(PRBHN(U`sJ5FW6=ZQ=AY17#sTY0@`XDkBXz==^^jiCAubODX{doWM9wQn`Np*_ zIJN->sJ%+|i7dwDCCaT&m^j=K(cq)X-x9wE+Dn$ux}u4#I9Az!EEIQ=nGfd{)d!dV z(vF~x)TB>nibpPBMay>c2@+M*H`wATf(8~_?386SSFA_+Q~wC^AjWAK7~ox-TeDbn zkW<(x$(I8MIY6)9t##@Pn*23)Ze(u&Wu8*xkTBU`&FD`O$^pDYLEiSZ6aIi5r?>U;U7Rj4D7*=?q9DGcBqtqVE^;@>eI~) z^j>_Ssq^4VyFxtoZlR*9X5R@Hi^xJ&f#J^>Zh2+5hE_u55#FuX`4+2@qqFkIz|V^% zRv*0j0g?)~4l3Lr8O?qvi;PSxeEI`_{D1<)PuUYQbNu2W>i%=h8ek7&fhk5fI{C); z^6r#|YK$tXh|k?1?Ubfb&Jm5R_ZSTDH$eWu_)QDE1(y%`m0|^elBJ|Ou;l~xGak9= zQeRFk_N(t0-$Zc%r``rgC|_9Z?PT2mf%>Skwl39U@q%=|G1^#t%wA86BL^1MD{WOk zrD|nyw&FTF)D!B`3mF9p7_!66pua4#3v%Q>GqdK1)9i!2m_0T@p||QH0VZIZ+)B=< zv&zXr?g}L*dmq8{zHIa2e#p!Lf}$4cKvj-je9hTj0JG0{9GW4$QB_qn_qiYr^#48bzFcI#_89Ql^z8I?4eh=E+1jZdx^R5JDn%vy@|Ou>w2qR;74ke_Ka!z?Q;jV zXZr{;^AGc10(mn-sGkLT1j8DNqjIim%P zFwEi*<5N@p`^jI@7iS8tq7JzjcL_S?%EZ^e^Su0{8Cqqs88afZtw}7U1q_jt>MS zQP={>C)wlAud;MG&rb!QN{+MLXd_?q^sP0{Q30UKUuAJln zS;QYfqTyTW$iCe`k6kx)KLltH*KGkovse17v1#F3{s-fwf#hxEuTeSgIn$w_2A-uv zq=NB!%^k|Zw`12*2xDjQ_D}0@&Kq<#KN-Xsj*b}oQNELnjYr5|XYZ0xq}#3h4BZm$ z-&C`A&((h%ck68Bvhic<722Y^E48GQ5V>`4yTiNO8jD|!QZ6dFRoG;j6RCjyJ=edc z49!26JvGTU4xJdh{if!39HiUOpgSh>s)Mgqzs(nluinoRNZxs2_-MgG_;>llzKkQh zNy_)yws}alKQB{z@h~X}PTslha7=foio1?^?sMH}9oHWE$T@d}7*$|99B2)q%pKPovb+KWo2jGi+@`j+2bbsGm0E zVivwuVa*%QD62ldYDOrzscf{Se=!%2G~Giog0v~mWEMK!K7OD|uPxXf+~sU{@euFV z9-D=?Q4?ZiQLp3{paN?Cy$XQNou}o!a+b3!Tl5QCv(m8Ib?=~$o}=>8ijDScD3f^20Ig&CfUEJGLL%$^-YJa%U;ZooZ)QzGW`P8&RfcJnRXXLh`>xfx0lc^ze2~r(X8(@9Rm7L zsg|qHDnfAIlK~shByeZyH**F{>tfh8Z=eHfqJhd>DuG~9Zgl-?I{d?H!l~cK?6?3{ zXycq5*FnY4jcDS1q4uQcMTf)cRAu>eEzPf!ke{C{}7bz%m`8zGeQ@VMVt$L}}X?988qjR$+3e`rj2toO}IR%9cp(y6k z%e`l2;nEk|qUFIlA^anOpL-9XBYRI~M%^9FSZ$}qm}_MCR)yT?A@#{yku?VFxyCls znDU#^DT1P#96tr+9~|r#rfvRHIfkrQ>e@ZeUp>S6=`9E>dvt$VcUSsk{14rI=5Sa| z__uv^)nW42^2s-AV;=q0H++d0d21yK$dZ&s$7vOTz3I+$tW|e*?_E0|^+$6yn__mA zs;4T`9R(`3+C3JFvjcfQX2v53hwj@F|8=HF#pT`_ac#xz_r$N^VXw&nf5+~nN-T~^ zFixV==_y*S( z8i|0}mb#fexX!|&$x$*s-f$g$C9)wc`v3MnTa6RclBG2V+E9N%L{H~hR1z<7TSU`5`eY(dnA20oP><;EO?bsR&)%dSH> zIaRb;L^e6SLA$xRr2x$Yz$qhGLbdxSBbnO-dw?=c29|{?>6!J7h3E^`04TWg#R(Wn z4S*i>k&A&1uKo2Yos;ipSWi#p{VA{ia-XfqSZdW{!}Tr2CGX4p0fBaxU) z$G!r)1S}qpm^g+PM8p0R=%)<&tBk${_WjPx!<>w9#0$|sr2unT;Grk~R6kQKv;et^ zo9U;ePXYINo@zhvg=pZ%ZTHpy67K*M<(T_T5VPdxC9-9GS!@TOz0`Zd)|8aVVUHg9 znxF(eFC3!?XGLo5G#BIZC8c?20$O*dthGW`VJ8Fuo5f{wH2qahYu`<*Ih&?3k#d+N zYPf(Um_U-9xYgN!DVx#ST8QffM5yczw_c^*eFr! zCDs2xEP}Cm%Fu*XPz&Jw-p73pYUgAOmuVjX()ru-mgV38iW)wTWN;x{jX@J%!`z(O4H?}@I9|8B`C$;&0iNB38u4+G^p5VQ$QAG#?!s^tFWf!y6XC@gwN+`(ch{p_PB7jKB%= zP8uz`7~eI@Q9Q8+VH9m(YmLq;nx=$JLM2BQL;Z%|b6EYhKVY7tC7itD2b}OWA4E|Z z-lNTkz@$}uX-D?r#z&4dE~lY^D@h>S0jdi<#q0zXW`~|rF<=9L8QDx5Nd{&7a*K__ zoC-f-jnH6Enu9I{kgd^+Wx~V3nctGPU)_9gLtJok^@DpSkE?z7@1J6PwnLtT3`Gtp zoz?YUcIP1AZ@QH5e(=AO1I?!FX2yT_+nN@cb0Jvt{)rc0wrVV~ybO1N9j&Sxz06lJ z(0FHVX@W7U^xLe;Zn(U_ep9COZr=^^LLzs{7Lp}z0H-{gZqU^hpk}w8TbIvHjZ{HC zYPN^*t8eN$Qbso6eF|S}Fdi)FDTwp-zd^~3>z-CY*8hydy(O5&>t?a+XE<=o2@vDO zNCVE#spDY)MhpNjq9#{!oQ9{E*WM$Ef07OI7EWSExH?%8n#fM4-5@aYT9V9J?YQY5O-aTZ z?0sd?<#S!QcN_(+{@3u82hrSTmD+VR=Rn-)iZ;Lp*EO^P!5u0qz>yrQp!DC*_eJaJ zV|B|00=qGxFG8iPblQ{RxiL4GGP1FVREA-LECQFzT4~VUI>8r3e0xPC2Pp?a_69{8 z^bBJw*N%wf%qjYKMH?ivUKhR-F=h*Sr>x@OR|pK2WQn0)mt)-0SLV;YLv7qft!+Y` zssy5O=xh^*O#Z5(@uVOJ_QT0QP;oJ8mNSN;WDeH}zC~dl^*9 z3tetoGwji^mNE;xiySMBO35zde6jc@L5yqw&KS2!_+=51wWm=%2aKFwU>Rz&c7d>d zMN;sYXx`5XYLo9Jd{=p{ zxGjC{jr+J<_zcT;xu>-yXNTYJe#aJBa>kygFq&vv-ZY*fYtb&MFtoT}p<(EQ%~Il2*-HGfs;m@QW`${Wu&;u<DytW7_w0ZZ#8kAWeU3Z-~y)6%2m$P2&qD0a!{vt<9Ubo%stm- z{=8uRoL)?NHF5w%k)PaWb&?&%p!_AMxyJ9AdK4vhmjHv{kX73;pC5-YKM*!_ipsSQ z$L=ZP^bt}Qv)U|5d$8>DA(H#aTnLc3f^>oMJH@4kd<(a^Aw`;V=*Z$pwCx3eswUhmv7Obt71tON)tex%X zYVN*Al4biHLc;V4q|Lmy7SKh?ciNo~e6QtW0$P`L01m0pUT1b~<+`@Gc5vM__s_vv z=pWrC+$VbqWcK8eJ5OC)y?B3R(Ct)}0^u3h8`gO=#6_ul+mcQ6?>%^`^q0_o=BUE3 z{-PTSG+Utb!(z*tHhDfP&#iwmi;z9_QMo|1Y)o}YkvPiwD7OJehyP}2Jp za=0d3RECZDt2$dKS~NlaWz8|lNMYtABNraLd>HWmz8?SA<#~haJ#n;_Eu;<<7SS|N?(BZ0NQ4n#&hO*AV>cQ{o(Dv6V z(g_zO?p`h9mEo%I`8Pkp-!U_H!J`c((qqdACMII8h^d|G`*uyG_Yr28NzQFhPwrfk zp}lG(Ej{Twq&krSwg5=^>Nmj3j} zlOcLe8-Efw$0Zya*NyS;xdt17&6%B<>m;y08G|@dl`B+{>KJj4pli2Af%wW**yjbM@d$ z{KjX?Zcpb*YuYu_D!VURzrw2{w47o0lnj2vHfGp+I%?Qy^Q^koze~Y}B?+=t1+p)~ zv|@kEz2xt#GRp>~#Z}UC_}!eprwT^ye-1A$ophS;RYT5_!oqtgwORBO$d1o%cw;Ur zL-O9ey5)oJ>>s7ojybIvC6jk8HKwfsazwqBfz$f$$4k#W`m|IS{(^=8Zz%d5xxs!S zV)gn*YzP2PJln$0B5N^D)2b~sE!du;KbTH)uni}eJHDb4zm@;IZ|Xn1Pk&4M(oud6 zY~1XKb&LOOfQ_dboDilvSXq%R7$$oU%I^PswG7+NpHyww)FJ%ZXbt|EobwV4Q^o&o zU58$*8pm#Z4Akn@=l7=g9ZZWrnBAiAvVDzJ5n;w}Q=i+<@|~+XF&ox3{Po@5M`^!E?DokKFKhL@IxF}l7T`%_G6es_c-5Q+H=06e|)B6@A9 ze`$`*F(zd#wgBnb6zMP-9WWb@LrZ(IZEgjO(@6;QvPc^`Gd3}H+<%qdq)mn!I8nB= z<4{=C55qw5Mi33PUR^f|PBb50GRH3l!mdAp1xbq~3*)VcDbJo{D?t%efj@3W#F@9o zYQyGkB_{sW0U=F@da_S~Fl{CSTqcznw6Zv>-s9x%)Glz!upcj&Rxscd3(9+g%{u(N zIP0{662#LznpM0+RB^jo+1!07EO4fK_;)6G5=|dYjEr>LLWI8eckf9lCqS_K$0~0O zJDyLLb9!uFpzqY^AG9Lo1DZ{woiNzt zd2aP)3MJAP^)x6Ye4wN!MQkU@z|@zi%-k`xLnEl~SLf;^H*}9t&T%?cN_pK)0;k~y zsAx$rsoZS^lJ#!2b(mevTPVhtPIpLUXq2I$_$A@UPhh`iU<$?b!YE$D@Acl9SsNdN z_@*fo5v9EPq}9BmY%ezOKD`+mQw7(qj0-aNF zvy3+qNh~I2yDT3acS~_4FFqO$s*GAS%qv=UbBDGgOFa>Q9R5N350wKAI%=YlIKG@R zxjV1C{xaN-%S$kuC`jmC>zvk~+t4QPFCM?VN*0ZCpL6<1g~U~>z=3}Fa6dQC>rXR( zg)&4VgDy=B058Y(xTMYdtLj1CH4dX9_vJ!O;3p>ViO8AA;syiXdnux|`wk**aA1}V ze|4Nn7Cp48@5u&BQiSB1NbEDj%CR{WK}9~Z#?asxL=u7R!0~3_!xfQ|3%(!NzqPei zAbA+6yRVzJF_8$JWpc;9&e_pzF;e}5{9pq-4H`);viEhX#K)A^Z;jnWH1qCB!LF#{ zVSp%~(KSFMJPo@utj2T?S&aWzLi&H5RTfrn{Q2Owc2<-{(Q}K3q^R_iRV%C3xU;&^ z>H&u!C)PU4N5Fi}XoSR!v8$`YBpoBA4=KI;y#T}eXgG>k?6MKl!v>0XC|k} zgq%B3e*E36xW)Gl?=rAuzh34v$cDd&`%6RIpC@m@Sok94{V95eUuQ5_l3S-mkdPUW>e%jQI!Qat4$AwQTfm(QZcf7u^69UkP-X_!Z)h zQY$kC)nODbDItR-n65~;(=~{~K6?yHgocAa2IdqDfANcN%5E)|g!Ozyrz* zn50tP4A_nT(7y_PJWqNcC}C!{{0a!mqnQj~+(!%QIPH3CE~61eVdy=^QH`?=y0OXx zzK5nUm)r8UdP5R&;nu^+@PB&+P6{4H44c_~LVfu&Qs!Ix=X`6#d!-^TjcYG*IkaEJ zFGb%wX{rL_`~HR0t*H%ljr_?&jZ;)~pVx?Hr{%M^Ub4=;t2?}E$D=v@n-u>AH8Z3{rS9FGig6ir)!DPv0z zKWIp;3tmfj*AjJ_&CZ`Ib?-sM_TBB>#&ON{Dtm(SqPhP7ZIC5J-ZB3*Y12Qa)Qt{O zh~fUDh8KIcN~)^#QUYySyj)I6Czc2Qo;y|Pd&tdLUvb&>%e z@fWy#)HEknS|7V2;ioNKChp+Jjga%DN~}v8L*2iI(HRspTR|4HDk&>aNsrdQ~Fb_o%!Htc&bdm2SlR^CL9b{nLLR zaQ{nC0pl<4jjC9PT&TZ1I{%==_o492qi6FUfBS?ipXpMS7aX)|<6JI?!TiE~J_%>T zjO0Q3E1*0R&Z($_H^65e{bV}OjQNkgzQ1EhENY&b@LS}T2COp=KtE^s9QZK%sA;oS z$}6t}0Y(-tC6ZRp#h9D#BS1(>alluF-I=1%s#X8;1}9N?OaPeFjoNj+jF?2Q#+^}c zlWuTXq2z^ML}VDCi%Fv1hTyEDBDAdEO7qxEl1L9j=qZ2#Kq{9Ezyl{uoPo~=zD`ePo4#kS_)T|n@2GnBUirh z#|Mp4&hf2i+X!*qe3_Zi(Y2#cvGDsRn5r zrGY-S^(Nkrd4zP#X(!``Hfk)8RuSq(5i1r{M0o`Azk~4n2UGOZBgdGV5pMuts%Q=o z^Xz=xhO8mkGK8ga=;8OO#1l@)hR6sJMdo(y$M{n&Wn;pQu2 zys^uKbh?(*X@dXT};% z99a9pIK^4LnSg(L=42jkGMIH|n+f5u^o*kWn58(M0pzwIN_nWte;SRujd+SG4 zPYMu%tLz0{UxSO&3>xdmgO7G|PMcH4t4i;Bq%^%);QcBaX^_4+zTxG}=+tHdlAK_B z_|>{of-q0$5Mqj1>k@mLWIFzT^0WTy@IB``vH+mLW9#z4PsJP()z1%k++?X0z_Uye z@pCJEhM930Yf=#v99ODzLf31#E?d`b>n|}NfaNKy{E_zyTINR(77G*YNiXufajT2I z831}~*s3=!-$aqBP%6c&G<8Uqh1o`DJRF^zW=?S#mCR=UE)|?OaCu?MN-#g(nm?lg z$k~21XrMShj*-KsQVFWn!DQ{(v5g&x27g(BOyI1`Gws)~E`Y$KgI~d{SA!d&owKyG#Q4>1o9Ck2s`W9m2*1if zfHh{fdoV__?D?v2$g~Oj5ni(BC9>AE_|d~ls0g4447Hctuvl9$Vmfbc?QZJwbptgE zN$Z8~VF{Ttw*-WD^=XJ*S@;BP7;Y#Fiq|in?r5fpohpxTIL&doYWI6^YgIX<$h*i4 z!iSfM6#+`VD`M0rYSX-99ppoz1A4lF@@bO0*H61A*z9d$#BGD=?F7F@a#htpmUP*3 z4c7$Y5*KW7t9FZE&Yhs2HjeCUN3^R8h4R9UYERdMwz*}`i5=@J%HZRGR-_T2gI{~U zgE7+`(COw^6>MF7)I)|i!ZMlFD$P^EwE1BsQg5TDU7t|{B&7~zq&!NUnxRH*oC{|9 zU{i*7PXXp>$~4GeaI}SHM#c~Cu5T@8P+~ccoe(S|;)D(408Ek*)Ih1|_zsp#MyeQ` z$vFTKev{&g=SHd>S$cH==jIw(ciNEV#@u1~Qh{&pG8$HLWwCT0LNG0D3*?E;-$}_- z_j^K_yRxYgdvgwE@2g9ovT&Vo&z2bVL9}#>ap>QHtmd7F-dsrT&A@Wx6Z2M+l_$ft zM9aXhlRm=@z7lr$lS;3il;yC&*YIJ-jdM%bA9zFf{F@AlJto~(mSodZS#eVZ$%vQq zFZz;a67!1Y4MBM-Jb${EuWr@2e0gou+Ls+PVkPxvmoND?T3qODFL=W#zl~0pWGst+ zWs%)ztcumZwbeBL<&`CY{xgZ@YGKEfhl{?b()nEaY&ra8oQT|6Q6zPww}taZ2jOjo z;KK&=e(hZF>ZlP%pHZ$vtWZ{2I<^{g6uuO}tY{)i4^S(ZL5D<967<#yez2* zc;22lw;K?|5;pr&m0$8*yRaBR%msS>yBziK6H=hBm^uR}QX1?q?c zci3kfuD+u5TvjsJ{Nmgvi_VF1;CfkE@ie4^X<}O#srMDjaWW$3tr*6fCL0%8-FHe= z)s=XDM3Y`$x1btBZxvE+gkrC+4gY>f6Mz2=8RLo6Fbia0 zS77P14XpoY;g0QYZzG$S#0t*7q3D~a>h8e9ug9pp(&0knF3aq>CsbuE^TSmR=-s57 zXdkf+<&ctZlhp)n!S)X2u1bI2aNW6phV)F|vWXwzli<=LTFKRw{9&~eUuO*y+liHK z?Vtp8h=LI_?YIKo+jc-#JSl7-R)!@CSCV{Hs(%pqg;lK8d&4#Ro(5)2hWBjMxbbnM zb2$NYn09pZjhq#q^5ZZ~b@YvzE@$-Z3NUM^o2*=3Jc{fJy4zvglqi{8+zCH?PvS3> zyP&7UODEmp0Yn^x}n&b!4 zVppsWckrKEyTwn4kZ-D$)p!zlV_HdJs{(#fc8*BjmVQOYg0(f)$Pz^_-+w&+*cw5L zLHZ8n|FlSITV|}D#_zOBn9sq-{@^2dCa-N!yRT@POzRKGvM*pW$$>#$qn(kF4z-cK z%A|w`Lwj)10hRhQoTLi5Fn*Z{#}}ideq~u8C{3!5d^}p?M#4%*e3iW$Eb$_7$G&lw zz|~93KPMJxwOby?`HcQ0`h8H(iASkd5vXnWNL#uHn)shQ>2itOjVjBItv3=J{*(lC zZM|!r|MboH&urN@GrobVzsp*5Mcy|}2+xK#I<4-0t6w{CHt>OY)>U{dy>j4~$(J}M zR9V1WS#?(Lx_9^iJB%%|Q$y5CJG49cBAXs*r3l%fJ=U7)XvbSMv{R~<2rBUtk+g&T z?K0laMy--6L$yTFAR^*r2t_l-RA_=pjJ6~yN%Jl*oBac3=J^ZmdG5XE-23_7b1$8B z)3_PdpQzO9&^omHrBx=`2ftb( z^dA*9wiOZM#*fqiOYhgLGKh$(pa)N9%L>XNJ$6NxD0`dM<`I71TTKhz+dlihU_n~~ z--0kSEt0SQ-A4*Qja>Rj+?%-@&dKUmj1sNB+^{V<%N9M~9m(ln?R_}-{bjF5_}C40 zQnC}$&q4&b;$I*(mEyo$4&nqVUc>{GEeGht#S!@0P2s*`RuANaWyMn*7NW)t+1gcK z;4(f(;->5Q=Q--bSXllfp7893qG*xM`l)%bm}`&Gbk&wZHA&iprIKpv@9qq8&rQ>Y z;Cw{f#p-z(vmrC(&9yKE}TavQME1m=)LzppM#{#KP@=?`UYK_>pJ zZF4^kf@?g=xV2#ZjFxfUMjb;TZm10fYFLw5ck{UK8%}>_f`2f!2^8zj*y~QqU58!k zibMNly@_T^+A?XRy1w~upJq-(rKU^rx^n-jZ%oldxtrScLt_v$PM>^V7>quN7Z)Q1 zlQb0*W{7D50?Xt%W+4@nGjuTEMk-sck&#Zav#;d1?Ajqv)t<=t96ST`q+=Suw# zVU5~qrD2-d)QCdEC35|VrIc6gKUe7)t;UWN5Yc}^zi!NRmJdv|An5^Zyk02UTnb&! zUU(#pDo-zb9d;9iuTvcajVSe`b7BNd{%n3i6|IZr*i$+jRO#XPEW!az z)J)W&aCVxakCUDnw!x4Zb{w_Myc}h~{xDKKa<5OTILllW>}qF2S$~#$M(#{4>1Po=0kd02At{_cUp z5*x4;N%sq1uTeX$W4@#LA}TNsOAxBxK~cqb!y>;S$`!Z0mTL@G07jDW@N3mfC)q#* zqy`nQrjgR04p%F>mXXL8f6V_R|JWh(nddvmkG^+&FVQ-`OEE~}Um27FAbNN_9SS%8 zBV-EU;O@JZ#>Y8AN=(wD?lr*?#+eNMJMklAue|M_E9&G$+m7tNZPZ(67BkJ2;cyfHml%Ey&MIxi4Vlv8p zYvMoNKZnyAvZkpRi_}^as+RR)1OUvPY!S-(hDRQA_&tcN0eM+rdl{6hACSGREU^Jk z2gh^YOKh({coX(xo?OiL-j43+xj2^gGTZ|$UUY_Zn4`6gUG0^Eoyyw5L)7UjfZEpN z^l9NWoG1(Ja*=C|n?eL@e99xbX@0g~E6;b=@xt(n!aGA*>{F3bi=QRPQvykQ{stmO z+9@an%~ej&Ytu1Th08%bATLt?(i!z6ouJSUp^o50vKz?YLh95L-AthWxMwZXuMgw? z(lhvnRI_woIik2+wyjSzATFh)vWEK-8|H3_yZP}B4f`TC$2^&}vhAUNjs9eh?k$;c zfJYE&JQ6L(>S;%d8FN6o(FOLLOWING_THEME_STRING_ARRAYS); followingThemeButtonGroup.setAutoFireStateChanged(false); customStylePane = new CustomFloatStyleSettingPane(); From ba0d7751751b22a01d7b78fe5ef855eb153e037c Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 28 Dec 2021 16:07:38 +0800 Subject: [PATCH 6/6] =?UTF-8?q?REPORT-65072=20=E3=80=90=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E8=BE=B9=E6=A1=86=E3=80=91=E5=8D=95=E5=85=83=E6=A0=BC=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E7=9A=84=E9=A2=84=E8=A7=88=E5=B0=8F=E5=9B=BE=E4=B8=AD?= =?UTF-8?q?=EF=BC=8C=E5=86=85=E9=83=A8=E8=BE=B9=E6=A1=86=E7=BA=BF=E7=9C=8B?= =?UTF-8?q?=E7=9D=80=E6=AF=94=E8=BE=83=E7=B2=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 外边框因为画布被裁剪的原因看起来较细导致 【改动思路】 关闭默认的裁剪行为 --- .../src/main/java/com/fr/design/cell/CellStylePreviewPane.java | 1 + .../theme/preview/ecpreview/cell/AbstractPreviewCell.java | 1 + 2 files changed, 2 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java index dc888b1c1..f90c78d87 100644 --- a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java @@ -133,6 +133,7 @@ public class CellStylePreviewPane extends JPanel { Style.paintContent(g2d, paintText, style, width, height, resolution); + g2d.setClip(null); Style.paintBorder(g2d, style, width, height); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java index fdd4dd3ca..cfecccd61 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java @@ -40,6 +40,7 @@ public abstract class AbstractPreviewCell extends JComponent { if (style.getBorderBottom() == Constants.LINE_SLIM || style.getBorderTop() == Constants.LINE_SLIM) { height -= BORDER_INSET; } + g2d.setClip(null); Style.paintBorder(g2d, style, width, height); }