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
|
|
|
|
2018-10-23 17:28:05 +02:00
|
|
|
import org.apache.commons.lang3.ArrayUtils;
|
2018-09-04 12:12:41 +02:00
|
|
|
import org.teavm.jso.browser.Window;
|
2018-10-23 17:28:05 +02:00
|
|
|
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;
|
2018-10-23 17:28:05 +02:00
|
|
|
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 {
|
2018-10-23 17:28:05 +02:00
|
|
|
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();
|
2018-10-23 17:28:05 +02:00
|
|
|
ValueReference<Boolean> done = new ValueReference<Boolean>(false);
|
2018-09-04 12:12:41 +02:00
|
|
|
imgEl = doc.createElement("img").cast();
|
2018-10-23 17:28:05 +02:00
|
|
|
imgEl.addEventListener("load", (Event e) -> {
|
|
|
|
done.value = true;
|
|
|
|
});
|
2018-09-04 12:12:41 +02:00
|
|
|
imgEl.setSrc(url);
|
2018-10-23 17:28:05 +02:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|