WarpPI/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlSkin.java

87 lines
2.1 KiB
Java
Raw Normal View History

2018-09-04 12:12:41 +02:00
package it.cavallium.warppi.gui.graphicengine.html;
import java.io.IOException;
2018-09-11 01:12:54 +02:00
import java.io.InputStream;
2018-09-04 12:12:41 +02:00
import org.apache.commons.lang3.ArrayUtils;
2018-09-04 12:12:41 +02:00
import org.teavm.jso.browser.Window;
import org.teavm.jso.dom.events.Event;
2018-09-04 12:12:41 +02:00
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.flow.BehaviorSubject;
import it.cavallium.warppi.flow.SimpleSubject;
import it.cavallium.warppi.flow.Subject;
import it.cavallium.warppi.flow.ValueReference;
2018-09-04 12:12:41 +02:00
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;
2018-09-22 11:17:30 +02:00
public HtmlSkin(final String file) throws IOException {
2018-09-04 12:12:41 +02:00
load(file);
}
2018-09-22 11:17:30 +02:00
@Override
public void use(final GraphicEngine d) {
2018-09-04 12:12:41 +02:00
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;
2018-09-04 12:12:41 +02:00
}
@Override
2018-09-22 11:17:30 +02:00
public void initialize(final GraphicEngine d) {
final HTMLDocument doc = Window.current().getDocument();
ValueReference<Boolean> done = new ValueReference<Boolean>(false);
2018-09-04 12:12:41 +02:00
imgEl = doc.createElement("img").cast();
imgEl.addEventListener("load", (Event e) -> {
done.value = true;
});
2018-09-04 12:12:41 +02:00
imgEl.setSrc(url);
while (!done.value) {
try {Thread.sleep(15);} catch (Exception e) {}
}
skinSize = new int[] { imgEl.getNaturalWidth(), imgEl.getNaturalHeight() };
2018-09-04 12:12:41 +02:00
initd = true;
}
@Override
public boolean isInitialized() {
return initd;
}
@Override
public int getSkinWidth() {
return skinSize[0];
}
@Override
public int getSkinHeight() {
return skinSize[1];
}
2018-09-22 11:17:30 +02:00
2018-09-04 12:12:41 +02:00
public final String getUrl() {
return url;
2018-09-22 11:17:30 +02:00
}
2018-09-04 12:12:41 +02:00
public final HTMLImageElement getImgElement() {
return imgEl;
}
}