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.
*/