From 6f985b1a8f939ec081443841741e9aa9caede6ee Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 7 May 2022 11:53:03 +0200 Subject: [PATCH] Use CMS bundle theme. --- .../OSGI-INF/cmsTheme.xml | 2 +- org.argeo.app.theme.default/bnd.bnd | 1 - .../argeo/app/ui/osgi/BundleSuiteTheme.java | 106 ------------------ sdk/argeo-build | 2 +- 4 files changed, 2 insertions(+), 109 deletions(-) delete mode 100644 org.argeo.app.ui/src/org/argeo/app/ui/osgi/BundleSuiteTheme.java diff --git a/org.argeo.app.theme.default/OSGI-INF/cmsTheme.xml b/org.argeo.app.theme.default/OSGI-INF/cmsTheme.xml index dde85b0..7d3c221 100644 --- a/org.argeo.app.theme.default/OSGI-INF/cmsTheme.xml +++ b/org.argeo.app.theme.default/OSGI-INF/cmsTheme.xml @@ -1,6 +1,6 @@ - + diff --git a/org.argeo.app.theme.default/bnd.bnd b/org.argeo.app.theme.default/bnd.bnd index dfaaa7a..48c9586 100644 --- a/org.argeo.app.theme.default/bnd.bnd +++ b/org.argeo.app.theme.default/bnd.bnd @@ -6,7 +6,6 @@ Private-Package: * Export-Package: !* Import-Package:\ -org.argeo.app.ui.osgi,\ org.argeo.cms.swt.osgi,\ javax.servlet.*;version="[3,5)",\ * \ No newline at end of file diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/osgi/BundleSuiteTheme.java b/org.argeo.app.ui/src/org/argeo/app/ui/osgi/BundleSuiteTheme.java deleted file mode 100644 index 10a67c5..0000000 --- a/org.argeo.app.ui/src/org/argeo/app/ui/osgi/BundleSuiteTheme.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.argeo.app.ui.osgi; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.System.Logger; -import java.lang.System.Logger.Level; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.apache.batik.transcoder.TranscoderException; -import org.apache.batik.transcoder.TranscoderInput; -import org.apache.batik.transcoder.TranscoderOutput; -import org.apache.batik.transcoder.image.ImageTranscoder; -import org.apache.batik.transcoder.image.PNGTranscoder; -import org.argeo.cms.swt.osgi.BundleCmsSwtTheme; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.widgets.Display; -import org.osgi.framework.BundleContext; - -/** Theme which can dynamically create icons from SVG data. */ -public class BundleSuiteTheme extends BundleCmsSwtTheme { - private final static Logger logger = System.getLogger(BundleSuiteTheme.class.getName()); - - private Map> imageCache = Collections.synchronizedMap(new HashMap<>()); - - private Map transcoders = Collections.synchronizedMap(new HashMap<>()); - - @Override - public Image getIcon(String name, Integer preferredSize) { - String path = "icons/types/svg/" + name + ".svg"; - return createImageFromSvg(path, preferredSize); - } - - protected Image createImageFromSvg(String path, Integer preferredSize) { - Image image = null; - if (imageCache.containsKey(path)) { - image = imageCache.get(path).get(preferredSize); - } - if (image != null) - return image; - ImageData imageData = loadFromSvg(path, preferredSize); - image = new Image(Display.getDefault(), imageData); - if (!imageCache.containsKey(path)) - imageCache.put(path, Collections.synchronizedMap(new HashMap<>())); - imageCache.get(path).put(preferredSize, image); - return image; - } - - protected ImageData loadFromSvg(String path, int size) { - ImageTranscoder transcoder = null; - synchronized (this) { - transcoder = transcoders.get(size); - if (transcoder == null) { - transcoder = new PNGTranscoder(); - transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, (float) size); - transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, (float) size); - transcoders.put(size, transcoder); - } - } - ImageData imageData; - try (InputStream in = getResourceAsStream(path); ByteArrayOutputStream out = new ByteArrayOutputStream();) { - if (in == null) - throw new IllegalArgumentException(path + " not found"); - TranscoderInput input = new TranscoderInput(in); - TranscoderOutput output = new TranscoderOutput(out); - transcoder.transcode(input, output); - try (InputStream imageIn = new ByteArrayInputStream(out.toByteArray())) { - imageData = new ImageData(imageIn); - } - logger.log(Level.DEBUG, () -> "Generated " + size + "x" + size + " PNG icon from " + path); - } catch (IOException | TranscoderException e) { - throw new RuntimeException("Cannot transcode SVG " + path, e); - } - - return imageData; - } - - @Override - public void init(BundleContext bundleContext, Map properties) { - super.init(bundleContext, properties); - - // preload all icons -// paths: for (String p : getImagesPaths()) { -// if (!p.endsWith(".svg")) -// continue paths; -// createImageFromSvg(p, getDefaultIconSize()); -// } - } - - @Override - public void destroy(BundleContext bundleContext, Map properties) { - Display display = Display.getDefault(); - if (display != null) - for (String path : imageCache.keySet()) { - for (Image image : imageCache.get(path).values()) { - display.syncExec(() -> image.dispose()); - } - } - super.destroy(bundleContext, properties); - } - -} diff --git a/sdk/argeo-build b/sdk/argeo-build index 2cb8a40..0d5780a 160000 --- a/sdk/argeo-build +++ b/sdk/argeo-build @@ -1 +1 @@ -Subproject commit 2cb8a40febfe1b42ab2aebecbf6e0ec06b2c5e4d +Subproject commit 0d5780a1346ab30294998a894fe8b63d1de9f5d6 -- 2.30.2