package com.akjava.gwt.hangout.soundplayer.client; import com.akjava.gwt.hangout.soundplayer.client.resources.Bundles; import com.akjava.gwt.html5.client.file.File; import com.akjava.gwt.html5.client.file.FileHandler; import com.akjava.gwt.html5.client.file.FileReader; import com.akjava.gwt.html5.client.file.FileUploadForm; import com.akjava.gwt.html5.client.file.FileUtils; import com.akjava.gwt.lib.hangouts.client.Hangout; import com.akjava.gwt.lib.hangouts.client.av.Av; import com.akjava.gwt.lib.hangoutsutils.client.SimpleGadget; import com.google.gwt.canvas.client.Canvas; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.ImageElement; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.RootLayoutPanel; import com.google.gwt.user.client.ui.VerticalPanel; public class ExtraTest extends VerticalPanel { private Image img; private Canvas canvas; private String dataUri; public ExtraTest(){ try{ canvas = Canvas.createIfSupported(); canvas.setSize("200px","200px"); add(canvas); Timer timer=new Timer(){//Use timer to delay loading public void run(){ String imageUrl="http://www.xucker.jpn.org/test/resources/cat.png"; img = new Image(imageUrl); //img = new Image(Bundles.instance.test()); img.setVisible(false); SimpleGadget.log("start-load"); img.addLoadHandler(new LoadHandler() { @Override public void onLoad(LoadEvent event) { imageLoaded(); } }); RootLayoutPanel.get().add(img); } }; timer.schedule(1000); final FileUploadForm upload=new FileUploadForm(); add(upload); upload.getFileUpload().addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { JsArray<File> file=FileUtils.toFile(event.getNativeEvent()); final FileReader reader=FileReader.createFileReader(); reader.setOnLoad(new FileHandler() { @Override public void onLoad() { dataUri=reader.getResultAsString(); //SimpleGadget.log(dataUri); imageLoaded(dataUri); upload.reset(); } }); reader.readAsDataURL(file.get(0)); } }); }catch(Exception e){ SimpleGadget.log(e.getMessage()); } } private void imageLoaded(String dataUri){ try{ //data-uri can load //http://stackoverflow.com/questions/3328906/erasing-in-html5-canvas canvas.getContext2d().drawImage(ImageElement.as(new Image(dataUri).getElement()), 0, 0,100,100); canvas.getContext2d().setStrokeStyle("rgba(0,0,0,0)"); SimpleGadget.log(canvas.getContext2d().getGlobalCompositeOperation()); canvas.getContext2d().setGlobalCompositeOperation("destination-out");//for Erase canvas.getContext2d().fillRect(50, 50, 25, 25); //RootLayoutPanel.get().remove(img); //Av.setAvatar(Hangout.getParticipantId(), "http://www.xucker.jpn.org/test/resources/cat.png"); Av.setAvatar(Hangout.getParticipantId(), canvas.toDataUrl()); canvas.getContext2d().setGlobalCompositeOperation("source-over"); }catch(Exception e){ SimpleGadget.log(e.getMessage()); } } private void imageLoaded(){ SimpleGadget.log("image-url:"+img.getUrl()); canvas.getContext2d().drawImage(ImageElement.as(img.getElement()), 0, 0); RootLayoutPanel.get().remove(img); try{ //Av.setAvatar(Hangout.getParticipantId(), "http://www.xucker.jpn.org/test/resources/cat.png"); // Av.setAvatar(Hangout.getParticipantId(), canvas.toDataUrl()); //SECURITY_ERR: DOM Exception 18 }catch(Exception e){ SimpleGadget.log(e.getMessage()); } } }