Fix for issue where Image(Element element) does not initialize the initial ClippedState. http://gwt-code-reviews.appspot.com/1370804/ Issue: 5998 Author: david.nouls Review by: jlabanca git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9803 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/Image.java b/user/src/com/google/gwt/user/client/ui/Image.java index b057c2c..2c074d8 100644 --- a/user/src/com/google/gwt/user/client/ui/Image.java +++ b/user/src/com/google/gwt/user/client/ui/Image.java
@@ -409,7 +409,6 @@ assert Document.get().getBody().isOrHasChild(element); Image image = new Image(element); - image.changeState(new UnclippedState(element)); // Mark it attached and remember it for cleanup. image.onAttach(); @@ -481,6 +480,7 @@ protected Image(Element element) { ImageElement.as(element); setElement(element); + changeState(new UnclippedState(element)); } public HandlerRegistration addClickHandler(ClickHandler handler) {
diff --git a/user/test/com/google/gwt/user/client/ui/ImageTest.java b/user/test/com/google/gwt/user/client/ui/ImageTest.java index d32d411..7007839 100644 --- a/user/test/com/google/gwt/user/client/ui/ImageTest.java +++ b/user/test/com/google/gwt/user/client/ui/ImageTest.java
@@ -18,6 +18,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Element; import com.google.gwt.event.dom.client.ErrorEvent; import com.google.gwt.event.dom.client.ErrorHandler; import com.google.gwt.event.dom.client.LoadEvent; @@ -50,6 +51,25 @@ } } + private static class TestImage extends Image { + public TestImage(Element element) { + super(element); + } + + public static TestImage wrap(Element element) { + // Assert that the element is attached. + assert Document.get().getBody().isOrHasChild(element); + + TestImage image = new TestImage(element); + + // Mark it attached and remember it for cleanup. + image.onAttach(); + RootPanel.detachOnWindowClose(image); + + return image; + } + } + private abstract static class TestLoadHandler implements LoadHandler { private boolean finished = false; @@ -557,6 +577,23 @@ } /** + * Tests that it is possible to make a subclass of Image that can be wrapped. + */ + public void testWrapOfSubclass() { + String uid = Document.get().createUniqueId(); + DivElement div = Document.get().createDivElement(); + div.setInnerHTML("<img id='" + uid + "' src='counting-forward.png'>"); + Document.get().getBody().appendChild(div); + + final TestImage image = TestImage.wrap(Document.get().getElementById(uid)); + assertNotNull(image); + + // Cleanup. + Document.get().getBody().appendChild(div); + RootPanel.detachNow(image); + } + + /** * Tests that wrapping an existing DOM element works if you call * setUrlAndVisibleRect() on it. */