A recent change in getScrollLeft() normalize browsers to firefox's method of returning negative indexes in RTL mode. However, old mozilla does not do this automatically, so it also needs to be normalized.
Patch by: jlabanca
Review by: rjrjr
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5223 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java b/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
index ecf52fb..92cd7a3 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
@@ -66,6 +66,15 @@
}-*/;
@Override
+ public int getScrollLeft(Element elem) {
+ if (isRTL(elem)) {
+ return super.getScrollLeft(elem)
+ - (elem.getScrollWidth() - elem.getClientWidth());
+ }
+ return super.getScrollLeft(elem);
+ }
+
+ @Override
public native void setInnerText(Element elem, String text) /*-{
// Remove all children first.
while (elem.firstChild) {
@@ -76,7 +85,15 @@
elem.appendChild(elem.ownerDocument.createTextNode(text));
}
}-*/;
-
+
+ @Override
+ public void setScrollLeft(Element elem, int left) {
+ if (isRTL(elem)) {
+ left += elem.getScrollWidth() - elem.getClientWidth();
+ }
+ super.setScrollLeft(elem, left);
+ }
+
private native int getAbsoluteLeftImpl(Element viewport, Element elem) /*-{
var doc = elem.ownerDocument;
var style = doc.defaultView.getComputedStyle(elem, null);
@@ -114,4 +131,9 @@
return top + viewport.scrollTop;
}-*/;
+
+ private native boolean isRTL(Element elem) /*-{
+ var style = elem.ownerDocument.defaultView.getComputedStyle(elem, null);
+ return style.direction == 'rtl';
+ }-*/;
}