package it.cavallium.warppi.gui.graphicengine.html; import java.io.IOException; import java.io.InputStream; import org.apache.commons.lang3.ArrayUtils; import org.teavm.jso.browser.Window; import org.teavm.jso.dom.events.Event; import org.teavm.jso.dom.html.HTMLDocument; import org.teavm.jso.dom.html.HTMLImageElement; import it.cavallium.warppi.Engine; import it.cavallium.warppi.Platform.Semaphore; import it.cavallium.warppi.gui.graphicengine.GraphicEngine; import it.cavallium.warppi.gui.graphicengine.Skin; public class HtmlSkin implements Skin { private String url; private int[] skinSize; private boolean initd; private HTMLImageElement imgEl; public HtmlSkin(final String file) throws IOException { load(file); } @Override public void use(final GraphicEngine d) { if (d instanceof HtmlEngine) { if (!initd) initialize(d); ((HtmlEngine) d).getRenderer().currentSkin = this; } } @Override public void load(String file) throws IOException { url = Engine.getPlatform().getStorageUtils().getBasePath() + (!file.startsWith("/") ? "/" : "") + file; } @Override public void initialize(final GraphicEngine d) { final HTMLDocument doc = Window.current().getDocument(); Boolean[] done = new Boolean[]{false}; imgEl = doc.createElement("img").cast(); imgEl.addEventListener("load", (Event e) -> { done[0] = true; }); imgEl.setSrc(url); while (!done[0]) { try {Thread.sleep(15);} catch (Exception e) {} } skinSize = new int[] { imgEl.getNaturalWidth(), imgEl.getNaturalHeight() }; initd = true; } @Override public boolean isInitialized() { return initd; } @Override public int getSkinWidth() { return skinSize[0]; } @Override public int getSkinHeight() { return skinSize[1]; } public final String getUrl() { return url; } public final HTMLImageElement getImgElement() { return imgEl; } }