Author: [email protected]
Date: Wed May 20 06:50:05 2009
New Revision: 5440
Modified:
releases/1.6/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
releases/1.6/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
releases/1.6/user/src/com/google/gwt/dom/client/DOMImplSafari.java
releases/1.6/user/test/com/google/gwt/dom/client/ElementTest.java
Log:
Merging /trunk r5230 into /releases/1.6.
Modified:
releases/1.6/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
==============================================================================
--- releases/1.6/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
(original)
+++ releases/1.6/user/src/com/google/gwt/dom/client/DOMImplMozilla.java Wed
May 20 06:50:05 2009
@@ -15,6 +15,7 @@
*/
package com.google.gwt.dom.client;
+
/**
* Mozilla implementation of StandardBrowser.
*/
@@ -66,6 +67,15 @@
}-*/;
@Override
+ public int getScrollLeft(Element elem) {
+ if (!isGecko19() && isRTL(elem)) {
+ return super.getScrollLeft(elem)
+ - (elem.getScrollWidth() - elem.getClientWidth());
+ }
+ return super.getScrollLeft(elem);
+ }
+
+ @Override
public native boolean isOrHasChild(Element parent, Element child) /*-{
// For more information about compareDocumentPosition, see:
// http://www.quirksmode.org/blog/archives/2006/01/contains_for_mo.html
@@ -78,6 +88,14 @@
}-*/;
@Override
+ public void setScrollLeft(Element elem, int left) {
+ if (!isGecko19() && isRTL(elem)) {
+ left += elem.getScrollWidth() - elem.getClientWidth();
+ }
+ super.setScrollLeft(elem, left);
+ }
+
+ @Override
public native String toString(Element elem) /*-{
// Basic idea is to use the innerHTML property by copying the node
into a
// div and getting the innerHTML
@@ -130,5 +148,21 @@
return doc.getBoxObjectFor(elem).screenY -
doc.getBoxObjectFor(doc.documentElement).screenY;
}
+ }-*/;
+
+ private native boolean isGecko19() /*-{
+ var result =
/rv:([0-9]+)\.([0-9]+)/.exec(navigator.userAgent.toLowerCase());
+ if (result && result.length == 3) {
+ var version = (parseInt(result[1]) * 1000) + parseInt(result[2]);
+ if (version >= 1009) {
+ return true;
+ }
+ }
+ return false;
+ }-*/;
+
+ private native boolean isRTL(Element elem) /*-{
+ var style = elem.ownerDocument.defaultView.getComputedStyle(elem,
null);
+ return style.direction == 'rtl';
}-*/;
}
Modified:
releases/1.6/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
==============================================================================
--- releases/1.6/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
(original)
+++ releases/1.6/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
Wed May 20 06:50:05 2009
@@ -64,7 +64,7 @@
elem.appendChild(elem.ownerDocument.createTextNode(text));
}
}-*/;
-
+
private native int getAbsoluteLeftImpl(Element viewport, Element elem)
/*-{
var doc = elem.ownerDocument;
var style = doc.defaultView.getComputedStyle(elem, null);
Modified: releases/1.6/user/src/com/google/gwt/dom/client/DOMImplSafari.java
==============================================================================
--- releases/1.6/user/src/com/google/gwt/dom/client/DOMImplSafari.java
(original)
+++ releases/1.6/user/src/com/google/gwt/dom/client/DOMImplSafari.java Wed
May 20 06:50:05 2009
@@ -236,6 +236,6 @@
}
private native boolean isRTL(Element elem) /*-{
- return $wnd.getComputedStyle(elem).direction == 'rtl';
+ return
elem.ownerDocument.defaultView.getComputedStyle(elem, '').direction
== 'rtl';
}-*/;
}
Modified: releases/1.6/user/test/com/google/gwt/dom/client/ElementTest.java
==============================================================================
--- releases/1.6/user/test/com/google/gwt/dom/client/ElementTest.java
(original)
+++ releases/1.6/user/test/com/google/gwt/dom/client/ElementTest.java Wed
May 20 06:50:05 2009
@@ -142,13 +142,23 @@
// correctly in RTL mode.
outer.getStyle().setProperty("overflow", "scroll");
+ inner.getStyle().setProperty("position", "absolute");
+ inner.getStyle().setProperty("top", "0px");
+ inner.getStyle().setProperty("left", "0px");
+ inner.getStyle().setProperty("right", "0px");
inner.getStyle().setProperty("marginTop", "800px");
inner.getStyle().setProperty("marginRight", "800px");
outer.appendChild(inner);
Document.get().getBody().appendChild(outer);
- inner.setInnerText(":-)");
outer.setDir("rtl");
+
+ // FF2 does not render scroll bars reliably in RTL, so we set a large
+ // content to force the scroll bars.
+ String content = "ssssssssssssssssssssssssssssssssssssssssssssssssssss"
+ + "sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"
+
+ "sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss";
+ inner.setInnerText(content);
// The important thing is that setting and retrieving scrollLeft
values in
// RTL mode works only for negative numbers, and that they round-trip
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---