From d084e71c0e4c93ed009624a09ea634066b7fd438 Mon Sep 17 00:00:00 2001 From: Olivier Maury <Olivier.Maury@inrae.fr> Date: Wed, 31 Jul 2024 16:20:57 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Changer=20le=20chargement=20du=20logo=20pou?= =?UTF-8?q?r=20permettre=20le=20t=C3=A9l=C3=A9chargement=20sous=20Blink=20?= =?UTF-8?q?et=20WebKit.=20fixes=20104?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../www/client/ui/chart/LogoPlugin.java | 11 ++--- .../www/client/ui/map/CanvasTitle.java | 10 +---- .../www/client/util/ApplicationUtils.java | 45 +++++++++++++++++++ 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java index ad540cb..05ce1f1 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java @@ -7,9 +7,10 @@ import org.pepstock.charba.client.plugins.AbstractPlugin; import com.google.gwt.canvas.client.Canvas; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.ImageElement; +import fr.agrometinfo.www.client.util.ApplicationUtils; + /** * Append RF+AgroMetInfo logo on the chart. * @@ -33,18 +34,11 @@ public final class LogoPlugin extends AbstractPlugin { */ private static final double LOGO_SIZE_RATIO = 2.1087; - /** - * The application logo. - */ - private final ImageElement logoImg = Document.get().createImageElement(); - /** * Constructor. */ public LogoPlugin() { super("Logo"); - // Load the image once for all - logoImg.setSrc("app/img/logo_etat-agrometinfo.svg"); } @Override @@ -56,6 +50,7 @@ public final class LogoPlugin extends AbstractPlugin { // Charba Canvas only accept a canvas as image // 1. create a GWT canvas with the logo final Canvas logoCanvas = Canvas.createIfSupported(); + final ImageElement logoImg = ApplicationUtils.getApplicationLogo(); logoCanvas.getContext2d().drawImage(logoImg, // 0d, // 0d, // diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java index 9615a5c..c51ad11 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java @@ -7,11 +7,11 @@ import java.util.StringJoiner; import com.google.gwt.canvas.dom.client.Context2d; import com.google.gwt.canvas.dom.client.Context2d.TextAlign; import com.google.gwt.canvas.dom.client.TextMetrics; -import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.ImageElement; import com.google.gwt.i18n.client.NumberFormat; import elemental2.dom.DomGlobal; +import fr.agrometinfo.www.client.util.ApplicationUtils; import fr.agrometinfo.www.client.util.UiUtils; import fr.agrometinfo.www.client.util.color.ColorInterval; import ol.Map; @@ -82,11 +82,6 @@ public final class CanvasTitle extends CanvasWidget { */ private List<ColorInterval> colorIntervals; - /** - * The application logo. - */ - private final ImageElement logoImg = Document.get().createImageElement(); - /** * Constructor. * @@ -94,8 +89,6 @@ public final class CanvasTitle extends CanvasWidget { */ public CanvasTitle(final Map map) { super(map); - // Load the image once for all - logoImg.setSrc("app/img/logo_etat-agrometinfo.svg"); } /** @@ -150,6 +143,7 @@ public final class CanvasTitle extends CanvasWidget { */ private void drawLogo() { final Context2d ctx = getCanvas().getContext2d(); + final ImageElement logoImg = ApplicationUtils.getApplicationLogo(); ctx.drawImage(logoImg, // 0d + BORDER_SIZE + PADDING, // 0d + BORDER_SIZE + PADDING, // diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java index b2ff87a..469f4ad 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java @@ -5,15 +5,60 @@ import java.util.HashMap; import java.util.Map; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.ImageElement; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.DOM; +import elemental2.dom.XMLHttpRequest; + /** * Helper class. * * @author Olivier Maury */ public final class ApplicationUtils { + + /** + * The application logo, retrieved once. + */ + private static final ImageElement LOGO_IMG = Document.get().createImageElement(); + + /** + * @param a base64-encoded string + * @return decoded string + */ + private static native String base64decode(String a) /*-{ + return window.atob(a); + }-*/; + + /** + * @param b string to encode + * @return base64-encoded string + */ + private static native String base64encode(String b) /*-{ + return window.btoa(b); + }-*/; + + /** + * Create and return a unique img element with SVG source, ready to export as + * image from map an chart. + * + * @return HTML img element with SVG source as data in src attribute. + */ + public static ImageElement getApplicationLogo() { + if (LOGO_IMG.getSrc() == null || LOGO_IMG.getSrc().isEmpty()) { + final XMLHttpRequest xhr = new XMLHttpRequest(); + xhr.onload = e -> { + final String resp = xhr.responseText; + LOGO_IMG.setSrc("data:image/svg+xml;base64," + base64encode(resp)); + }; + xhr.open("GET", "app/img/logo_etat-agrometinfo.svg"); + xhr.send(); + } + return LOGO_IMG; + } + /** * @return root path of application. */ -- GitLab From 0632cdbc1e8114319edf4b08b5460ecc2f84ff2b Mon Sep 17 00:00:00 2001 From: Olivier Maury <Olivier.Maury@inrae.fr> Date: Wed, 31 Jul 2024 16:44:18 +0200 Subject: [PATCH 2/2] PMD --- .../fr/agrometinfo/www/client/util/ApplicationUtils.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java index 469f4ad..6317044 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java @@ -24,14 +24,6 @@ public final class ApplicationUtils { */ private static final ImageElement LOGO_IMG = Document.get().createImageElement(); - /** - * @param a base64-encoded string - * @return decoded string - */ - private static native String base64decode(String a) /*-{ - return window.atob(a); - }-*/; - /** * @param b string to encode * @return base64-encoded string -- GitLab