Author: jlaba...@google.com Date: Tue Apr 14 09:10:36 2009 New Revision: 5231
Modified: branches/snapshot-2009.03.30-r5111/branch-info.txt branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplMozilla.java branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplSafari.java branches/snapshot-2009.03.30-r5111/user/test/com/google/gwt/dom/client/ElementTest.java Log: Merging tr...@5229:5230 into 2009-03-30 release branch. - Fixes a scrollLeft bug in FF2 in RTL that was recently fixed only for Old Mozilla. svn merge -r 5229:5230 https://google-web-toolkit.googlecode.com/svn/trunk . Patch by: jlabanca Modified: branches/snapshot-2009.03.30-r5111/branch-info.txt ============================================================================== --- branches/snapshot-2009.03.30-r5111/branch-info.txt (original) +++ branches/snapshot-2009.03.30-r5111/branch-info.txt Tue Apr 14 09:10:36 2009 @@ -10,4 +10,5 @@ Added imports to GenerateJavaAST so it would compile (r5138) A rollback of /tr...@c5075 was merged (r5198) into this branch to undo a compiler bug breaking custom field serializers /trunk/@5215:5216 was merged (r5217) into this branch to fix a scrollLeft bug in RTL -/trunk/@5222:5223 was merged (r????) into this branch to fix a scrollLeft bug in OldMozilla RTL +/trunk/@5222:5223 was merged (r5224) into this branch to fix a scrollLeft bug in OldMozilla RTL +/trunk/@5229:5230 was merged (r????) into this branch to fix a scrollLeft RTL bug in FF2 (same as the OldMozilla bug) Modified: branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplMozilla.java ============================================================================== --- branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplMozilla.java (original) +++ branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplMozilla.java Tue Apr 14 09:10:36 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: branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java ============================================================================== --- branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java (original) +++ branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java Tue Apr 14 09:10:36 2009 @@ -66,15 +66,6 @@ }-*/; @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) { @@ -86,14 +77,6 @@ } }-*/; - @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); @@ -130,10 +113,5 @@ } return top + viewport.scrollTop; - }-*/; - - private native boolean isRTL(Element elem) /*-{ - var style = elem.ownerDocument.defaultView.getComputedStyle(elem, null); - return style.direction == 'rtl'; }-*/; } Modified: branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplSafari.java ============================================================================== --- branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplSafari.java (original) +++ branches/snapshot-2009.03.30-r5111/user/src/com/google/gwt/dom/client/DOMImplSafari.java Tue Apr 14 09:10:36 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: branches/snapshot-2009.03.30-r5111/user/test/com/google/gwt/dom/client/ElementTest.java ============================================================================== --- branches/snapshot-2009.03.30-r5111/user/test/com/google/gwt/dom/client/ElementTest.java (original) +++ branches/snapshot-2009.03.30-r5111/user/test/com/google/gwt/dom/client/ElementTest.java Tue Apr 14 09:10:36 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 -~----------~----~----~----~------~----~------~--~---