Brian Slesinsky has submitted this change and it was merged.
Change subject: Fix support for Document.{get,set}ScrollLeft() in RTL for
safari and ie9.
......................................................................
Fix support for Document.{get,set}ScrollLeft() in RTL for safari and ie9.
Change-Id: I8ce64ab4bbbae02ee7519ed8d24241cdfbc28617
Review-Link: https://gwt-review.googlesource.com/#/c/3420/
---
M user/src/com/google/gwt/dom/client/DOMImplIE9.java
M user/src/com/google/gwt/dom/client/DOMImplStandardBase.java
M user/test/com/google/gwt/dom/client/ElementTest.java
3 files changed, 41 insertions(+), 2 deletions(-)
Approvals:
Leeroy Jenkins: Verified
Brian Slesinsky: Verified; Looks good to me, approved
diff --git a/user/src/com/google/gwt/dom/client/DOMImplIE9.java
b/user/src/com/google/gwt/dom/client/DOMImplIE9.java
index 6564bb2..a49c651 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplIE9.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplIE9.java
@@ -91,6 +91,11 @@
setScrollLeftImpl(elem, left);
}
+ @Override
+ public void setScrollLeft(Document doc, int left) {
+ setScrollLeft(doc.getDocumentElement(), left);
+ }
+
protected native int getBoundingClientRectLeft(Element elem) /*-{
// getBoundingClientRect() throws a JS exception if the elem is not
attached
// to the document, so we wrap it in a try/catch block
diff --git a/user/src/com/google/gwt/dom/client/DOMImplStandardBase.java
b/user/src/com/google/gwt/dom/client/DOMImplStandardBase.java
index 5d698f7..acd9c0a 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplStandardBase.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplStandardBase.java
@@ -223,7 +223,7 @@
@Override
public int getScrollLeft(Element elem) {
- if (isRTL(elem)) {
+ if (!elem.hasTagName(BodyElement.TAG) && isRTL(elem)) {
return super.getScrollLeft(elem)
- (elem.getScrollWidth() - elem.getClientWidth());
}
@@ -253,7 +253,7 @@
@Override
public void setScrollLeft(Element elem, int left) {
- if (isRTL(elem)) {
+ if (!elem.hasTagName(BodyElement.TAG) && isRTL(elem)) {
left += elem.getScrollWidth() - elem.getClientWidth();
}
super.setScrollLeft(elem, left);
diff --git a/user/test/com/google/gwt/dom/client/ElementTest.java
b/user/test/com/google/gwt/dom/client/ElementTest.java
index c4a2acf..23d19f0 100644
--- a/user/test/com/google/gwt/dom/client/ElementTest.java
+++ b/user/test/com/google/gwt/dom/client/ElementTest.java
@@ -599,6 +599,40 @@
assertEquals(0, outer.getScrollLeft());
}
+ @DoNotRunWith({Platform.HtmlUnitLayout})
+ public void testDocumentScrollLeftInRtl() {
+ Document.get().getDocumentElement().setDir("rtl");
+ Document.get().getBody().getStyle().setProperty("direction", "rtl");
+
+ final DivElement bigdiv = Document.get().createDivElement();
+
+ bigdiv.getStyle().setProperty("position", "absolute");
+ bigdiv.getStyle().setProperty("top", "0px");
+ bigdiv.getStyle().setProperty("right", "0px");
+ bigdiv.getStyle().setProperty("width", "10000px"); // Bigger than
window size.
+ bigdiv.getStyle().setProperty("height", "400px");
+
+ Document.get().getBody().appendChild(bigdiv);
+
+ // The important thing is that setting and retrieving scrollLeft
values in
+ // RTL mode works only for negative numbers, and that they round-trip
+ // correctly.
+ try {
+ assertEquals(0, Document.get().getScrollLeft());
+
+ Document.get().setScrollLeft(-32);
+ assertEquals(-32, Document.get().getScrollLeft());
+
+ Document.get().setScrollLeft(32);
+ assertEquals(0, Document.get().getScrollLeft());
+ } finally {
+ // Restore direction unconditionally to not break all other tests.
+ Document.get().getBody().removeChild(bigdiv);
+ Document.get().getBody().getStyle().setProperty("direction", "ltr");
+ Document.get().getDocumentElement().setDir("ltr");
+ }
+ }
+
/**
* innerHTML.
*/
--
To view, visit https://gwt-review.googlesource.com/3420
To unsubscribe, visit https://gwt-review.googlesource.com/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I8ce64ab4bbbae02ee7519ed8d24241cdfbc28617
Gerrit-PatchSet: 4
Gerrit-Project: gwt
Gerrit-Branch: master
Gerrit-Owner: Emmanuel Pellereau <[email protected]>
Gerrit-Reviewer: Brian Slesinsky <[email protected]>
Gerrit-Reviewer: Emmanuel Pellereau <[email protected]>
Gerrit-Reviewer: Leeroy Jenkins <[email protected]>
Gerrit-Reviewer: Thomas Broyer <[email protected]>
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors
---
You received this message because you are subscribed to the Google Groups "GWT Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.