WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-132895-20140514080344.patch (text/plain), 128.45 KB, created by
alan
on 2014-05-14 08:04:08 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
alan
Created:
2014-05-14 08:04:08 PDT
Size:
128.45 KB
patch
obsolete
>Subversion Revision: 168835 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 5aba34d8ecca302e9dc63119ee16e38a1601579b..215c796b7302b9e0212f0d0b59c2a81b37a7f55a 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,58 @@ >+2014-05-14 Zalan Bujtas <zalan@apple.com> >+ >+ Subpixel layout: Change Element.offset* client* scroll* return type to double. >+ https://bugs.webkit.org/show_bug.cgi?id=132895 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This patch changes Element.offset*, Element.client* and Element.scroll* APIs return >+ type from long to double to match the latest CSSOM View Module spec[1]. >+ Element.offset* and Element.client* do return subpixel values from now on. >+ Element.scroll* still return integral values as the scrolling code hasn't adopted to subpixel rendering yet. >+ >+ subpixelCSSOMElementMetricsEnabled setting is added to be able to turn this feature on/off >+ from Safari's debug menu. It toggles the return value from subpixel to floored integral. >+ It does not change layout/rendering behavior. >+ >+ Reference list of what other browsers do: >+ IE: http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx >+ Blink: http://www.chromestatus.com/features/5497402177880064 >+ Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=825607 >+ >+ [1] http://www.w3.org/TR/2013/WD-cssom-view-20131217/ >+ >+ Test: cssom/subpixel-offsetleft-top-width-height-values.html >+ >+ * dom/Element.cpp: >+ (WebCore::adjustForLocalZoom): >+ (WebCore::convertToNonSubpixelValueIfNeeded): >+ (WebCore::Element::offsetLeft): >+ (WebCore::Element::offsetTop): >+ (WebCore::Element::offsetWidth): >+ (WebCore::Element::offsetHeight): >+ (WebCore::Element::clientLeft): >+ (WebCore::Element::clientTop): >+ (WebCore::Element::clientWidth): >+ (WebCore::Element::clientHeight): >+ (WebCore::Element::scrollLeft): >+ (WebCore::Element::scrollTop): >+ (WebCore::Element::setScrollLeft): >+ (WebCore::Element::setScrollTop): >+ (WebCore::Element::scrollWidth): >+ (WebCore::Element::scrollHeight): >+ * dom/Element.h: >+ * dom/Element.idl: >+ * html/HTMLBodyElement.cpp: >+ (WebCore::adjustForZoom): >+ (WebCore::HTMLBodyElement::scrollLeft): >+ (WebCore::HTMLBodyElement::setScrollLeft): >+ (WebCore::HTMLBodyElement::scrollTop): >+ (WebCore::HTMLBodyElement::setScrollTop): >+ (WebCore::HTMLBodyElement::scrollHeight): >+ (WebCore::HTMLBodyElement::scrollWidth): >+ * html/HTMLBodyElement.h: >+ * page/Settings.in: >+ > 2014-05-14 Antti Koivisto <antti@apple.com> > > RuleData should ref the StyleRule >diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index 21404b2c422d1cebd10a04b734e35724f46012b5..685162945357b7d9082e45e834944af4ae7557e2 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,34 @@ >+2014-05-14 Zalan Bujtas <zalan@apple.com> >+ >+ Subpixel layout: Change Element.offset* client* scroll* return type to double. >+ https://bugs.webkit.org/show_bug.cgi?id=132895 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This patch changes Element.offset*, Element.client* and Element.scroll* APIs return >+ type from long to double to match the latest CSSOM View Module spec[1]. >+ Element.offset* and Element.client* do return subpixel values from now on. >+ Element.scroll* still return integral values as the scrolling code hasn't adopted to subpixel rendering yet. >+ >+ subpixelCSSOMElementMetricsEnabled setting is added to be able to turn this feature on/off >+ from Safari's debug menu. It toggles the return value from subpixel to floored integral. >+ It does not change layout/rendering behavior. >+ >+ Reference list of what other browsers do: >+ IE: http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx >+ Blink: http://www.chromestatus.com/features/5497402177880064 >+ Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=825607 >+ >+ [1] http://www.w3.org/TR/2013/WD-cssom-view-20131217/ >+ >+ * Shared/WebPreferencesStore.h: >+ * UIProcess/API/C/WKPreferences.cpp: >+ (WKPreferencesSetSubpixelCSSOMElementMetricsEnabled): >+ (WKPreferencesGetSubpixelCSSOMElementMetricsEnabled): >+ * UIProcess/API/C/WKPreferencesRefPrivate.h: >+ * WebProcess/WebPage/WebPage.cpp: >+ (WebKit::WebPage::updatePreferences): >+ > 2014-05-13 Gyuyoung Kim <gyuyoung.kim@samsung.com> > > [EFL][WK2] Add ewk_view_fixed_layout_size_set|get() >diff --git a/Source/WebCore/dom/Element.cpp b/Source/WebCore/dom/Element.cpp >index 049fb4a5ad95f0facf65a78034857b3728a8d86d..9db725bbac02f0c4079c65ad4193a8f634ed6511 100644 >--- a/Source/WebCore/dom/Element.cpp >+++ b/Source/WebCore/dom/Element.cpp >@@ -621,16 +621,16 @@ void Element::scrollByPages(int pages) > scrollByUnits(pages, ScrollByPage); > } > >-static float localZoomForRenderer(RenderElement* renderer) >+static float localZoomForRenderer(const RenderElement& renderer) > { > // FIXME: This does the wrong thing if two opposing zooms are in effect and canceled each > // other out, but the alternative is that we'd have to crawl up the whole render tree every > // time (or store an additional bit in the RenderStyle to indicate that a zoom was specified). > float zoomFactor = 1; >- if (renderer->style().effectiveZoom() != 1) { >+ if (renderer.style().effectiveZoom() != 1) { > // Need to find the nearest enclosing RenderElement that set up > // a differing zoom, and then we divide our result by it to eliminate the zoom. >- RenderElement* prev = renderer; >+ const RenderElement* prev = &renderer; > for (RenderElement* curr = prev->parent(); curr; curr = curr->parent()) { > if (curr->style().effectiveZoom() != prev->style().effectiveZoom()) { > zoomFactor = prev->style().zoom(); >@@ -644,57 +644,63 @@ static float localZoomForRenderer(RenderElement* renderer) > return zoomFactor; > } > >-static int adjustForLocalZoom(LayoutUnit value, RenderElement* renderer) >+static double adjustForLocalZoom(LayoutUnit value, const RenderElement& renderer) > { > float zoomFactor = localZoomForRenderer(renderer); > if (zoomFactor == 1) >- return value; >+ return value.toDouble(); > #if ENABLE(SUBPIXEL_LAYOUT) >- return lroundf(value / zoomFactor); >+ return value.toDouble() / zoomFactor; > #else > // Needed because computeLengthInt truncates (rather than rounds) when scaling up. > if (zoomFactor > 1) > ++value; >- return static_cast<int>(value / zoomFactor); >+ return value.toDouble() / zoomFactor; > #endif > } > >-int Element::offsetLeft() >+static double convertToNonSubpixelValueIfNeeded(double value, const Document& document) >+{ >+ return document.settings() && !document.settings()->subpixelCSSOMElementMetricsEnabled() ? floor(value) : value; >+} >+ >+double Element::offsetLeft() > { > document().updateLayoutIgnorePendingStylesheets(); > if (RenderBoxModelObject* renderer = renderBoxModelObject()) >- return adjustForLocalZoom(renderer->pixelSnappedOffsetLeft(), renderer); >+ return convertToNonSubpixelValueIfNeeded(adjustForLocalZoom(renderer->offsetLeft(), *renderer), renderer->document()); > return 0; > } > >-int Element::offsetTop() >+double Element::offsetTop() > { > document().updateLayoutIgnorePendingStylesheets(); > if (RenderBoxModelObject* renderer = renderBoxModelObject()) >- return adjustForLocalZoom(renderer->pixelSnappedOffsetTop(), renderer); >+ return convertToNonSubpixelValueIfNeeded(adjustForLocalZoom(renderer->offsetTop(), *renderer), renderer->document()); > return 0; > } > >-int Element::offsetWidth() >+double Element::offsetWidth() > { > document().updateLayoutIgnorePendingStylesheets(); >- if (RenderBoxModelObject* renderer = renderBoxModelObject()) >+ if (RenderBoxModelObject* renderer = renderBoxModelObject()) { > #if ENABLE(SUBPIXEL_LAYOUT) >- return adjustLayoutUnitForAbsoluteZoom(renderer->pixelSnappedOffsetWidth(), *renderer).round(); >+ return convertToNonSubpixelValueIfNeeded(adjustLayoutUnitForAbsoluteZoom(renderer->offsetWidth(), *renderer).toDouble(), renderer->document()); > #else >- return adjustForAbsoluteZoom(renderer->pixelSnappedOffsetWidth(), *renderer); >+ return adjustForAbsoluteZoom(renderer->offsetWidth(), *renderer); > #endif >+ } > return 0; > } > >-int Element::offsetHeight() >+double Element::offsetHeight() > { > document().updateLayoutIgnorePendingStylesheets(); > if (RenderBoxModelObject* renderer = renderBoxModelObject()) > #if ENABLE(SUBPIXEL_LAYOUT) >- return adjustLayoutUnitForAbsoluteZoom(renderer->pixelSnappedOffsetHeight(), *renderer).round(); >+ return convertToNonSubpixelValueIfNeeded(adjustLayoutUnitForAbsoluteZoom(renderer->offsetHeight(), *renderer).toDouble(), renderer->document()); > #else >- return adjustForAbsoluteZoom(renderer->pixelSnappedOffsetHeight(), *renderer); >+ return adjustForAbsoluteZoom(renderer->offsetHeight(), *renderer); > #endif > return 0; > } >@@ -719,25 +725,33 @@ Element* Element::offsetParent() > return offsetParent->element(); > } > >-int Element::clientLeft() >+double Element::clientLeft() > { > document().updateLayoutIgnorePendingStylesheets(); > > if (RenderBox* renderer = renderBox()) >- return adjustForAbsoluteZoom(roundToInt(renderer->clientLeft()), *renderer); >+#if ENABLE(SUBPIXEL_LAYOUT) >+ return convertToNonSubpixelValueIfNeeded(adjustLayoutUnitForAbsoluteZoom(renderer->clientLeft(), *renderer).toDouble(), renderer->document()); >+#else >+ return adjustForAbsoluteZoom(renderer->clientLeft(), *renderer); >+#endif > return 0; > } > >-int Element::clientTop() >+double Element::clientTop() > { > document().updateLayoutIgnorePendingStylesheets(); > > if (RenderBox* renderer = renderBox()) >- return adjustForAbsoluteZoom(roundToInt(renderer->clientTop()), *renderer); >+#if ENABLE(SUBPIXEL_LAYOUT) >+ return convertToNonSubpixelValueIfNeeded(adjustLayoutUnitForAbsoluteZoom(renderer->clientTop(), *renderer).toDouble(), renderer->document()); >+#else >+ return adjustForAbsoluteZoom(renderer->clientTop(), *renderer); >+#endif > return 0; > } > >-int Element::clientWidth() >+double Element::clientWidth() > { > document().updateLayoutIgnorePendingStylesheets(); > >@@ -753,14 +767,14 @@ int Element::clientWidth() > > if (RenderBox* renderer = renderBox()) > #if ENABLE(SUBPIXEL_LAYOUT) >- return adjustLayoutUnitForAbsoluteZoom(renderer->pixelSnappedClientWidth(), *renderer).round(); >+ return convertToNonSubpixelValueIfNeeded(adjustLayoutUnitForAbsoluteZoom(renderer->clientWidth(), *renderer).toDouble(), renderer->document()); > #else >- return adjustForAbsoluteZoom(renderer->pixelSnappedClientWidth(), *renderer); >+ return adjustForAbsoluteZoom(renderer->clientWidth(), *renderer); > #endif > return 0; > } > >-int Element::clientHeight() >+double Element::clientHeight() > { > document().updateLayoutIgnorePendingStylesheets(); > >@@ -776,14 +790,14 @@ int Element::clientHeight() > > if (RenderBox* renderer = renderBox()) > #if ENABLE(SUBPIXEL_LAYOUT) >- return adjustLayoutUnitForAbsoluteZoom(renderer->pixelSnappedClientHeight(), *renderer).round(); >+ return convertToNonSubpixelValueIfNeeded(adjustLayoutUnitForAbsoluteZoom(renderer->clientHeight(), *renderer).toDouble(), renderer->document()); > #else >- return adjustForAbsoluteZoom(renderer->pixelSnappedClientHeight(), *renderer); >+ return adjustForAbsoluteZoom(renderer->clientHeight(), *renderer); > #endif > return 0; > } > >-int Element::scrollLeft() >+double Element::scrollLeft() > { > document().updateLayoutIgnorePendingStylesheets(); > >@@ -792,7 +806,7 @@ int Element::scrollLeft() > return 0; > } > >-int Element::scrollTop() >+double Element::scrollTop() > { > document().updateLayoutIgnorePendingStylesheets(); > >@@ -801,29 +815,29 @@ int Element::scrollTop() > return 0; > } > >-void Element::setScrollLeft(int newLeft) >+void Element::setScrollLeft(double newLeft) > { > document().updateLayoutIgnorePendingStylesheets(); > > if (RenderBox* renderer = renderBox()) { >- renderer->setScrollLeft(static_cast<int>(newLeft * renderer->style().effectiveZoom())); >+ renderer->setScrollLeft(round(newLeft * renderer->style().effectiveZoom())); > if (auto* scrollableArea = renderer->layer()) > scrollableArea->setScrolledProgrammatically(true); > } > } > >-void Element::setScrollTop(int newTop) >+void Element::setScrollTop(double newTop) > { > document().updateLayoutIgnorePendingStylesheets(); > > if (RenderBox* renderer = renderBox()) { >- renderer->setScrollTop(static_cast<int>(newTop * renderer->style().effectiveZoom())); >+ renderer->setScrollTop(round(newTop * renderer->style().effectiveZoom())); > if (auto* scrollableArea = renderer->layer()) > scrollableArea->setScrolledProgrammatically(true); > } > } > >-int Element::scrollWidth() >+double Element::scrollWidth() > { > document().updateLayoutIgnorePendingStylesheets(); > if (RenderBox* rend = renderBox()) >@@ -831,7 +845,7 @@ int Element::scrollWidth() > return 0; > } > >-int Element::scrollHeight() >+double Element::scrollHeight() > { > document().updateLayoutIgnorePendingStylesheets(); > if (RenderBox* rend = renderBox()) >diff --git a/Source/WebCore/dom/Element.h b/Source/WebCore/dom/Element.h >index 07ea6845f77d174f70443e08cb50ea27dd84b2f2..a4cee0163cf01311c986616ba5b9c702058e2523 100644 >--- a/Source/WebCore/dom/Element.h >+++ b/Source/WebCore/dom/Element.h >@@ -206,26 +206,26 @@ public: > void scrollByLines(int lines); > void scrollByPages(int pages); > >- int offsetLeft(); >- int offsetTop(); >- int offsetWidth(); >- int offsetHeight(); >+ double offsetLeft(); >+ double offsetTop(); >+ double offsetWidth(); >+ double offsetHeight(); > > // FIXME: Replace uses of offsetParent in the platform with calls > // to the render layer and merge bindingsOffsetParent and offsetParent. > Element* bindingsOffsetParent(); > > Element* offsetParent(); >- int clientLeft(); >- int clientTop(); >- int clientWidth(); >- int clientHeight(); >- virtual int scrollLeft(); >- virtual int scrollTop(); >- virtual void setScrollLeft(int); >- virtual void setScrollTop(int); >- virtual int scrollWidth(); >- virtual int scrollHeight(); >+ double clientLeft(); >+ double clientTop(); >+ double clientWidth(); >+ double clientHeight(); >+ virtual double scrollLeft(); >+ virtual double scrollTop(); >+ virtual void setScrollLeft(double); >+ virtual void setScrollTop(double); >+ virtual double scrollWidth(); >+ virtual double scrollHeight(); > > IntRect boundsInRootViewSpace(); > >diff --git a/Source/WebCore/dom/Element.idl b/Source/WebCore/dom/Element.idl >index cf1d414f7ec5f1fa76aac042f6059eb0a0b87771..8bfb7b0c794e688e6afc79f7120de5d3946777de 100644 >--- a/Source/WebCore/dom/Element.idl >+++ b/Source/WebCore/dom/Element.idl >@@ -69,11 +69,11 @@ > > // Common extensions > >+#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C > readonly attribute long offsetLeft; > readonly attribute long offsetTop; > readonly attribute long offsetWidth; > readonly attribute long offsetHeight; >- [ImplementedAs=bindingsOffsetParent] readonly attribute Element offsetParent; > readonly attribute long clientLeft; > readonly attribute long clientTop; > readonly attribute long clientWidth; >@@ -82,6 +82,22 @@ > attribute long scrollTop; > readonly attribute long scrollWidth; > readonly attribute long scrollHeight; >+#else >+ readonly attribute double offsetLeft; >+ readonly attribute double offsetTop; >+ readonly attribute double offsetWidth; >+ readonly attribute double offsetHeight; >+ readonly attribute double clientLeft; >+ readonly attribute double clientTop; >+ readonly attribute double clientWidth; >+ readonly attribute double clientHeight; >+ attribute double scrollLeft; >+ attribute double scrollTop; >+ readonly attribute double scrollWidth; >+ readonly attribute double scrollHeight; >+#endif >+ >+ [ImplementedAs=bindingsOffsetParent] readonly attribute Element offsetParent; > > void focus(); > void blur(); >diff --git a/Source/WebCore/html/HTMLBodyElement.cpp b/Source/WebCore/html/HTMLBodyElement.cpp >index d0412e611be966815cf5d6861926173c38fecd8d..c1bcfbcf5981deffc8e7108ffe87d7388e480dba 100644 >--- a/Source/WebCore/html/HTMLBodyElement.cpp >+++ b/Source/WebCore/html/HTMLBodyElement.cpp >@@ -198,18 +198,18 @@ bool HTMLBodyElement::supportsFocus() const > return hasEditableStyle() || HTMLElement::supportsFocus(); > } > >-static int adjustForZoom(int value, Frame& frame) >+static double adjustForZoom(int value, const Frame& frame) > { >- float zoomFactor = frame.pageZoomFactor() * frame.frameScaleFactor(); >+ double zoomFactor = frame.pageZoomFactor() * frame.frameScaleFactor(); > if (zoomFactor == 1) > return value; > // Needed because of truncation (rather than rounding) when scaling up. > if (zoomFactor > 1) > value++; >- return static_cast<int>(value / zoomFactor); >+ return value / zoomFactor; > } > >-int HTMLBodyElement::scrollLeft() >+double HTMLBodyElement::scrollLeft() > { > document().updateLayoutIgnorePendingStylesheets(); > Frame* frame = document().frame(); >@@ -218,10 +218,10 @@ int HTMLBodyElement::scrollLeft() > FrameView* view = frame->view(); > if (!view) > return 0; >- return adjustForZoom(view->contentsScrollPosition().x(), *frame); >+ return floor(adjustForZoom(view->contentsScrollPosition().x(), *frame)); > } > >-void HTMLBodyElement::setScrollLeft(int scrollLeft) >+void HTMLBodyElement::setScrollLeft(double scrollLeft) > { > document().updateLayoutIgnorePendingStylesheets(); > Frame* frame = document().frame(); >@@ -233,7 +233,7 @@ void HTMLBodyElement::setScrollLeft(int scrollLeft) > view->setScrollPosition(IntPoint(static_cast<int>(scrollLeft * frame->pageZoomFactor() * frame->frameScaleFactor()), view->scrollY())); > } > >-int HTMLBodyElement::scrollTop() >+double HTMLBodyElement::scrollTop() > { > document().updateLayoutIgnorePendingStylesheets(); > Frame* frame = document().frame(); >@@ -242,10 +242,10 @@ int HTMLBodyElement::scrollTop() > FrameView* view = frame->view(); > if (!view) > return 0; >- return adjustForZoom(view->contentsScrollPosition().y(), *frame); >+ return floor(adjustForZoom(view->contentsScrollPosition().y(), *frame)); > } > >-void HTMLBodyElement::setScrollTop(int scrollTop) >+void HTMLBodyElement::setScrollTop(double scrollTop) > { > document().updateLayoutIgnorePendingStylesheets(); > Frame* frame = document().frame(); >@@ -257,7 +257,7 @@ void HTMLBodyElement::setScrollTop(int scrollTop) > view->setScrollPosition(IntPoint(view->scrollX(), static_cast<int>(scrollTop * frame->pageZoomFactor() * frame->frameScaleFactor()))); > } > >-int HTMLBodyElement::scrollHeight() >+double HTMLBodyElement::scrollHeight() > { > // Update the document's layout. > document().updateLayoutIgnorePendingStylesheets(); >@@ -267,10 +267,10 @@ int HTMLBodyElement::scrollHeight() > FrameView* view = frame->view(); > if (!view) > return 0; >- return adjustForZoom(view->contentsHeight(), *frame); >+ return floor(adjustForZoom(view->contentsHeight(), *frame)); > } > >-int HTMLBodyElement::scrollWidth() >+double HTMLBodyElement::scrollWidth() > { > // Update the document's layout. > document().updateLayoutIgnorePendingStylesheets(); >@@ -280,7 +280,7 @@ int HTMLBodyElement::scrollWidth() > FrameView* view = frame->view(); > if (!view) > return 0; >- return adjustForZoom(view->contentsWidth(), *frame); >+ return floor(adjustForZoom(view->contentsWidth(), *frame)); > } > > void HTMLBodyElement::addSubresourceAttributeURLs(ListHashSet<URL>& urls) const >diff --git a/Source/WebCore/html/HTMLBodyElement.h b/Source/WebCore/html/HTMLBodyElement.h >index 440bd064fa1c18f3af242ded1f5a1c0e87fa9238..405a52e32d80d86a486d69a0d0f56990087c85db 100644 >--- a/Source/WebCore/html/HTMLBodyElement.h >+++ b/Source/WebCore/html/HTMLBodyElement.h >@@ -69,14 +69,14 @@ private: > > virtual bool supportsFocus() const override; > >- virtual int scrollLeft() override; >- virtual void setScrollLeft(int scrollLeft) override; >+ virtual double scrollLeft() override; >+ virtual void setScrollLeft(double) override; > >- virtual int scrollTop() override; >- virtual void setScrollTop(int scrollTop) override; >+ virtual double scrollTop() override; >+ virtual void setScrollTop(double) override; > >- virtual int scrollHeight() override; >- virtual int scrollWidth() override; >+ virtual double scrollHeight() override; >+ virtual double scrollWidth() override; > > virtual void addSubresourceAttributeURLs(ListHashSet<URL>&) const override; > }; >diff --git a/Source/WebCore/page/Settings.in b/Source/WebCore/page/Settings.in >index 2202e01192b4d9c06ab61d8f62cc36f941a2f15a..e3c79b2c00476cc735c65646b03987016280d880 100644 >--- a/Source/WebCore/page/Settings.in >+++ b/Source/WebCore/page/Settings.in >@@ -194,6 +194,8 @@ minimumZoomFontSize type=float, initial=15, conditional=IOS_TEXT_AUTOSIZING > simpleLineLayoutEnabled initial=true, setNeedsStyleRecalcInAllFrames=1 > simpleLineLayoutDebugBordersEnabled initial=false, setNeedsStyleRecalcInAllFrames=1 > >+subpixelCSSOMElementMetricsEnabled initial=true >+ > mediaSourceEnabled initial=true, conditional=MEDIA_SOURCE > > # FIXME: Rename to allowMultiElementImplicitFormSubmission once we upstream the iOS changes to WebView.mm. >diff --git a/Source/WebKit2/Shared/WebPreferencesStore.h b/Source/WebKit2/Shared/WebPreferencesStore.h >index 32620ab1553a5718ff06442b81b02e7e6abe0d8b..fa08b005b0240aab0803efd0472b05eaba7dcc71 100644 >--- a/Source/WebKit2/Shared/WebPreferencesStore.h >+++ b/Source/WebKit2/Shared/WebPreferencesStore.h >@@ -203,6 +203,7 @@ namespace WebKit { > macro(ThreadedScrollingEnabled, threadedScrollingEnabled, Bool, bool, true) \ > macro(SimpleLineLayoutEnabled, simpleLineLayoutEnabled, Bool, bool, true) \ > macro(SimpleLineLayoutDebugBordersEnabled, simpleLineLayoutDebugBordersEnabled, Bool, bool, false) \ >+ macro(SubpixelCSSOMElementMetricsEnabled, subpixelCSSOMElementMetricsEnabled, Bool, bool, true) \ > macro(BackgroundShouldExtendBeyondPage, backgroundShouldExtendBeyondPage, Bool, bool, false) \ > macro(MediaStreamEnabled, mediaStreamEnabled, Bool, bool, false) \ > macro(UseLegacyTextAlignPositionedElementBehavior, useLegacyTextAlignPositionedElementBehavior, Bool, bool, false) \ >diff --git a/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp b/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp >index 6a3831ff5bdcbb6e8096e654476466831237dcf7..152a9e42659f5520ff72bd32e90d988441c1b5c9 100644 >--- a/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp >+++ b/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp >@@ -1186,6 +1186,16 @@ bool WKPreferencesGetSimpleLineLayoutDebugBordersEnabled(WKPreferencesRef prefer > return toImpl(preferencesRef)->simpleLineLayoutDebugBordersEnabled(); > } > >+void WKPreferencesSetSubpixelCSSOMElementMetricsEnabled(WKPreferencesRef preferencesRef, bool flag) >+{ >+ toImpl(preferencesRef)->setSubpixelCSSOMElementMetricsEnabled(flag); >+} >+ >+bool WKPreferencesGetSubpixelCSSOMElementMetricsEnabled(WKPreferencesRef preferencesRef) >+{ >+ return toImpl(preferencesRef)->subpixelCSSOMElementMetricsEnabled(); >+} >+ > void WKPreferencesSetMediaStreamEnabled(WKPreferencesRef preferencesRef, bool enabled) > { > toImpl(preferencesRef)->setMediaStreamEnabled(enabled); >diff --git a/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h b/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h >index 3200cb285772600bc433763fca74a4d463961577..8ac69022b556cc8a1415e04bd06a0fafea297b80 100644 >--- a/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h >+++ b/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h >@@ -296,6 +296,10 @@ WK_EXPORT bool WKPreferencesGetSimpleLineLayoutEnabled(WKPreferencesRef); > WK_EXPORT void WKPreferencesSetSimpleLineLayoutDebugBordersEnabled(WKPreferencesRef, bool); > WK_EXPORT bool WKPreferencesGetSimpleLineLayoutDebugBordersEnabled(WKPreferencesRef); > >+// Defaults to true. >+WK_EXPORT void WKPreferencesSetSubpixelCSSOMElementMetricsEnabled(WKPreferencesRef, bool); >+WK_EXPORT bool WKPreferencesGetSubpixelCSSOMElementMetricsEnabled(WKPreferencesRef); >+ > WK_EXPORT void WKPreferencesResetTestRunnerOverrides(WKPreferencesRef preferencesRef); > > // Defaults to false. >diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp >index 87fb6e70df58973682955a0439a5d4a4590086d0..81073eb5661a34db43748426d198b7216ad4a9aa 100644 >--- a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp >+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp >@@ -2688,6 +2688,8 @@ void WebPage::updatePreferences(const WebPreferencesStore& store) > settings.setSimpleLineLayoutEnabled(store.getBoolValueForKey(WebPreferencesKey::simpleLineLayoutEnabledKey())); > settings.setSimpleLineLayoutDebugBordersEnabled(store.getBoolValueForKey(WebPreferencesKey::simpleLineLayoutDebugBordersEnabledKey())); > >+ settings.setSubpixelCSSOMElementMetricsEnabled(store.getBoolValueForKey(WebPreferencesKey::subpixelCSSOMElementMetricsEnabledKey())); >+ > settings.setUseLegacyTextAlignPositionedElementBehavior(store.getBoolValueForKey(WebPreferencesKey::useLegacyTextAlignPositionedElementBehaviorKey())); > > #if ENABLE(MEDIA_SOURCE) >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 18e779a733180abd8a24b6950cad421f0d5dfa62..25914fb12e4814a36dec6453689f83f64402c0e8 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,32 @@ >+2014-05-13 Zalan Bujtas <zalan@apple.com> >+ >+ Subpixel layout: Change Element.offset* client* scroll* return type to double. >+ https://bugs.webkit.org/show_bug.cgi?id=132895 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Some test cases expect integral values, so the test content is updated accordingly. >+ It mostly means adding Math.round() before comparing values in order to match pixelSnappedIntRect() >+ functionality. >+ >+ * css3/calc/simple-calcs-prefixed.html: changed file format from Windows to Unix. >+ * css3/calc/simple-calcs.html: changed file format from Windows to Unix. >+ * cssom/subpixel-offsetleft-top-width-height-values-expected.txt: Added. >+ * cssom/subpixel-offsetleft-top-width-height-values.html: Added. >+ * editing/selection/drag-start-event-client-x-y.html: use floor as we compare the return value to a truncated integer. >+ * editing/selection/mixed-editability-10.html: >+ * fast/css/zoom-in-length-round-trip.html: >+ * fast/dom/non-numeric-values-numeric-parameters-expected.txt: >+ * fast/dom/script-tests/non-numeric-values-numeric-parameters.js: >+ * fast/forms/basic-buttons.html: >+ * js/dom/dom-static-property-for-in-iteration-expected.txt: >+ * platform/mac/fast/scrolling/scroll-div-latched-div.html: >+ * platform/mac/fast/scrolling/scroll-div-latched-mainframe.html: >+ * platform/mac/fast/scrolling/scroll-select-bottom-test.html: >+ * platform/mac/fast/scrolling/scroll-select-latched-mainframe.html: >+ * platform/mac/fast/scrolling/scroll-select-latched-select.html: >+ * resources/check-layout.js: >+ > 2014-05-13 Andrei Bucur <abucur@adobe.com> > > [CSS Regions] Assertion failure in some cases with inline blocks >diff --git a/LayoutTests/css3/calc/simple-calcs-prefixed.html b/LayoutTests/css3/calc/simple-calcs-prefixed.html >index 335e3cac59630ce0dee6af1c879a1028e6e45f37..cb5559f4db769d47ec6a58291fec240d236227ad 100644 >--- a/LayoutTests/css3/calc/simple-calcs-prefixed.html >+++ b/LayoutTests/css3/calc/simple-calcs-prefixed.html >@@ -1,121 +1,121 @@ >-<!DOCTYPE HTML> >-<style> >-.width-test { >- height: 100px; >- width: 256px; >- background-color: red; >-} >- >-.height-test { >- width: 100px; >- height: 50px; >- background-color: red; >-} >-</style> >- >-<p> >- This file tests legacy support for the -webkit prefixed version of calc (ie -webkit-calc()). >-</p> >-<p> >- All boxes below should be 100px * 100px and green. >-</p> >- >-<div id="test"> >-<div style="width:100px; height:100px;">control</div> >-<div class="width-test" style="width: -webkit-calc(50px + 50px);">50px + 50px</div> >-<div class="width-test" style="width: -webkit-calc(150px - 50px);">150px - 50px</div> >-<div class="width-test" style="width: -webkit-calc(50px + 50px);">50px + 50px (2 spaces around operator)</div> >-<div class="width-test" style="width: -webkit-calc(150px - 50px);">150px - 50px (2 spaces around operator)</div> >-<div class="width-test" style="width: -webkit-calc(50px*2);">50px*2</div> >-<div class="width-test" style="width: -webkit-calc(50px *2);">50px *2</div> >-<div class="width-test" style="width: -webkit-calc(50px* 2);">50px* 2</div> >-<div class="width-test" style="width: -webkit-calc(200px/2);">200px/2</div> >-<div class="width-test" style="width: -webkit-calc(200px /2);">200px /2</div> >-<div class="width-test" style="width: -webkit-calc(200px/ 2);">200px/ 2</div> >-<div class="width-test" style="width: -webkit-calc(50px*(2));">50px*(2)</div> >-<div class="width-test" style="width: -webkit-calc(50px *(2));">50px *(2)</div> >-<div class="width-test" style="width: -webkit-calc(50px* (2));">50px* (2)</div> >-<div class="width-test" style="width: -webkit-calc(50px*(1 + 1));">50px*(1 + 1)</div> >-<div class="width-test" style="width: -webkit-calc(50px*(12 - 10));">50px*(12 - 10)</div> >-<div class="width-test" style="width: -webkit-calc(50px*(10 / 5));">50px*(10 / 5)</div> >-<div class="width-test" style="width: -webkit-calc(10px* (5 * 2));">10px* (5 * 2)</div> >-<div class="width-test" style="width: -webkit-calc(50px + 10px * 5);">50px + 10px * 5 (operation order)</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(100%/2);">100%/2 (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(100% + -100px);">100% + -100px (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(80% - 60px);">80% - 60px (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(300px - 100%);">300px - 100% (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(-100px + 100%);">-100px + 100% (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(20% + 30%);">20% + 30% (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(80% - 30%);">80% - 30% (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(10% * 5);">10% * 5 (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: -webkit-calc(5 * 10%);">5 * 10% (where 100% is 200px)</div> >-</div> >-<div class="width-test" style="width: -webkit-calc((100px));">(100px)</div> >-<div class="width-test" style="width: -webkit-calc((50px + 50px));">(50px + 50px)</div> >-<div class="width-test" style="width: -webkit-calc((50px) + 50px);">(50px) + 50px</div> >-<div class="width-test" style="width: -webkit-calc(50px + (50px));">50px + (50px)</div> >-<div class="width-test" style="width: -webkit-calc( 50px + 50px );"> 50px + 50px </div> >-<div class="width-test" style="width: -webkit-calc( 50px + 25px * 2 );"> 50px + 25px * 2 </div> >-<div class="width-test" style="width: -webkit-calc( (25px + 25px) * 2 );"> (25px + 25px) * 2 </div> >-<div class="width-test" style="width: -webkit-calc(2 * 50px);">2 * 50px</div> >-<div class="width-test" style="width: -webkit-calc(2 * 100px / 2);">2 * 100px / 2</div> >-<div class="width-test" style="width: -webkit-calc((1em - 1em) + 100px);">(1em - 1em) + 100px</div> >-<div class="width-test" style="width: -webkit-calc(50px + +50px);">50px + +50px</div> >-<div class="width-test" style="width: -webkit-calc(-50px + 150px);">-50px + 150px</div> >-<div class="width-test" style="width: -webkit-calc(-50px - -150px);">-50px - -150px</div> >-<div class="width-test" style="width: -webkit-calc((((((((100px))))))));">(((((((100px)))))))</div> >-<div class="height-test" style="height: -webkit-calc(100px);">100px</div> >-<div style="height: 50px; background-color: white;" class="wrapper"> >- <div class="height-test" style="height: -webkit-calc(100% * 2);">100% * 2</div> >-</div> >-</div> >- >-<script> >-if (window.testRunner) >- testRunner.dumpAsText(); >- >-zoomLevels = [1, 1.2, 2]; >-var test = document.getElementById("test"); >-for (var child = test.firstChild; child; child = child.nextSibling) { >- var element = child; >- if (element.className == "wrapper") { >- element = element.firstChild; >- while (element.tagName != "DIV") element = element.nextSibling; >- } >- >- var error = []; >- for (var z = 0; z < zoomLevels.length; z++) { >- var zoom = zoomLevels[z]; >- document.body.style.zoom = zoom; >- var width = element.offsetWidth; >- if (width != 100) >- error.push("@zoom=" + zoom + " expected width of 100, but was " + width); >- var height = element.offsetHeight; >- if (height != 100) >- error.push("@zoom=" + zoom + " expected height of 100, but was " + height); >- } >- if (error == "") { >- element.style.backgroundColor = "green"; >- element.innerHTML += " => PASS"; >- } else >- element.innerHTML += " => FAIL: " + error.join("; "); >-} >-document.body.style.zoom = 1; >-</script> >+<!DOCTYPE HTML> >+<style> >+.width-test { >+ height: 100px; >+ width: 256px; >+ background-color: red; >+} >+ >+.height-test { >+ width: 100px; >+ height: 50px; >+ background-color: red; >+} >+</style> >+ >+<p> >+ This file tests legacy support for the -webkit prefixed version of calc (ie -webkit-calc()). >+</p> >+<p> >+ All boxes below should be 100px * 100px and green. >+</p> >+ >+<div id="test"> >+<div style="width:100px; height:100px;">control</div> >+<div class="width-test" style="width: -webkit-calc(50px + 50px);">50px + 50px</div> >+<div class="width-test" style="width: -webkit-calc(150px - 50px);">150px - 50px</div> >+<div class="width-test" style="width: -webkit-calc(50px + 50px);">50px + 50px (2 spaces around operator)</div> >+<div class="width-test" style="width: -webkit-calc(150px - 50px);">150px - 50px (2 spaces around operator)</div> >+<div class="width-test" style="width: -webkit-calc(50px*2);">50px*2</div> >+<div class="width-test" style="width: -webkit-calc(50px *2);">50px *2</div> >+<div class="width-test" style="width: -webkit-calc(50px* 2);">50px* 2</div> >+<div class="width-test" style="width: -webkit-calc(200px/2);">200px/2</div> >+<div class="width-test" style="width: -webkit-calc(200px /2);">200px /2</div> >+<div class="width-test" style="width: -webkit-calc(200px/ 2);">200px/ 2</div> >+<div class="width-test" style="width: -webkit-calc(50px*(2));">50px*(2)</div> >+<div class="width-test" style="width: -webkit-calc(50px *(2));">50px *(2)</div> >+<div class="width-test" style="width: -webkit-calc(50px* (2));">50px* (2)</div> >+<div class="width-test" style="width: -webkit-calc(50px*(1 + 1));">50px*(1 + 1)</div> >+<div class="width-test" style="width: -webkit-calc(50px*(12 - 10));">50px*(12 - 10)</div> >+<div class="width-test" style="width: -webkit-calc(50px*(10 / 5));">50px*(10 / 5)</div> >+<div class="width-test" style="width: -webkit-calc(10px* (5 * 2));">10px* (5 * 2)</div> >+<div class="width-test" style="width: -webkit-calc(50px + 10px * 5);">50px + 10px * 5 (operation order)</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(100%/2);">100%/2 (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(100% + -100px);">100% + -100px (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(80% - 60px);">80% - 60px (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(300px - 100%);">300px - 100% (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(-100px + 100%);">-100px + 100% (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(20% + 30%);">20% + 30% (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(80% - 30%);">80% - 30% (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(10% * 5);">10% * 5 (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: -webkit-calc(5 * 10%);">5 * 10% (where 100% is 200px)</div> >+</div> >+<div class="width-test" style="width: -webkit-calc((100px));">(100px)</div> >+<div class="width-test" style="width: -webkit-calc((50px + 50px));">(50px + 50px)</div> >+<div class="width-test" style="width: -webkit-calc((50px) + 50px);">(50px) + 50px</div> >+<div class="width-test" style="width: -webkit-calc(50px + (50px));">50px + (50px)</div> >+<div class="width-test" style="width: -webkit-calc( 50px + 50px );"> 50px + 50px </div> >+<div class="width-test" style="width: -webkit-calc( 50px + 25px * 2 );"> 50px + 25px * 2 </div> >+<div class="width-test" style="width: -webkit-calc( (25px + 25px) * 2 );"> (25px + 25px) * 2 </div> >+<div class="width-test" style="width: -webkit-calc(2 * 50px);">2 * 50px</div> >+<div class="width-test" style="width: -webkit-calc(2 * 100px / 2);">2 * 100px / 2</div> >+<div class="width-test" style="width: -webkit-calc((1em - 1em) + 100px);">(1em - 1em) + 100px</div> >+<div class="width-test" style="width: -webkit-calc(50px + +50px);">50px + +50px</div> >+<div class="width-test" style="width: -webkit-calc(-50px + 150px);">-50px + 150px</div> >+<div class="width-test" style="width: -webkit-calc(-50px - -150px);">-50px - -150px</div> >+<div class="width-test" style="width: -webkit-calc((((((((100px))))))));">(((((((100px)))))))</div> >+<div class="height-test" style="height: -webkit-calc(100px);">100px</div> >+<div style="height: 50px; background-color: white;" class="wrapper"> >+ <div class="height-test" style="height: -webkit-calc(100% * 2);">100% * 2</div> >+</div> >+</div> >+ >+<script> >+if (window.testRunner) >+ testRunner.dumpAsText(); >+ >+zoomLevels = [1, 1.2, 2]; >+var test = document.getElementById("test"); >+for (var child = test.firstChild; child; child = child.nextSibling) { >+ var element = child; >+ if (element.className == "wrapper") { >+ element = element.firstChild; >+ while (element.tagName != "DIV") element = element.nextSibling; >+ } >+ >+ var error = []; >+ for (var z = 0; z < zoomLevels.length; z++) { >+ var zoom = zoomLevels[z]; >+ document.body.style.zoom = zoom; >+ var width = Math.round(element.offsetWidth); >+ if (width != 100) >+ error.push("@zoom=" + zoom + " expected width of 100, but was " + width); >+ var height = Math.round(element.offsetHeight); >+ if (height != 100) >+ error.push("@zoom=" + zoom + " expected height of 100, but was " + height); >+ } >+ if (error == "") { >+ element.style.backgroundColor = "green"; >+ element.innerHTML += " => PASS"; >+ } else >+ element.innerHTML += " => FAIL: " + error.join("; "); >+} >+document.body.style.zoom = 1; >+</script> >diff --git a/LayoutTests/css3/calc/simple-calcs.html b/LayoutTests/css3/calc/simple-calcs.html >index 6e842f368fee5c8eb7e653ad966f5359bc487d43..bc34f734acb3bac99f164e88814d6617f79f8184 100644 >--- a/LayoutTests/css3/calc/simple-calcs.html >+++ b/LayoutTests/css3/calc/simple-calcs.html >@@ -1,118 +1,118 @@ >-<!DOCTYPE HTML> >-<style> >-.width-test { >- height: 100px; >- width: 256px; >- background-color: red; >-} >- >-.height-test { >- width: 100px; >- height: 50px; >- background-color: red; >-} >-</style> >- >-<p> >- All boxes below should be 100px * 100px and green. >-</p> >- >-<div id="test"> >-<div style="width:100px; height:100px;">control</div> >-<div class="width-test" style="width: calc(50px + 50px);">50px + 50px</div> >-<div class="width-test" style="width: calc(150px - 50px);">150px - 50px</div> >-<div class="width-test" style="width: calc(50px + 50px);">50px + 50px (2 spaces around operator)</div> >-<div class="width-test" style="width: calc(150px - 50px);">150px - 50px (2 spaces around operator)</div> >-<div class="width-test" style="width: calc(50px*2);">50px*2</div> >-<div class="width-test" style="width: calc(50px *2);">50px *2</div> >-<div class="width-test" style="width: calc(50px* 2);">50px* 2</div> >-<div class="width-test" style="width: calc(200px/2);">200px/2</div> >-<div class="width-test" style="width: calc(200px /2);">200px /2</div> >-<div class="width-test" style="width: calc(200px/ 2);">200px/ 2</div> >-<div class="width-test" style="width: calc(50px*(2));">50px*(2)</div> >-<div class="width-test" style="width: calc(50px *(2));">50px *(2)</div> >-<div class="width-test" style="width: calc(50px* (2));">50px* (2)</div> >-<div class="width-test" style="width: calc(50px*(1 + 1));">50px*(1 + 1)</div> >-<div class="width-test" style="width: calc(50px*(12 - 10));">50px*(12 - 10)</div> >-<div class="width-test" style="width: calc(50px*(10 / 5));">50px*(10 / 5)</div> >-<div class="width-test" style="width: calc(10px* (5 * 2));">10px* (5 * 2)</div> >-<div class="width-test" style="width: calc(50px + 10px * 5);">50px + 10px * 5 (operation order)</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(100%/2);">100%/2 (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(100% + -100px);">100% + -100px (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(80% - 60px);">80% - 60px (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(300px - 100%);">300px - 100% (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(-100px + 100%);">-100px + 100% (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(20% + 30%);">20% + 30% (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(80% - 30%);">80% - 30% (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(10% * 5);">10% * 5 (where 100% is 200px)</div> >-</div> >-<div style="width: 200px; background-color: white;" class="wrapper"> >- <div class="width-test" style="width: calc(5 * 10%);">5 * 10% (where 100% is 200px)</div> >-</div> >-<div class="width-test" style="width: calc((100px));">(100px)</div> >-<div class="width-test" style="width: calc((50px + 50px));">(50px + 50px)</div> >-<div class="width-test" style="width: calc((50px) + 50px);">(50px) + 50px</div> >-<div class="width-test" style="width: calc(50px + (50px));">50px + (50px)</div> >-<div class="width-test" style="width: calc( 50px + 50px );"> 50px + 50px </div> >-<div class="width-test" style="width: calc( 50px + 25px * 2 );"> 50px + 25px * 2 </div> >-<div class="width-test" style="width: calc( (25px + 25px) * 2 );"> (25px + 25px) * 2 </div> >-<div class="width-test" style="width: calc(2 * 50px);">2 * 50px</div> >-<div class="width-test" style="width: calc(2 * 100px / 2);">2 * 100px / 2</div> >-<div class="width-test" style="width: calc((1em - 1em) + 100px);">(1em - 1em) + 100px</div> >-<div class="width-test" style="width: calc(50px + +50px);">50px + +50px</div> >-<div class="width-test" style="width: calc(-50px + 150px);">-50px + 150px</div> >-<div class="width-test" style="width: calc(-50px - -150px);">-50px - -150px</div> >-<div class="width-test" style="width: calc((((((((100px))))))));">(((((((100px)))))))</div> >-<div class="height-test" style="height: calc(100px);">100px</div> >-<div style="height: 50px; background-color: white;" class="wrapper"> >- <div class="height-test" style="height: calc(100% * 2);">100% * 2</div> >-</div> >-</div> >- >-<script> >-if (window.testRunner) >- testRunner.dumpAsText(); >- >-zoomLevels = [1, 1.2, 2]; >-var test = document.getElementById("test"); >-for (var child = test.firstChild; child; child = child.nextSibling) { >- var element = child; >- if (element.className == "wrapper") { >- element = element.firstChild; >- while (element.tagName != "DIV") element = element.nextSibling; >- } >- >- var error = []; >- for (var z = 0; z < zoomLevels.length; z++) { >- var zoom = zoomLevels[z]; >- document.body.style.zoom = zoom; >- var width = element.offsetWidth; >- if (width != 100) >- error.push("@zoom=" + zoom + " expected width of 100, but was " + width); >- var height = element.offsetHeight; >- if (height != 100) >- error.push("@zoom=" + zoom + " expected height of 100, but was " + height); >- } >- if (error == "") { >- element.style.backgroundColor = "green"; >- element.innerHTML += " => PASS"; >- } else >- element.innerHTML += " => FAIL: " + error.join("; "); >-} >-document.body.style.zoom = 1; >-</script> >+<!DOCTYPE HTML> >+<style> >+.width-test { >+ height: 100px; >+ width: 256px; >+ background-color: red; >+} >+ >+.height-test { >+ width: 100px; >+ height: 50px; >+ background-color: red; >+} >+</style> >+ >+<p> >+ All boxes below should be 100px * 100px and green. >+</p> >+ >+<div id="test"> >+<div style="width:100px; height:100px;">control</div> >+<div class="width-test" style="width: calc(50px + 50px);">50px + 50px</div> >+<div class="width-test" style="width: calc(150px - 50px);">150px - 50px</div> >+<div class="width-test" style="width: calc(50px + 50px);">50px + 50px (2 spaces around operator)</div> >+<div class="width-test" style="width: calc(150px - 50px);">150px - 50px (2 spaces around operator)</div> >+<div class="width-test" style="width: calc(50px*2);">50px*2</div> >+<div class="width-test" style="width: calc(50px *2);">50px *2</div> >+<div class="width-test" style="width: calc(50px* 2);">50px* 2</div> >+<div class="width-test" style="width: calc(200px/2);">200px/2</div> >+<div class="width-test" style="width: calc(200px /2);">200px /2</div> >+<div class="width-test" style="width: calc(200px/ 2);">200px/ 2</div> >+<div class="width-test" style="width: calc(50px*(2));">50px*(2)</div> >+<div class="width-test" style="width: calc(50px *(2));">50px *(2)</div> >+<div class="width-test" style="width: calc(50px* (2));">50px* (2)</div> >+<div class="width-test" style="width: calc(50px*(1 + 1));">50px*(1 + 1)</div> >+<div class="width-test" style="width: calc(50px*(12 - 10));">50px*(12 - 10)</div> >+<div class="width-test" style="width: calc(50px*(10 / 5));">50px*(10 / 5)</div> >+<div class="width-test" style="width: calc(10px* (5 * 2));">10px* (5 * 2)</div> >+<div class="width-test" style="width: calc(50px + 10px * 5);">50px + 10px * 5 (operation order)</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(100%/2);">100%/2 (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(100% + -100px);">100% + -100px (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(80% - 60px);">80% - 60px (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(300px - 100%);">300px - 100% (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(-100px + 100%);">-100px + 100% (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(20% + 30%);">20% + 30% (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(80% - 30%);">80% - 30% (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(10% * 5);">10% * 5 (where 100% is 200px)</div> >+</div> >+<div style="width: 200px; background-color: white;" class="wrapper"> >+ <div class="width-test" style="width: calc(5 * 10%);">5 * 10% (where 100% is 200px)</div> >+</div> >+<div class="width-test" style="width: calc((100px));">(100px)</div> >+<div class="width-test" style="width: calc((50px + 50px));">(50px + 50px)</div> >+<div class="width-test" style="width: calc((50px) + 50px);">(50px) + 50px</div> >+<div class="width-test" style="width: calc(50px + (50px));">50px + (50px)</div> >+<div class="width-test" style="width: calc( 50px + 50px );"> 50px + 50px </div> >+<div class="width-test" style="width: calc( 50px + 25px * 2 );"> 50px + 25px * 2 </div> >+<div class="width-test" style="width: calc( (25px + 25px) * 2 );"> (25px + 25px) * 2 </div> >+<div class="width-test" style="width: calc(2 * 50px);">2 * 50px</div> >+<div class="width-test" style="width: calc(2 * 100px / 2);">2 * 100px / 2</div> >+<div class="width-test" style="width: calc((1em - 1em) + 100px);">(1em - 1em) + 100px</div> >+<div class="width-test" style="width: calc(50px + +50px);">50px + +50px</div> >+<div class="width-test" style="width: calc(-50px + 150px);">-50px + 150px</div> >+<div class="width-test" style="width: calc(-50px - -150px);">-50px - -150px</div> >+<div class="width-test" style="width: calc((((((((100px))))))));">(((((((100px)))))))</div> >+<div class="height-test" style="height: calc(100px);">100px</div> >+<div style="height: 50px; background-color: white;" class="wrapper"> >+ <div class="height-test" style="height: calc(100% * 2);">100% * 2</div> >+</div> >+</div> >+ >+<script> >+if (window.testRunner) >+ testRunner.dumpAsText(); >+ >+zoomLevels = [1, 1.2, 2]; >+var test = document.getElementById("test"); >+for (var child = test.firstChild; child; child = child.nextSibling) { >+ var element = child; >+ if (element.className == "wrapper") { >+ element = element.firstChild; >+ while (element.tagName != "DIV") element = element.nextSibling; >+ } >+ >+ var error = []; >+ for (var z = 0; z < zoomLevels.length; z++) { >+ var zoom = zoomLevels[z]; >+ document.body.style.zoom = zoom; >+ var width = Math.round(element.offsetWidth); >+ if (width != 100) >+ error.push("@zoom=" + zoom + " expected width of 100, but was " + width); >+ var height = Math.round(element.offsetHeight); >+ if (height != 100) >+ error.push("@zoom=" + zoom + " expected height of 100, but was " + height); >+ } >+ if (error == "") { >+ element.style.backgroundColor = "green"; >+ element.innerHTML += " => PASS"; >+ } else >+ element.innerHTML += " => FAIL: " + error.join("; "); >+} >+document.body.style.zoom = 1; >+</script> >diff --git a/LayoutTests/cssom/subpixel-offsetleft-top-width-height-values-expected.txt b/LayoutTests/cssom/subpixel-offsetleft-top-width-height-values-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..80121ad039772a017b085cfda1d78808957baf13 >--- /dev/null >+++ b/LayoutTests/cssom/subpixel-offsetleft-top-width-height-values-expected.txt >@@ -0,0 +1,801 @@ >+offsetTop:0.00 offsetLeft:0.00 offsetWidth:0.09 offsetHeight:0.09 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.00 clientHeight:0.00 >+offsetTop:0.19 offsetLeft:0.09 offsetWidth:0.19 offsetHeight:0.19 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.09 clientHeight:0.09 >+offsetTop:0.39 offsetLeft:0.39 offsetWidth:0.28 offsetHeight:0.28 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.19 clientHeight:0.19 >+offsetTop:0.59 offsetLeft:0.89 offsetWidth:0.39 offsetHeight:0.39 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.30 clientHeight:0.30 >+offsetTop:0.80 offsetLeft:1.59 offsetWidth:0.48 offsetHeight:0.48 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.39 clientHeight:0.39 >+offsetTop:1.00 offsetLeft:2.50 offsetWidth:0.59 offsetHeight:0.59 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.50 clientHeight:0.50 >+offsetTop:1.19 offsetLeft:3.59 offsetWidth:0.69 offsetHeight:0.69 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.59 clientHeight:0.59 >+offsetTop:1.39 offsetLeft:4.89 offsetWidth:0.78 offsetHeight:0.78 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.69 clientHeight:0.69 >+offsetTop:1.59 offsetLeft:6.39 offsetWidth:0.89 offsetHeight:0.89 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.80 clientHeight:0.80 >+offsetTop:1.80 offsetLeft:8.09 offsetWidth:0.98 offsetHeight:0.98 >+clientTop:0.05 clientLeft:0.05 clientWidth:0.89 clientHeight:0.89 >+offsetTop:2.00 offsetLeft:10.00 offsetWidth:1.09 offsetHeight:1.09 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.00 clientHeight:1.00 >+offsetTop:2.19 offsetLeft:12.09 offsetWidth:1.19 offsetHeight:1.19 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.09 clientHeight:1.09 >+offsetTop:2.39 offsetLeft:14.39 offsetWidth:1.28 offsetHeight:1.28 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.19 clientHeight:1.19 >+offsetTop:2.59 offsetLeft:16.89 offsetWidth:1.39 offsetHeight:1.39 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.30 clientHeight:1.30 >+offsetTop:2.80 offsetLeft:19.59 offsetWidth:1.48 offsetHeight:1.48 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.39 clientHeight:1.39 >+offsetTop:3.00 offsetLeft:22.50 offsetWidth:1.59 offsetHeight:1.59 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.50 clientHeight:1.50 >+offsetTop:3.19 offsetLeft:25.59 offsetWidth:1.69 offsetHeight:1.69 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.59 clientHeight:1.59 >+offsetTop:3.39 offsetLeft:28.89 offsetWidth:1.78 offsetHeight:1.78 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.69 clientHeight:1.69 >+offsetTop:3.59 offsetLeft:32.39 offsetWidth:1.89 offsetHeight:1.89 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.80 clientHeight:1.80 >+offsetTop:3.80 offsetLeft:36.09 offsetWidth:1.98 offsetHeight:1.98 >+clientTop:0.05 clientLeft:0.05 clientWidth:1.89 clientHeight:1.89 >+offsetTop:2.00 offsetLeft:0.30 offsetWidth:2.13 offsetHeight:2.13 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.00 clientHeight:2.00 >+offsetTop:2.39 offsetLeft:2.39 offsetWidth:2.22 offsetHeight:2.22 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.09 clientHeight:2.09 >+offsetTop:2.80 offsetLeft:4.69 offsetWidth:2.31 offsetHeight:2.31 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.19 clientHeight:2.19 >+offsetTop:3.19 offsetLeft:7.19 offsetWidth:2.42 offsetHeight:2.42 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.30 clientHeight:2.30 >+offsetTop:3.59 offsetLeft:9.89 offsetWidth:2.52 offsetHeight:2.52 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.39 clientHeight:2.39 >+offsetTop:4.00 offsetLeft:12.80 offsetWidth:2.63 offsetHeight:2.63 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.50 clientHeight:2.50 >+offsetTop:4.39 offsetLeft:15.89 offsetWidth:2.72 offsetHeight:2.72 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.59 clientHeight:2.59 >+offsetTop:4.80 offsetLeft:19.19 offsetWidth:2.81 offsetHeight:2.81 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.69 clientHeight:2.69 >+offsetTop:5.19 offsetLeft:22.69 offsetWidth:2.92 offsetHeight:2.92 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.80 clientHeight:2.80 >+offsetTop:5.59 offsetLeft:26.39 offsetWidth:3.02 offsetHeight:3.02 >+clientTop:0.06 clientLeft:0.06 clientWidth:2.89 clientHeight:2.89 >+offsetTop:6.00 offsetLeft:30.30 offsetWidth:3.13 offsetHeight:3.13 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.00 clientHeight:3.00 >+offsetTop:6.39 offsetLeft:34.39 offsetWidth:3.22 offsetHeight:3.22 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.09 clientHeight:3.09 >+offsetTop:6.80 offsetLeft:38.69 offsetWidth:3.31 offsetHeight:3.31 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.19 clientHeight:3.19 >+offsetTop:7.19 offsetLeft:43.19 offsetWidth:3.42 offsetHeight:3.42 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.30 clientHeight:3.30 >+offsetTop:7.59 offsetLeft:47.89 offsetWidth:3.52 offsetHeight:3.52 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.39 clientHeight:3.39 >+offsetTop:8.00 offsetLeft:52.80 offsetWidth:3.63 offsetHeight:3.63 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.50 clientHeight:3.50 >+offsetTop:8.39 offsetLeft:57.89 offsetWidth:3.72 offsetHeight:3.72 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.59 clientHeight:3.59 >+offsetTop:8.80 offsetLeft:63.19 offsetWidth:3.81 offsetHeight:3.81 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.69 clientHeight:3.69 >+offsetTop:9.19 offsetLeft:68.69 offsetWidth:3.92 offsetHeight:3.92 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.80 clientHeight:3.80 >+offsetTop:9.59 offsetLeft:74.39 offsetWidth:4.02 offsetHeight:4.02 >+clientTop:0.06 clientLeft:0.06 clientWidth:3.89 clientHeight:3.89 >+offsetTop:8.00 offsetLeft:0.80 offsetWidth:4.19 offsetHeight:4.19 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.00 clientHeight:4.00 >+offsetTop:8.59 offsetLeft:4.89 offsetWidth:4.28 offsetHeight:4.28 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.09 clientHeight:4.09 >+offsetTop:9.19 offsetLeft:9.19 offsetWidth:4.38 offsetHeight:4.38 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.19 clientHeight:4.19 >+offsetTop:9.80 offsetLeft:13.69 offsetWidth:4.48 offsetHeight:4.48 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.30 clientHeight:4.30 >+offsetTop:10.39 offsetLeft:18.39 offsetWidth:4.58 offsetHeight:4.58 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.39 clientHeight:4.39 >+offsetTop:11.00 offsetLeft:23.30 offsetWidth:4.69 offsetHeight:4.69 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.50 clientHeight:4.50 >+offsetTop:11.59 offsetLeft:28.39 offsetWidth:4.78 offsetHeight:4.78 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.59 clientHeight:4.59 >+offsetTop:12.19 offsetLeft:33.69 offsetWidth:4.88 offsetHeight:4.88 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.69 clientHeight:4.69 >+offsetTop:12.80 offsetLeft:39.19 offsetWidth:4.98 offsetHeight:4.98 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.80 clientHeight:4.80 >+offsetTop:13.39 offsetLeft:44.89 offsetWidth:5.08 offsetHeight:5.08 >+clientTop:0.09 clientLeft:0.09 clientWidth:4.89 clientHeight:4.89 >+offsetTop:14.00 offsetLeft:50.80 offsetWidth:5.19 offsetHeight:5.19 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.00 clientHeight:5.00 >+offsetTop:14.59 offsetLeft:56.89 offsetWidth:5.28 offsetHeight:5.28 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.09 clientHeight:5.09 >+offsetTop:15.19 offsetLeft:63.19 offsetWidth:5.38 offsetHeight:5.38 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.19 clientHeight:5.19 >+offsetTop:15.80 offsetLeft:69.69 offsetWidth:5.48 offsetHeight:5.48 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.30 clientHeight:5.30 >+offsetTop:16.39 offsetLeft:76.39 offsetWidth:5.58 offsetHeight:5.58 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.39 clientHeight:5.39 >+offsetTop:17.00 offsetLeft:83.30 offsetWidth:5.69 offsetHeight:5.69 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.50 clientHeight:5.50 >+offsetTop:17.59 offsetLeft:90.39 offsetWidth:5.78 offsetHeight:5.78 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.59 clientHeight:5.59 >+offsetTop:18.19 offsetLeft:97.69 offsetWidth:5.88 offsetHeight:5.88 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.69 clientHeight:5.69 >+offsetTop:18.80 offsetLeft:105.19 offsetWidth:5.98 offsetHeight:5.98 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.80 clientHeight:5.80 >+offsetTop:19.39 offsetLeft:112.89 offsetWidth:6.08 offsetHeight:6.08 >+clientTop:0.09 clientLeft:0.09 clientWidth:5.89 clientHeight:5.89 >+offsetTop:18.00 offsetLeft:1.50 offsetWidth:6.25 offsetHeight:6.25 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.00 clientHeight:6.00 >+offsetTop:18.80 offsetLeft:7.59 offsetWidth:6.34 offsetHeight:6.34 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.09 clientHeight:6.09 >+offsetTop:19.59 offsetLeft:13.89 offsetWidth:6.44 offsetHeight:6.44 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.19 clientHeight:6.19 >+offsetTop:20.39 offsetLeft:20.39 offsetWidth:6.55 offsetHeight:6.55 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.30 clientHeight:6.30 >+offsetTop:21.19 offsetLeft:27.09 offsetWidth:6.64 offsetHeight:6.64 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.39 clientHeight:6.39 >+offsetTop:22.00 offsetLeft:34.00 offsetWidth:6.75 offsetHeight:6.75 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.50 clientHeight:6.50 >+offsetTop:22.80 offsetLeft:41.09 offsetWidth:6.84 offsetHeight:6.84 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.59 clientHeight:6.59 >+offsetTop:23.59 offsetLeft:48.39 offsetWidth:6.94 offsetHeight:6.94 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.69 clientHeight:6.69 >+offsetTop:24.39 offsetLeft:55.89 offsetWidth:7.05 offsetHeight:7.05 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.80 clientHeight:6.80 >+offsetTop:25.19 offsetLeft:63.59 offsetWidth:7.14 offsetHeight:7.14 >+clientTop:0.13 clientLeft:0.13 clientWidth:6.89 clientHeight:6.89 >+offsetTop:26.00 offsetLeft:71.50 offsetWidth:7.25 offsetHeight:7.25 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.00 clientHeight:7.00 >+offsetTop:26.80 offsetLeft:79.59 offsetWidth:7.34 offsetHeight:7.34 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.09 clientHeight:7.09 >+offsetTop:27.59 offsetLeft:87.89 offsetWidth:7.44 offsetHeight:7.44 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.19 clientHeight:7.19 >+offsetTop:28.39 offsetLeft:96.39 offsetWidth:7.55 offsetHeight:7.55 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.30 clientHeight:7.30 >+offsetTop:29.19 offsetLeft:105.09 offsetWidth:7.64 offsetHeight:7.64 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.39 clientHeight:7.39 >+offsetTop:30.00 offsetLeft:114.00 offsetWidth:7.75 offsetHeight:7.75 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.50 clientHeight:7.50 >+offsetTop:30.80 offsetLeft:123.09 offsetWidth:7.84 offsetHeight:7.84 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.59 clientHeight:7.59 >+offsetTop:31.59 offsetLeft:132.39 offsetWidth:7.94 offsetHeight:7.94 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.69 clientHeight:7.69 >+offsetTop:32.39 offsetLeft:141.89 offsetWidth:8.05 offsetHeight:8.05 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.80 clientHeight:7.80 >+offsetTop:33.19 offsetLeft:151.59 offsetWidth:8.14 offsetHeight:8.14 >+clientTop:0.13 clientLeft:0.13 clientWidth:7.89 clientHeight:7.89 >+offsetTop:32.00 offsetLeft:2.39 offsetWidth:8.28 offsetHeight:8.28 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.00 clientHeight:8.00 >+offsetTop:33.00 offsetLeft:10.50 offsetWidth:8.38 offsetHeight:8.38 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.09 clientHeight:8.09 >+offsetTop:34.00 offsetLeft:18.80 offsetWidth:8.47 offsetHeight:8.47 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.19 clientHeight:8.19 >+offsetTop:35.00 offsetLeft:27.30 offsetWidth:8.58 offsetHeight:8.58 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.30 clientHeight:8.30 >+offsetTop:36.00 offsetLeft:36.00 offsetWidth:8.67 offsetHeight:8.67 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.39 clientHeight:8.39 >+offsetTop:37.00 offsetLeft:44.89 offsetWidth:8.78 offsetHeight:8.78 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.50 clientHeight:8.50 >+offsetTop:38.00 offsetLeft:54.00 offsetWidth:8.88 offsetHeight:8.88 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.59 clientHeight:8.59 >+offsetTop:39.00 offsetLeft:63.30 offsetWidth:8.97 offsetHeight:8.97 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.69 clientHeight:8.69 >+offsetTop:40.00 offsetLeft:72.80 offsetWidth:9.08 offsetHeight:9.08 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.80 clientHeight:8.80 >+offsetTop:41.00 offsetLeft:82.50 offsetWidth:9.17 offsetHeight:9.17 >+clientTop:0.14 clientLeft:0.14 clientWidth:8.89 clientHeight:8.89 >+offsetTop:42.00 offsetLeft:92.39 offsetWidth:9.28 offsetHeight:9.28 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.00 clientHeight:9.00 >+offsetTop:43.00 offsetLeft:102.50 offsetWidth:9.38 offsetHeight:9.38 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.09 clientHeight:9.09 >+offsetTop:44.00 offsetLeft:112.80 offsetWidth:9.47 offsetHeight:9.47 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.19 clientHeight:9.19 >+offsetTop:45.00 offsetLeft:123.30 offsetWidth:9.58 offsetHeight:9.58 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.30 clientHeight:9.30 >+offsetTop:46.00 offsetLeft:134.00 offsetWidth:9.67 offsetHeight:9.67 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.39 clientHeight:9.39 >+offsetTop:47.00 offsetLeft:144.89 offsetWidth:9.78 offsetHeight:9.78 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.50 clientHeight:9.50 >+offsetTop:48.00 offsetLeft:156.00 offsetWidth:9.88 offsetHeight:9.88 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.59 clientHeight:9.59 >+offsetTop:49.00 offsetLeft:167.30 offsetWidth:9.97 offsetHeight:9.97 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.69 clientHeight:9.69 >+offsetTop:50.00 offsetLeft:178.80 offsetWidth:10.08 offsetHeight:10.08 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.80 clientHeight:9.80 >+offsetTop:51.00 offsetLeft:190.50 offsetWidth:10.17 offsetHeight:10.17 >+clientTop:0.14 clientLeft:0.14 clientWidth:9.89 clientHeight:9.89 >+offsetTop:50.00 offsetLeft:3.50 offsetWidth:10.34 offsetHeight:10.34 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.00 clientHeight:10.00 >+offsetTop:51.19 offsetLeft:13.59 offsetWidth:10.44 offsetHeight:10.44 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.09 clientHeight:10.09 >+offsetTop:52.39 offsetLeft:23.89 offsetWidth:10.53 offsetHeight:10.53 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.19 clientHeight:10.19 >+offsetTop:53.59 offsetLeft:34.39 offsetWidth:10.64 offsetHeight:10.64 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.30 clientHeight:10.30 >+offsetTop:54.80 offsetLeft:45.09 offsetWidth:10.73 offsetHeight:10.73 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.39 clientHeight:10.39 >+offsetTop:56.00 offsetLeft:56.00 offsetWidth:10.84 offsetHeight:10.84 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.50 clientHeight:10.50 >+offsetTop:57.19 offsetLeft:67.09 offsetWidth:10.94 offsetHeight:10.94 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.59 clientHeight:10.59 >+offsetTop:58.39 offsetLeft:78.39 offsetWidth:11.03 offsetHeight:11.03 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.69 clientHeight:10.69 >+offsetTop:59.59 offsetLeft:89.89 offsetWidth:11.14 offsetHeight:11.14 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.80 clientHeight:10.80 >+offsetTop:60.80 offsetLeft:101.59 offsetWidth:11.23 offsetHeight:11.23 >+clientTop:0.17 clientLeft:0.17 clientWidth:10.89 clientHeight:10.89 >+offsetTop:62.00 offsetLeft:113.50 offsetWidth:11.34 offsetHeight:11.34 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.00 clientHeight:11.00 >+offsetTop:63.19 offsetLeft:125.59 offsetWidth:11.44 offsetHeight:11.44 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.09 clientHeight:11.09 >+offsetTop:64.39 offsetLeft:137.89 offsetWidth:11.53 offsetHeight:11.53 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.19 clientHeight:11.19 >+offsetTop:65.59 offsetLeft:150.39 offsetWidth:11.64 offsetHeight:11.64 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.30 clientHeight:11.30 >+offsetTop:66.80 offsetLeft:163.09 offsetWidth:11.73 offsetHeight:11.73 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.39 clientHeight:11.39 >+offsetTop:68.00 offsetLeft:176.00 offsetWidth:11.84 offsetHeight:11.84 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.50 clientHeight:11.50 >+offsetTop:69.19 offsetLeft:189.09 offsetWidth:11.94 offsetHeight:11.94 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.59 clientHeight:11.59 >+offsetTop:70.39 offsetLeft:202.39 offsetWidth:12.03 offsetHeight:12.03 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.69 clientHeight:11.69 >+offsetTop:71.59 offsetLeft:215.89 offsetWidth:12.14 offsetHeight:12.14 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.80 clientHeight:11.80 >+offsetTop:72.80 offsetLeft:229.59 offsetWidth:12.23 offsetHeight:12.23 >+clientTop:0.17 clientLeft:0.17 clientWidth:11.89 clientHeight:11.89 >+offsetTop:72.00 offsetLeft:4.80 offsetWidth:12.38 offsetHeight:12.38 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.00 clientHeight:12.00 >+offsetTop:73.39 offsetLeft:16.89 offsetWidth:12.47 offsetHeight:12.47 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.09 clientHeight:12.09 >+offsetTop:74.80 offsetLeft:29.19 offsetWidth:12.56 offsetHeight:12.56 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.19 clientHeight:12.19 >+offsetTop:76.19 offsetLeft:41.69 offsetWidth:12.67 offsetHeight:12.67 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.30 clientHeight:12.30 >+offsetTop:77.59 offsetLeft:54.39 offsetWidth:12.77 offsetHeight:12.77 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.39 clientHeight:12.39 >+offsetTop:79.00 offsetLeft:67.30 offsetWidth:12.88 offsetHeight:12.88 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.50 clientHeight:12.50 >+offsetTop:80.39 offsetLeft:80.39 offsetWidth:12.97 offsetHeight:12.97 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.59 clientHeight:12.59 >+offsetTop:81.80 offsetLeft:93.69 offsetWidth:13.06 offsetHeight:13.06 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.69 clientHeight:12.69 >+offsetTop:83.19 offsetLeft:107.19 offsetWidth:13.17 offsetHeight:13.17 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.80 clientHeight:12.80 >+offsetTop:84.59 offsetLeft:120.89 offsetWidth:13.27 offsetHeight:13.27 >+clientTop:0.19 clientLeft:0.19 clientWidth:12.89 clientHeight:12.89 >+offsetTop:86.00 offsetLeft:134.80 offsetWidth:13.38 offsetHeight:13.38 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.00 clientHeight:13.00 >+offsetTop:87.39 offsetLeft:148.89 offsetWidth:13.47 offsetHeight:13.47 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.09 clientHeight:13.09 >+offsetTop:88.80 offsetLeft:163.19 offsetWidth:13.56 offsetHeight:13.56 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.19 clientHeight:13.19 >+offsetTop:90.19 offsetLeft:177.69 offsetWidth:13.67 offsetHeight:13.67 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.30 clientHeight:13.30 >+offsetTop:91.59 offsetLeft:192.39 offsetWidth:13.77 offsetHeight:13.77 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.39 clientHeight:13.39 >+offsetTop:93.00 offsetLeft:207.30 offsetWidth:13.88 offsetHeight:13.88 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.50 clientHeight:13.50 >+offsetTop:94.39 offsetLeft:222.39 offsetWidth:13.97 offsetHeight:13.97 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.59 clientHeight:13.59 >+offsetTop:95.80 offsetLeft:237.69 offsetWidth:14.06 offsetHeight:14.06 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.69 clientHeight:13.69 >+offsetTop:97.19 offsetLeft:253.19 offsetWidth:14.17 offsetHeight:14.17 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.80 clientHeight:13.80 >+offsetTop:98.59 offsetLeft:268.89 offsetWidth:14.27 offsetHeight:14.27 >+clientTop:0.19 clientLeft:0.19 clientWidth:13.89 clientHeight:13.89 >+offsetTop:98.00 offsetLeft:6.30 offsetWidth:14.44 offsetHeight:14.44 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.00 clientHeight:14.00 >+offsetTop:99.59 offsetLeft:20.39 offsetWidth:14.53 offsetHeight:14.53 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.09 clientHeight:14.09 >+offsetTop:101.19 offsetLeft:34.69 offsetWidth:14.63 offsetHeight:14.63 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.19 clientHeight:14.19 >+offsetTop:102.80 offsetLeft:49.19 offsetWidth:14.73 offsetHeight:14.73 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.30 clientHeight:14.30 >+offsetTop:104.39 offsetLeft:63.89 offsetWidth:14.83 offsetHeight:14.83 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.39 clientHeight:14.39 >+offsetTop:106.00 offsetLeft:78.80 offsetWidth:14.94 offsetHeight:14.94 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.50 clientHeight:14.50 >+offsetTop:107.59 offsetLeft:93.89 offsetWidth:15.03 offsetHeight:15.03 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.59 clientHeight:14.59 >+offsetTop:109.19 offsetLeft:109.19 offsetWidth:15.13 offsetHeight:15.13 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.69 clientHeight:14.69 >+offsetTop:110.80 offsetLeft:124.69 offsetWidth:15.23 offsetHeight:15.23 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.80 clientHeight:14.80 >+offsetTop:112.39 offsetLeft:140.39 offsetWidth:15.33 offsetHeight:15.33 >+clientTop:0.22 clientLeft:0.22 clientWidth:14.89 clientHeight:14.89 >+offsetTop:114.00 offsetLeft:156.30 offsetWidth:15.44 offsetHeight:15.44 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.00 clientHeight:15.00 >+offsetTop:115.59 offsetLeft:172.39 offsetWidth:15.53 offsetHeight:15.53 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.09 clientHeight:15.09 >+offsetTop:117.19 offsetLeft:188.69 offsetWidth:15.63 offsetHeight:15.63 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.19 clientHeight:15.19 >+offsetTop:118.80 offsetLeft:205.19 offsetWidth:15.73 offsetHeight:15.73 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.30 clientHeight:15.30 >+offsetTop:120.39 offsetLeft:221.89 offsetWidth:15.83 offsetHeight:15.83 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.39 clientHeight:15.39 >+offsetTop:122.00 offsetLeft:238.80 offsetWidth:15.94 offsetHeight:15.94 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.50 clientHeight:15.50 >+offsetTop:123.59 offsetLeft:255.89 offsetWidth:16.03 offsetHeight:16.03 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.59 clientHeight:15.59 >+offsetTop:125.19 offsetLeft:273.19 offsetWidth:16.13 offsetHeight:16.13 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.69 clientHeight:15.69 >+offsetTop:126.80 offsetLeft:290.69 offsetWidth:16.23 offsetHeight:16.23 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.80 clientHeight:15.80 >+offsetTop:128.39 offsetLeft:308.39 offsetWidth:16.33 offsetHeight:16.33 >+clientTop:0.22 clientLeft:0.22 clientWidth:15.89 clientHeight:15.89 >+offsetTop:128.00 offsetLeft:8.00 offsetWidth:16.50 offsetHeight:16.50 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.00 clientHeight:16.00 >+offsetTop:129.80 offsetLeft:24.09 offsetWidth:16.59 offsetHeight:16.59 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.09 clientHeight:16.09 >+offsetTop:131.59 offsetLeft:40.39 offsetWidth:16.69 offsetHeight:16.69 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.19 clientHeight:16.19 >+offsetTop:133.39 offsetLeft:56.89 offsetWidth:16.80 offsetHeight:16.80 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.30 clientHeight:16.30 >+offsetTop:135.19 offsetLeft:73.59 offsetWidth:16.89 offsetHeight:16.89 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.39 clientHeight:16.39 >+offsetTop:137.00 offsetLeft:90.50 offsetWidth:17.00 offsetHeight:17.00 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.50 clientHeight:16.50 >+offsetTop:138.80 offsetLeft:107.59 offsetWidth:17.09 offsetHeight:17.09 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.59 clientHeight:16.59 >+offsetTop:140.59 offsetLeft:124.89 offsetWidth:17.19 offsetHeight:17.19 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.69 clientHeight:16.69 >+offsetTop:142.39 offsetLeft:142.39 offsetWidth:17.30 offsetHeight:17.30 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.80 clientHeight:16.80 >+offsetTop:144.19 offsetLeft:160.09 offsetWidth:17.39 offsetHeight:17.39 >+clientTop:0.25 clientLeft:0.25 clientWidth:16.89 clientHeight:16.89 >+offsetTop:146.00 offsetLeft:178.00 offsetWidth:17.50 offsetHeight:17.50 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.00 clientHeight:17.00 >+offsetTop:147.80 offsetLeft:196.09 offsetWidth:17.59 offsetHeight:17.59 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.09 clientHeight:17.09 >+offsetTop:149.59 offsetLeft:214.39 offsetWidth:17.69 offsetHeight:17.69 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.19 clientHeight:17.19 >+offsetTop:151.39 offsetLeft:232.89 offsetWidth:17.80 offsetHeight:17.80 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.30 clientHeight:17.30 >+offsetTop:153.19 offsetLeft:251.59 offsetWidth:17.89 offsetHeight:17.89 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.39 clientHeight:17.39 >+offsetTop:155.00 offsetLeft:270.50 offsetWidth:18.00 offsetHeight:18.00 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.50 clientHeight:17.50 >+offsetTop:156.80 offsetLeft:289.59 offsetWidth:18.09 offsetHeight:18.09 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.59 clientHeight:17.59 >+offsetTop:158.59 offsetLeft:308.89 offsetWidth:18.19 offsetHeight:18.19 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.69 clientHeight:17.69 >+offsetTop:160.39 offsetLeft:328.39 offsetWidth:18.30 offsetHeight:18.30 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.80 clientHeight:17.80 >+offsetTop:162.19 offsetLeft:348.09 offsetWidth:18.39 offsetHeight:18.39 >+clientTop:0.25 clientLeft:0.25 clientWidth:17.89 clientHeight:17.89 >+offsetTop:162.00 offsetLeft:9.89 offsetWidth:18.53 offsetHeight:18.53 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.00 clientHeight:18.00 >+offsetTop:164.00 offsetLeft:28.00 offsetWidth:18.63 offsetHeight:18.63 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.09 clientHeight:18.09 >+offsetTop:166.00 offsetLeft:46.30 offsetWidth:18.72 offsetHeight:18.72 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.19 clientHeight:18.19 >+offsetTop:168.00 offsetLeft:64.80 offsetWidth:18.83 offsetHeight:18.83 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.30 clientHeight:18.30 >+offsetTop:170.00 offsetLeft:83.50 offsetWidth:18.92 offsetHeight:18.92 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.39 clientHeight:18.39 >+offsetTop:172.00 offsetLeft:102.39 offsetWidth:19.03 offsetHeight:19.03 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.50 clientHeight:18.50 >+offsetTop:174.00 offsetLeft:121.50 offsetWidth:19.13 offsetHeight:19.13 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.59 clientHeight:18.59 >+offsetTop:176.00 offsetLeft:140.80 offsetWidth:19.22 offsetHeight:19.22 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.69 clientHeight:18.69 >+offsetTop:178.00 offsetLeft:160.30 offsetWidth:19.33 offsetHeight:19.33 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.80 clientHeight:18.80 >+offsetTop:180.00 offsetLeft:180.00 offsetWidth:19.42 offsetHeight:19.42 >+clientTop:0.27 clientLeft:0.27 clientWidth:18.89 clientHeight:18.89 >+offsetTop:182.00 offsetLeft:199.89 offsetWidth:19.53 offsetHeight:19.53 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.00 clientHeight:19.00 >+offsetTop:184.00 offsetLeft:220.00 offsetWidth:19.63 offsetHeight:19.63 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.09 clientHeight:19.09 >+offsetTop:186.00 offsetLeft:240.30 offsetWidth:19.72 offsetHeight:19.72 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.19 clientHeight:19.19 >+offsetTop:188.00 offsetLeft:260.80 offsetWidth:19.83 offsetHeight:19.83 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.30 clientHeight:19.30 >+offsetTop:190.00 offsetLeft:281.50 offsetWidth:19.92 offsetHeight:19.92 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.39 clientHeight:19.39 >+offsetTop:192.00 offsetLeft:302.39 offsetWidth:20.03 offsetHeight:20.03 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.50 clientHeight:19.50 >+offsetTop:194.00 offsetLeft:323.50 offsetWidth:20.13 offsetHeight:20.13 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.59 clientHeight:19.59 >+offsetTop:196.00 offsetLeft:344.80 offsetWidth:20.22 offsetHeight:20.22 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.69 clientHeight:19.69 >+offsetTop:198.00 offsetLeft:366.30 offsetWidth:20.33 offsetHeight:20.33 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.80 clientHeight:19.80 >+offsetTop:200.00 offsetLeft:388.00 offsetWidth:20.42 offsetHeight:20.42 >+clientTop:0.27 clientLeft:0.27 clientWidth:19.89 clientHeight:19.89 >+offsetTop:200.00 offsetLeft:12.00 offsetWidth:20.59 offsetHeight:20.59 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.00 clientHeight:20.00 >+offsetTop:202.19 offsetLeft:32.09 offsetWidth:20.69 offsetHeight:20.69 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.09 clientHeight:20.09 >+offsetTop:204.39 offsetLeft:52.39 offsetWidth:20.78 offsetHeight:20.78 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.19 clientHeight:20.19 >+offsetTop:206.59 offsetLeft:72.89 offsetWidth:20.89 offsetHeight:20.89 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.30 clientHeight:20.30 >+offsetTop:208.80 offsetLeft:93.59 offsetWidth:20.98 offsetHeight:20.98 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.39 clientHeight:20.39 >+offsetTop:211.00 offsetLeft:114.50 offsetWidth:21.09 offsetHeight:21.09 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.50 clientHeight:20.50 >+offsetTop:213.19 offsetLeft:135.59 offsetWidth:21.19 offsetHeight:21.19 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.59 clientHeight:20.59 >+offsetTop:215.39 offsetLeft:156.89 offsetWidth:21.28 offsetHeight:21.28 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.69 clientHeight:20.69 >+offsetTop:217.59 offsetLeft:178.39 offsetWidth:21.39 offsetHeight:21.39 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.80 clientHeight:20.80 >+offsetTop:219.80 offsetLeft:200.09 offsetWidth:21.48 offsetHeight:21.48 >+clientTop:0.30 clientLeft:0.30 clientWidth:20.89 clientHeight:20.89 >+offsetTop:222.00 offsetLeft:222.00 offsetWidth:21.59 offsetHeight:21.59 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.00 clientHeight:21.00 >+offsetTop:224.19 offsetLeft:244.09 offsetWidth:21.69 offsetHeight:21.69 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.09 clientHeight:21.09 >+offsetTop:226.39 offsetLeft:266.39 offsetWidth:21.78 offsetHeight:21.78 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.19 clientHeight:21.19 >+offsetTop:228.59 offsetLeft:288.89 offsetWidth:21.89 offsetHeight:21.89 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.30 clientHeight:21.30 >+offsetTop:230.80 offsetLeft:311.59 offsetWidth:21.98 offsetHeight:21.98 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.39 clientHeight:21.39 >+offsetTop:233.00 offsetLeft:334.50 offsetWidth:22.09 offsetHeight:22.09 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.50 clientHeight:21.50 >+offsetTop:235.19 offsetLeft:357.59 offsetWidth:22.19 offsetHeight:22.19 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.59 clientHeight:21.59 >+offsetTop:237.39 offsetLeft:380.89 offsetWidth:22.28 offsetHeight:22.28 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.69 clientHeight:21.69 >+offsetTop:239.59 offsetLeft:404.39 offsetWidth:22.39 offsetHeight:22.39 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.80 clientHeight:21.80 >+offsetTop:241.80 offsetLeft:428.09 offsetWidth:22.48 offsetHeight:22.48 >+clientTop:0.30 clientLeft:0.30 clientWidth:21.89 clientHeight:21.89 >+offsetTop:242.00 offsetLeft:14.30 offsetWidth:22.63 offsetHeight:22.63 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.00 clientHeight:22.00 >+offsetTop:244.39 offsetLeft:36.39 offsetWidth:22.72 offsetHeight:22.72 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.09 clientHeight:22.09 >+offsetTop:246.80 offsetLeft:58.69 offsetWidth:22.81 offsetHeight:22.81 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.19 clientHeight:22.19 >+offsetTop:249.19 offsetLeft:81.19 offsetWidth:22.92 offsetHeight:22.92 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.30 clientHeight:22.30 >+offsetTop:251.59 offsetLeft:103.89 offsetWidth:23.02 offsetHeight:23.02 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.39 clientHeight:22.39 >+offsetTop:254.00 offsetLeft:126.80 offsetWidth:23.13 offsetHeight:23.13 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.50 clientHeight:22.50 >+offsetTop:256.39 offsetLeft:149.89 offsetWidth:23.22 offsetHeight:23.22 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.59 clientHeight:22.59 >+offsetTop:258.80 offsetLeft:173.19 offsetWidth:23.31 offsetHeight:23.31 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.69 clientHeight:22.69 >+offsetTop:261.19 offsetLeft:196.69 offsetWidth:23.42 offsetHeight:23.42 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.80 clientHeight:22.80 >+offsetTop:263.59 offsetLeft:220.39 offsetWidth:23.52 offsetHeight:23.52 >+clientTop:0.31 clientLeft:0.31 clientWidth:22.89 clientHeight:22.89 >+offsetTop:266.00 offsetLeft:244.30 offsetWidth:23.63 offsetHeight:23.63 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.00 clientHeight:23.00 >+offsetTop:268.39 offsetLeft:268.39 offsetWidth:23.72 offsetHeight:23.72 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.09 clientHeight:23.09 >+offsetTop:270.80 offsetLeft:292.69 offsetWidth:23.81 offsetHeight:23.81 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.19 clientHeight:23.19 >+offsetTop:273.19 offsetLeft:317.19 offsetWidth:23.92 offsetHeight:23.92 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.30 clientHeight:23.30 >+offsetTop:275.59 offsetLeft:341.89 offsetWidth:24.02 offsetHeight:24.02 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.39 clientHeight:23.39 >+offsetTop:278.00 offsetLeft:366.80 offsetWidth:24.13 offsetHeight:24.13 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.50 clientHeight:23.50 >+offsetTop:280.39 offsetLeft:391.89 offsetWidth:24.22 offsetHeight:24.22 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.59 clientHeight:23.59 >+offsetTop:282.80 offsetLeft:417.19 offsetWidth:24.31 offsetHeight:24.31 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.69 clientHeight:23.69 >+offsetTop:285.19 offsetLeft:442.69 offsetWidth:24.42 offsetHeight:24.42 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.80 clientHeight:23.80 >+offsetTop:287.59 offsetLeft:468.39 offsetWidth:24.52 offsetHeight:24.52 >+clientTop:0.31 clientLeft:0.31 clientWidth:23.89 clientHeight:23.89 >+offsetTop:288.00 offsetLeft:16.80 offsetWidth:24.69 offsetHeight:24.69 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.00 clientHeight:24.00 >+offsetTop:290.59 offsetLeft:40.89 offsetWidth:24.78 offsetHeight:24.78 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.09 clientHeight:24.09 >+offsetTop:293.19 offsetLeft:65.19 offsetWidth:24.88 offsetHeight:24.88 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.19 clientHeight:24.19 >+offsetTop:295.80 offsetLeft:89.69 offsetWidth:24.98 offsetHeight:24.98 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.30 clientHeight:24.30 >+offsetTop:298.39 offsetLeft:114.39 offsetWidth:25.08 offsetHeight:25.08 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.39 clientHeight:24.39 >+offsetTop:301.00 offsetLeft:139.30 offsetWidth:25.19 offsetHeight:25.19 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.50 clientHeight:24.50 >+offsetTop:303.59 offsetLeft:164.39 offsetWidth:25.28 offsetHeight:25.28 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.59 clientHeight:24.59 >+offsetTop:306.19 offsetLeft:189.69 offsetWidth:25.38 offsetHeight:25.38 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.69 clientHeight:24.69 >+offsetTop:308.80 offsetLeft:215.19 offsetWidth:25.48 offsetHeight:25.48 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.80 clientHeight:24.80 >+offsetTop:311.39 offsetLeft:240.89 offsetWidth:25.58 offsetHeight:25.58 >+clientTop:0.34 clientLeft:0.34 clientWidth:24.89 clientHeight:24.89 >+offsetTop:314.00 offsetLeft:266.80 offsetWidth:25.69 offsetHeight:25.69 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.00 clientHeight:25.00 >+offsetTop:316.59 offsetLeft:292.89 offsetWidth:25.78 offsetHeight:25.78 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.09 clientHeight:25.09 >+offsetTop:319.19 offsetLeft:319.19 offsetWidth:25.88 offsetHeight:25.88 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.19 clientHeight:25.19 >+offsetTop:321.80 offsetLeft:345.69 offsetWidth:25.98 offsetHeight:25.98 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.30 clientHeight:25.30 >+offsetTop:324.39 offsetLeft:372.39 offsetWidth:26.08 offsetHeight:26.08 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.39 clientHeight:25.39 >+offsetTop:327.00 offsetLeft:399.30 offsetWidth:26.19 offsetHeight:26.19 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.50 clientHeight:25.50 >+offsetTop:329.59 offsetLeft:426.39 offsetWidth:26.28 offsetHeight:26.28 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.59 clientHeight:25.59 >+offsetTop:332.19 offsetLeft:453.69 offsetWidth:26.38 offsetHeight:26.38 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.69 clientHeight:25.69 >+offsetTop:334.80 offsetLeft:481.19 offsetWidth:26.48 offsetHeight:26.48 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.80 clientHeight:25.80 >+offsetTop:337.39 offsetLeft:508.89 offsetWidth:26.58 offsetHeight:26.58 >+clientTop:0.34 clientLeft:0.34 clientWidth:25.89 clientHeight:25.89 >+offsetTop:338.00 offsetLeft:19.50 offsetWidth:26.75 offsetHeight:26.75 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.00 clientHeight:26.00 >+offsetTop:340.80 offsetLeft:45.59 offsetWidth:26.84 offsetHeight:26.84 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.09 clientHeight:26.09 >+offsetTop:343.59 offsetLeft:71.89 offsetWidth:26.94 offsetHeight:26.94 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.19 clientHeight:26.19 >+offsetTop:346.39 offsetLeft:98.39 offsetWidth:27.05 offsetHeight:27.05 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.30 clientHeight:26.30 >+offsetTop:349.19 offsetLeft:125.09 offsetWidth:27.14 offsetHeight:27.14 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.39 clientHeight:26.39 >+offsetTop:352.00 offsetLeft:152.00 offsetWidth:27.25 offsetHeight:27.25 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.50 clientHeight:26.50 >+offsetTop:354.80 offsetLeft:179.09 offsetWidth:27.34 offsetHeight:27.34 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.59 clientHeight:26.59 >+offsetTop:357.59 offsetLeft:206.39 offsetWidth:27.44 offsetHeight:27.44 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.69 clientHeight:26.69 >+offsetTop:360.39 offsetLeft:233.89 offsetWidth:27.55 offsetHeight:27.55 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.80 clientHeight:26.80 >+offsetTop:363.19 offsetLeft:261.59 offsetWidth:27.64 offsetHeight:27.64 >+clientTop:0.38 clientLeft:0.38 clientWidth:26.89 clientHeight:26.89 >+offsetTop:366.00 offsetLeft:289.50 offsetWidth:27.75 offsetHeight:27.75 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.00 clientHeight:27.00 >+offsetTop:368.80 offsetLeft:317.59 offsetWidth:27.84 offsetHeight:27.84 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.09 clientHeight:27.09 >+offsetTop:371.59 offsetLeft:345.89 offsetWidth:27.94 offsetHeight:27.94 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.19 clientHeight:27.19 >+offsetTop:374.39 offsetLeft:374.39 offsetWidth:28.05 offsetHeight:28.05 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.30 clientHeight:27.30 >+offsetTop:377.19 offsetLeft:403.09 offsetWidth:28.14 offsetHeight:28.14 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.39 clientHeight:27.39 >+offsetTop:380.00 offsetLeft:432.00 offsetWidth:28.25 offsetHeight:28.25 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.50 clientHeight:27.50 >+offsetTop:382.80 offsetLeft:461.09 offsetWidth:28.34 offsetHeight:28.34 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.59 clientHeight:27.59 >+offsetTop:385.59 offsetLeft:490.39 offsetWidth:28.44 offsetHeight:28.44 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.69 clientHeight:27.69 >+offsetTop:388.39 offsetLeft:519.89 offsetWidth:28.55 offsetHeight:28.55 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.80 clientHeight:27.80 >+offsetTop:391.19 offsetLeft:549.59 offsetWidth:28.64 offsetHeight:28.64 >+clientTop:0.38 clientLeft:0.38 clientWidth:27.89 clientHeight:27.89 >+offsetTop:392.00 offsetLeft:22.39 offsetWidth:28.78 offsetHeight:28.78 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.00 clientHeight:28.00 >+offsetTop:395.00 offsetLeft:50.50 offsetWidth:28.88 offsetHeight:28.88 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.09 clientHeight:28.09 >+offsetTop:398.00 offsetLeft:78.80 offsetWidth:28.97 offsetHeight:28.97 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.19 clientHeight:28.19 >+offsetTop:401.00 offsetLeft:107.30 offsetWidth:29.08 offsetHeight:29.08 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.30 clientHeight:28.30 >+offsetTop:404.00 offsetLeft:136.00 offsetWidth:29.17 offsetHeight:29.17 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.39 clientHeight:28.39 >+offsetTop:407.00 offsetLeft:164.89 offsetWidth:29.28 offsetHeight:29.28 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.50 clientHeight:28.50 >+offsetTop:410.00 offsetLeft:194.00 offsetWidth:29.38 offsetHeight:29.38 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.59 clientHeight:28.59 >+offsetTop:413.00 offsetLeft:223.30 offsetWidth:29.47 offsetHeight:29.47 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.69 clientHeight:28.69 >+offsetTop:416.00 offsetLeft:252.80 offsetWidth:29.58 offsetHeight:29.58 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.80 clientHeight:28.80 >+offsetTop:419.00 offsetLeft:282.50 offsetWidth:29.67 offsetHeight:29.67 >+clientTop:0.39 clientLeft:0.39 clientWidth:28.89 clientHeight:28.89 >+offsetTop:422.00 offsetLeft:312.39 offsetWidth:29.78 offsetHeight:29.78 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.00 clientHeight:29.00 >+offsetTop:425.00 offsetLeft:342.50 offsetWidth:29.88 offsetHeight:29.88 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.09 clientHeight:29.09 >+offsetTop:428.00 offsetLeft:372.80 offsetWidth:29.97 offsetHeight:29.97 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.19 clientHeight:29.19 >+offsetTop:431.00 offsetLeft:403.30 offsetWidth:30.08 offsetHeight:30.08 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.30 clientHeight:29.30 >+offsetTop:434.00 offsetLeft:434.00 offsetWidth:30.17 offsetHeight:30.17 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.39 clientHeight:29.39 >+offsetTop:437.00 offsetLeft:464.89 offsetWidth:30.28 offsetHeight:30.28 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.50 clientHeight:29.50 >+offsetTop:440.00 offsetLeft:496.00 offsetWidth:30.38 offsetHeight:30.38 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.59 clientHeight:29.59 >+offsetTop:443.00 offsetLeft:527.30 offsetWidth:30.47 offsetHeight:30.47 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.69 clientHeight:29.69 >+offsetTop:446.00 offsetLeft:558.80 offsetWidth:30.58 offsetHeight:30.58 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.80 clientHeight:29.80 >+offsetTop:449.00 offsetLeft:590.50 offsetWidth:30.67 offsetHeight:30.67 >+clientTop:0.39 clientLeft:0.39 clientWidth:29.89 clientHeight:29.89 >+offsetTop:450.00 offsetLeft:25.50 offsetWidth:30.84 offsetHeight:30.84 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.00 clientHeight:30.00 >+offsetTop:453.19 offsetLeft:55.59 offsetWidth:30.94 offsetHeight:30.94 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.09 clientHeight:30.09 >+offsetTop:456.39 offsetLeft:85.89 offsetWidth:31.03 offsetHeight:31.03 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.19 clientHeight:30.19 >+offsetTop:459.59 offsetLeft:116.39 offsetWidth:31.14 offsetHeight:31.14 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.30 clientHeight:30.30 >+offsetTop:462.80 offsetLeft:147.09 offsetWidth:31.23 offsetHeight:31.23 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.39 clientHeight:30.39 >+offsetTop:466.00 offsetLeft:178.00 offsetWidth:31.34 offsetHeight:31.34 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.50 clientHeight:30.50 >+offsetTop:469.19 offsetLeft:209.09 offsetWidth:31.44 offsetHeight:31.44 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.59 clientHeight:30.59 >+offsetTop:472.39 offsetLeft:240.39 offsetWidth:31.53 offsetHeight:31.53 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.69 clientHeight:30.69 >+offsetTop:475.59 offsetLeft:271.89 offsetWidth:31.64 offsetHeight:31.64 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.80 clientHeight:30.80 >+offsetTop:478.80 offsetLeft:303.59 offsetWidth:31.73 offsetHeight:31.73 >+clientTop:0.42 clientLeft:0.42 clientWidth:30.89 clientHeight:30.89 >+offsetTop:482.00 offsetLeft:335.50 offsetWidth:31.84 offsetHeight:31.84 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.00 clientHeight:31.00 >+offsetTop:485.19 offsetLeft:367.59 offsetWidth:31.94 offsetHeight:31.94 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.09 clientHeight:31.09 >+offsetTop:488.39 offsetLeft:399.89 offsetWidth:32.03 offsetHeight:32.03 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.19 clientHeight:31.19 >+offsetTop:491.59 offsetLeft:432.39 offsetWidth:32.14 offsetHeight:32.14 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.30 clientHeight:31.30 >+offsetTop:494.80 offsetLeft:465.09 offsetWidth:32.23 offsetHeight:32.23 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.39 clientHeight:31.39 >+offsetTop:498.00 offsetLeft:498.00 offsetWidth:32.34 offsetHeight:32.34 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.50 clientHeight:31.50 >+offsetTop:501.19 offsetLeft:531.09 offsetWidth:32.44 offsetHeight:32.44 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.59 clientHeight:31.59 >+offsetTop:504.39 offsetLeft:564.39 offsetWidth:32.53 offsetHeight:32.53 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.69 clientHeight:31.69 >+offsetTop:507.59 offsetLeft:597.89 offsetWidth:32.64 offsetHeight:32.64 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.80 clientHeight:31.80 >+offsetTop:510.80 offsetLeft:631.59 offsetWidth:32.73 offsetHeight:32.73 >+clientTop:0.42 clientLeft:0.42 clientWidth:31.89 clientHeight:31.89 >+offsetTop:512.00 offsetLeft:28.80 offsetWidth:32.88 offsetHeight:32.88 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.00 clientHeight:32.00 >+offsetTop:515.39 offsetLeft:60.89 offsetWidth:32.97 offsetHeight:32.97 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.09 clientHeight:32.09 >+offsetTop:518.80 offsetLeft:93.19 offsetWidth:33.06 offsetHeight:33.06 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.19 clientHeight:32.19 >+offsetTop:522.19 offsetLeft:125.69 offsetWidth:33.17 offsetHeight:33.17 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.30 clientHeight:32.30 >+offsetTop:525.59 offsetLeft:158.39 offsetWidth:33.27 offsetHeight:33.27 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.39 clientHeight:32.39 >+offsetTop:529.00 offsetLeft:191.30 offsetWidth:33.38 offsetHeight:33.38 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.50 clientHeight:32.50 >+offsetTop:532.39 offsetLeft:224.39 offsetWidth:33.47 offsetHeight:33.47 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.59 clientHeight:32.59 >+offsetTop:535.80 offsetLeft:257.69 offsetWidth:33.56 offsetHeight:33.56 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.69 clientHeight:32.69 >+offsetTop:539.19 offsetLeft:291.19 offsetWidth:33.67 offsetHeight:33.67 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.80 clientHeight:32.80 >+offsetTop:542.59 offsetLeft:324.89 offsetWidth:33.77 offsetHeight:33.77 >+clientTop:0.44 clientLeft:0.44 clientWidth:32.89 clientHeight:32.89 >+offsetTop:546.00 offsetLeft:358.80 offsetWidth:33.88 offsetHeight:33.88 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.00 clientHeight:33.00 >+offsetTop:549.39 offsetLeft:392.89 offsetWidth:33.97 offsetHeight:33.97 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.09 clientHeight:33.09 >+offsetTop:552.80 offsetLeft:427.19 offsetWidth:34.06 offsetHeight:34.06 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.19 clientHeight:33.19 >+offsetTop:556.19 offsetLeft:461.69 offsetWidth:34.17 offsetHeight:34.17 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.30 clientHeight:33.30 >+offsetTop:559.59 offsetLeft:496.39 offsetWidth:34.27 offsetHeight:34.27 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.39 clientHeight:33.39 >+offsetTop:563.00 offsetLeft:531.30 offsetWidth:34.38 offsetHeight:34.38 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.50 clientHeight:33.50 >+offsetTop:566.39 offsetLeft:566.39 offsetWidth:34.47 offsetHeight:34.47 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.59 clientHeight:33.59 >+offsetTop:569.80 offsetLeft:601.69 offsetWidth:34.56 offsetHeight:34.56 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.69 clientHeight:33.69 >+offsetTop:573.19 offsetLeft:637.19 offsetWidth:34.67 offsetHeight:34.67 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.80 clientHeight:33.80 >+offsetTop:576.59 offsetLeft:672.89 offsetWidth:34.77 offsetHeight:34.77 >+clientTop:0.44 clientLeft:0.44 clientWidth:33.89 clientHeight:33.89 >+offsetTop:578.00 offsetLeft:32.30 offsetWidth:34.94 offsetHeight:34.94 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.00 clientHeight:34.00 >+offsetTop:581.59 offsetLeft:66.39 offsetWidth:35.03 offsetHeight:35.03 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.09 clientHeight:34.09 >+offsetTop:585.19 offsetLeft:100.69 offsetWidth:35.13 offsetHeight:35.13 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.19 clientHeight:34.19 >+offsetTop:588.80 offsetLeft:135.19 offsetWidth:35.23 offsetHeight:35.23 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.30 clientHeight:34.30 >+offsetTop:592.39 offsetLeft:169.89 offsetWidth:35.33 offsetHeight:35.33 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.39 clientHeight:34.39 >+offsetTop:596.00 offsetLeft:204.80 offsetWidth:35.44 offsetHeight:35.44 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.50 clientHeight:34.50 >+offsetTop:599.59 offsetLeft:239.89 offsetWidth:35.53 offsetHeight:35.53 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.59 clientHeight:34.59 >+offsetTop:603.19 offsetLeft:275.19 offsetWidth:35.63 offsetHeight:35.63 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.69 clientHeight:34.69 >+offsetTop:606.80 offsetLeft:310.69 offsetWidth:35.73 offsetHeight:35.73 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.80 clientHeight:34.80 >+offsetTop:610.39 offsetLeft:346.39 offsetWidth:35.83 offsetHeight:35.83 >+clientTop:0.47 clientLeft:0.47 clientWidth:34.89 clientHeight:34.89 >+offsetTop:614.00 offsetLeft:382.30 offsetWidth:35.94 offsetHeight:35.94 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.00 clientHeight:35.00 >+offsetTop:617.59 offsetLeft:418.39 offsetWidth:36.03 offsetHeight:36.03 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.09 clientHeight:35.09 >+offsetTop:621.19 offsetLeft:454.69 offsetWidth:36.13 offsetHeight:36.13 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.19 clientHeight:35.19 >+offsetTop:624.80 offsetLeft:491.19 offsetWidth:36.23 offsetHeight:36.23 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.30 clientHeight:35.30 >+offsetTop:628.39 offsetLeft:527.89 offsetWidth:36.33 offsetHeight:36.33 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.39 clientHeight:35.39 >+offsetTop:632.00 offsetLeft:564.80 offsetWidth:36.44 offsetHeight:36.44 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.50 clientHeight:35.50 >+offsetTop:635.59 offsetLeft:601.89 offsetWidth:36.53 offsetHeight:36.53 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.59 clientHeight:35.59 >+offsetTop:639.19 offsetLeft:639.19 offsetWidth:36.63 offsetHeight:36.63 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.69 clientHeight:35.69 >+offsetTop:642.80 offsetLeft:676.69 offsetWidth:36.73 offsetHeight:36.73 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.80 clientHeight:35.80 >+offsetTop:646.39 offsetLeft:714.39 offsetWidth:36.83 offsetHeight:36.83 >+clientTop:0.47 clientLeft:0.47 clientWidth:35.89 clientHeight:35.89 >+offsetTop:648.00 offsetLeft:36.00 offsetWidth:37.00 offsetHeight:37.00 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.00 clientHeight:36.00 >+offsetTop:651.80 offsetLeft:72.09 offsetWidth:37.09 offsetHeight:37.09 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.09 clientHeight:36.09 >+offsetTop:655.59 offsetLeft:108.39 offsetWidth:37.19 offsetHeight:37.19 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.19 clientHeight:36.19 >+offsetTop:659.39 offsetLeft:144.89 offsetWidth:37.30 offsetHeight:37.30 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.30 clientHeight:36.30 >+offsetTop:663.19 offsetLeft:181.59 offsetWidth:37.39 offsetHeight:37.39 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.39 clientHeight:36.39 >+offsetTop:667.00 offsetLeft:218.50 offsetWidth:37.50 offsetHeight:37.50 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.50 clientHeight:36.50 >+offsetTop:670.80 offsetLeft:255.59 offsetWidth:37.59 offsetHeight:37.59 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.59 clientHeight:36.59 >+offsetTop:674.59 offsetLeft:292.89 offsetWidth:37.69 offsetHeight:37.69 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.69 clientHeight:36.69 >+offsetTop:678.39 offsetLeft:330.39 offsetWidth:37.80 offsetHeight:37.80 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.80 clientHeight:36.80 >+offsetTop:682.19 offsetLeft:368.09 offsetWidth:37.89 offsetHeight:37.89 >+clientTop:0.50 clientLeft:0.50 clientWidth:36.89 clientHeight:36.89 >+offsetTop:686.00 offsetLeft:406.00 offsetWidth:38.00 offsetHeight:38.00 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.00 clientHeight:37.00 >+offsetTop:689.80 offsetLeft:444.09 offsetWidth:38.09 offsetHeight:38.09 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.09 clientHeight:37.09 >+offsetTop:693.59 offsetLeft:482.39 offsetWidth:38.19 offsetHeight:38.19 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.19 clientHeight:37.19 >+offsetTop:697.39 offsetLeft:520.89 offsetWidth:38.30 offsetHeight:38.30 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.30 clientHeight:37.30 >+offsetTop:701.19 offsetLeft:559.59 offsetWidth:38.39 offsetHeight:38.39 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.39 clientHeight:37.39 >+offsetTop:705.00 offsetLeft:598.50 offsetWidth:38.50 offsetHeight:38.50 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.50 clientHeight:37.50 >+offsetTop:708.80 offsetLeft:637.59 offsetWidth:38.59 offsetHeight:38.59 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.59 clientHeight:37.59 >+offsetTop:712.59 offsetLeft:676.89 offsetWidth:38.69 offsetHeight:38.69 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.69 clientHeight:37.69 >+offsetTop:716.39 offsetLeft:716.39 offsetWidth:38.80 offsetHeight:38.80 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.80 clientHeight:37.80 >+offsetTop:720.19 offsetLeft:756.09 offsetWidth:38.89 offsetHeight:38.89 >+clientTop:0.50 clientLeft:0.50 clientWidth:37.89 clientHeight:37.89 >+offsetTop:722.00 offsetLeft:39.89 offsetWidth:39.03 offsetHeight:39.03 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.00 clientHeight:38.00 >+offsetTop:726.00 offsetLeft:78.00 offsetWidth:39.13 offsetHeight:39.13 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.09 clientHeight:38.09 >+offsetTop:730.00 offsetLeft:116.30 offsetWidth:39.22 offsetHeight:39.22 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.19 clientHeight:38.19 >+offsetTop:734.00 offsetLeft:154.80 offsetWidth:39.33 offsetHeight:39.33 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.30 clientHeight:38.30 >+offsetTop:738.00 offsetLeft:193.50 offsetWidth:39.42 offsetHeight:39.42 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.39 clientHeight:38.39 >+offsetTop:742.00 offsetLeft:232.39 offsetWidth:39.53 offsetHeight:39.53 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.50 clientHeight:38.50 >+offsetTop:746.00 offsetLeft:271.50 offsetWidth:39.63 offsetHeight:39.63 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.59 clientHeight:38.59 >+offsetTop:750.00 offsetLeft:310.80 offsetWidth:39.72 offsetHeight:39.72 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.69 clientHeight:38.69 >+offsetTop:754.00 offsetLeft:350.30 offsetWidth:39.83 offsetHeight:39.83 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.80 clientHeight:38.80 >+offsetTop:758.00 offsetLeft:390.00 offsetWidth:39.92 offsetHeight:39.92 >+clientTop:0.52 clientLeft:0.52 clientWidth:38.89 clientHeight:38.89 >+offsetTop:762.00 offsetLeft:429.89 offsetWidth:40.03 offsetHeight:40.03 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.00 clientHeight:39.00 >+offsetTop:766.00 offsetLeft:470.00 offsetWidth:40.13 offsetHeight:40.13 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.09 clientHeight:39.09 >+offsetTop:770.00 offsetLeft:510.30 offsetWidth:40.22 offsetHeight:40.22 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.19 clientHeight:39.19 >+offsetTop:774.00 offsetLeft:550.80 offsetWidth:40.33 offsetHeight:40.33 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.30 clientHeight:39.30 >+offsetTop:778.00 offsetLeft:591.50 offsetWidth:40.42 offsetHeight:40.42 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.39 clientHeight:39.39 >+offsetTop:782.00 offsetLeft:632.39 offsetWidth:40.53 offsetHeight:40.53 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.50 clientHeight:39.50 >+offsetTop:786.00 offsetLeft:673.50 offsetWidth:40.63 offsetHeight:40.63 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.59 clientHeight:39.59 >+offsetTop:790.00 offsetLeft:714.80 offsetWidth:40.72 offsetHeight:40.72 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.69 clientHeight:39.69 >+offsetTop:794.00 offsetLeft:756.30 offsetWidth:40.83 offsetHeight:40.83 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.80 clientHeight:39.80 >+offsetTop:798.00 offsetLeft:798.00 offsetWidth:40.92 offsetHeight:40.92 >+clientTop:0.52 clientLeft:0.52 clientWidth:39.89 clientHeight:39.89 >+ >diff --git a/LayoutTests/cssom/subpixel-offsetleft-top-width-height-values.html b/LayoutTests/cssom/subpixel-offsetleft-top-width-height-values.html >new file mode 100644 >index 0000000000000000000000000000000000000000..63f1410ba91db68cbd8ca3cfddda71940486b53d >--- /dev/null >+++ b/LayoutTests/cssom/subpixel-offsetleft-top-width-height-values.html >@@ -0,0 +1,46 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<title>This tests that offset* and client* can return fractional values.</title> >+<style> >+div { >+ position: fixed; >+ border-style: solid; >+ border-color: red; >+} >+</style> >+</head> >+<body> >+<script> >+ if (window.testRunner) >+ testRunner.dumpAsText(); >+ >+ var container = document.body; >+ w = 0; >+ h = 0; >+ adjustment = 0.1; >+ for (i = 0; i < 20; ++i) { >+ adjustment+=0.1; >+ for (j = 0; j < 20; ++j) { >+ var e = document.createElement("div"); >+ e.style.top = (w * i + j * adjustment) + "px"; >+ e.style.left = (w * j + i * adjustment) + "px"; >+ e.style.width = w + "px"; >+ e.style.height = h + "px"; >+ e.style.borderWidth = adjustment/4 + "px"; >+ container.appendChild(e); >+ w+=0.1; >+ h+=0.1; >+ } >+ } >+ >+ var result = ""; >+ var divs = document.getElementsByTagName("div"); >+ for (i = 0; i < divs.length; ++i) { >+ var element = divs[i]; >+ result+="offsetTop:" + element.offsetTop.toFixed(2) + " offsetLeft:" + element.offsetLeft.toFixed(2) + " offsetWidth:" + element.offsetWidth.toFixed(2) + " offsetHeight:" + element.offsetHeight.toFixed(2) + "</br> clientTop:" + element.clientTop.toFixed(2) + " clientLeft:" + element.clientLeft.toFixed(2) + " clientWidth:" + element.clientWidth.toFixed(2) + " clientHeight:" + element.clientHeight.toFixed(2) + "</br>"; >+ } >+ document.body.innerHTML = result; >+</script> >+</body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/editing/selection/drag-start-event-client-x-y.html b/LayoutTests/editing/selection/drag-start-event-client-x-y.html >index 417798a1abd109f25e3b7d717dd7c4f6926c18af..b25545dc7dfcadbca6fdae48b5c03c228882c297 100644 >--- a/LayoutTests/editing/selection/drag-start-event-client-x-y.html >+++ b/LayoutTests/editing/selection/drag-start-event-client-x-y.html >@@ -43,10 +43,10 @@ > > dragStartHandler: function(dragStart, dragDistance) { > var resultElement = document.getElementById("result"); >- shouldBe(resultElement, "clientX", dragStart.x, event.clientX); >- shouldBe(resultElement, "clientY", dragStart.y, event.clientY); >- shouldBe(resultElement, "pageX", dragStart.x, event.pageX); >- shouldBe(resultElement, "pageY", dragStart.y, event.pageY); >+ shouldBe(resultElement, "clientX", Math.floor(dragStart.x), event.clientX); >+ shouldBe(resultElement, "clientY", Math.floor(dragStart.y), event.clientY); >+ shouldBe(resultElement, "pageX", Math.floor(dragStart.x), event.pageX); >+ shouldBe(resultElement, "pageY", Math.floor(dragStart.y), event.pageY); > }, > > runTest: function() { >@@ -57,7 +57,7 @@ > testRunner.dumpAsText(); > > var element = document.getElementById("draggable"); >- var dragStart = { x: element.offsetLeft + element.offsetWidth / 2, y: element.offsetTop + 1.0 }; >+ var dragStart = { x: Math.round(element.offsetLeft) + Math.round(element.offsetWidth) / 2, y: Math.round(element.offsetTop) + 1.0 }; > var dragDistance = 10.0; > element.ondragstart = this.dragStartHandler.bind(this, dragStart, dragDistance); > >@@ -71,9 +71,12 @@ > </script> > </head> > <body onload="Test.runTest()"> >- <h3>Test for <a href='https://bugs.webkit.org/show_bug.cgi?id=26723'>WebKit bug 26723</a>: clientX,Y , screenX , Y always (0, 0) in dragstart event</h3> >- <div id="draggable" class="test"> >- DRAG ME! >+ <h3>Test for <a href='https://bugs.webkit.org/show_bug.cgi?id=26723'>WebKit bug 26723</a>: clientX,Y , screenX , Y always (0, 0) in dragstart event</h3> >+ >+ <div id="draggable" class="test"> >+ >+ DRAG ME! >+ > </div> > <div id="result"></div> > </body> >diff --git a/LayoutTests/editing/selection/mixed-editability-10.html b/LayoutTests/editing/selection/mixed-editability-10.html >index cfd31247d3e155b25ec167c4f1ca5079c70be5e5..d60113f5ce22ef8f2fd20f31a2f32c4217dd3eac 100644 >--- a/LayoutTests/editing/selection/mixed-editability-10.html >+++ b/LayoutTests/editing/selection/mixed-editability-10.html >@@ -55,8 +55,8 @@ function runTest(x, y, elem, offset, refpos) { > var anchorOffset = selection.anchorOffset; > > var coord = caretCoordinates(); >- var anchorString = "Anchor (" + anchorNode + ", " + anchorOffset + " caret[" + coord.x + "," + coord.y + "] refpos=" + refpos + ")"; >- var anchorCorrect = anchorNode == elem && anchorOffset == offset && coord.x == refpos; >+ var anchorString = "Anchor (" + anchorNode + ", " + anchorOffset + " caret[" + coord.x + "," + coord.y + "] refpos=" + Math.round(refpos) + ")"; >+ var anchorCorrect = anchorNode == elem && anchorOffset == offset && coord.x == Math.round(refpos); > if (anchorCorrect) > log(anchorString + " is correct."); > else >diff --git a/LayoutTests/fast/css/zoom-in-length-round-trip.html b/LayoutTests/fast/css/zoom-in-length-round-trip.html >index f87ff2cf7c3c57d9bf6517af2572ad8ec177a16f..d9bd8aaaf603a105508318e55b03f1eb5c596746 100644 >--- a/LayoutTests/fast/css/zoom-in-length-round-trip.html >+++ b/LayoutTests/fast/css/zoom-in-length-round-trip.html >@@ -29,8 +29,8 @@ > > for (zoom = 100; zoom <= 200; zoom += 1) { > containerStyle.setProperty("zoom", zoom / 100); >- if (target.offsetWidth != 1 || target.offsetHeight != 10) { >- if (hasSubpixelSupport && (target.offsetWidth == 1 || target.offsetWidth == 2) && (target.offsetHeight == 10 || target.offsetHeight == 11)) >+ if (Math.round(target.offsetWidth) != 1 || Math.round(target.offsetHeight) != 10) { >+ if (hasSubpixelSupport && (Math.round(target.offsetWidth) == 1 || Math.round(target.offsetWidth) == 2) && (Math.round(target.offsetHeight) == 10 || Math.round(target.offsetHeight) == 11)) > continue; // With subpixel layout and pixel snapping we extend the box with one pixel at certain zoom levels. > failed = true; > log("FAIL at " + zoom + "% magnification: 1 mapped to " + target.offsetWidth + " and 10 mapped to " + target.offsetHeight + "."); >diff --git a/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt b/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt >index 36f38da8eee2c307259e73f62d67fa5f9d00ebea..7b5d1af640c5e16229c0c563542d46e2350a8c2a 100644 >--- a/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt >+++ b/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt >@@ -23,8 +23,8 @@ PASS nonNumericPolicy('document.elementFromPoint(x, 0)') is 'any type allowed' > PASS nonNumericPolicy('document.elementFromPoint(0, x)') is 'any type allowed' > PASS nonNumericPolicy('document.body.scrollByLines(x)') is 'any type allowed' > PASS nonNumericPolicy('document.body.scrollByPages(x)') is 'any type allowed' >-PASS nonNumericPolicy('document.body.scrollLeft = x') is 'any type allowed' >-PASS nonNumericPolicy('document.body.scrollTop = x') is 'any type allowed' >+PASS nonNumericPolicy('document.body.scrollLeft = x') is 'mixed' >+PASS nonNumericPolicy('document.body.scrollTop = x') is 'mixed' > PASS nonNumericPolicy('document.images.item(x)') is 'any type allowed' > PASS nonNumericPolicy('document.createElement("input").setSelectionRange(x, 0)') is 'any type allowed' > PASS nonNumericPolicy('document.createElement("input").setSelectionRange(0, x)') is 'any type allowed' >diff --git a/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js b/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js >index 8bccf5d8e305a9a25eeb03308d6bc0bf904d69aa..d35f341627be734faffcd16b36822efae4bde945 100644 >--- a/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js >+++ b/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js >@@ -226,8 +226,8 @@ shouldBe("nonNumericPolicy('document.elementFromPoint(0, x)')", "'any type allow > > shouldBe("nonNumericPolicy('document.body.scrollByLines(x)')", "'any type allowed'"); > shouldBe("nonNumericPolicy('document.body.scrollByPages(x)')", "'any type allowed'"); >-shouldBe("nonNumericPolicy('document.body.scrollLeft = x')", "'any type allowed'"); >-shouldBe("nonNumericPolicy('document.body.scrollTop = x')", "'any type allowed'"); >+shouldBe("nonNumericPolicy('document.body.scrollLeft = x')", "'mixed'"); >+shouldBe("nonNumericPolicy('document.body.scrollTop = x')", "'mixed'"); > > // History > >@@ -392,8 +392,8 @@ Here are other examples of numeric types in function parameters and settable att > ../../../../WebCore/html/HTMLAppletElement.idl: attribute [ConvertFromString] long vspace; > ../../../../WebCore/html/HTMLAreaElement.idl: attribute long tabIndex; > ../../../../WebCore/html/HTMLBaseFontElement.idl: attribute long size; >-../../../../WebCore/html/HTMLBodyElement.idl: attribute long scrollLeft; >-../../../../WebCore/html/HTMLBodyElement.idl: attribute long scrollTop; >+../../../../WebCore/html/HTMLBodyElement.idl: attribute float scrollLeft; >+../../../../WebCore/html/HTMLBodyElement.idl: attribute float scrollTop; > ../../../../WebCore/html/HTMLButtonElement.idl: attribute long tabIndex; > ../../../../WebCore/html/HTMLCanvasElement.idl: attribute long width; > ../../../../WebCore/html/HTMLCanvasElement.idl: attribute long height; >diff --git a/LayoutTests/fast/forms/basic-buttons.html b/LayoutTests/fast/forms/basic-buttons.html >index 1ff98244967e634a1ead60083cfdfac75df2a1c5..6b78def32c1363609915e276afe20de159b6a2d3 100644 >--- a/LayoutTests/fast/forms/basic-buttons.html >+++ b/LayoutTests/fast/forms/basic-buttons.html >@@ -43,8 +43,8 @@ function printSize(tagname, cell) > var thisRow = thisCell.parentNode; > > button.parentNode.nextSibling.innerHTML = >- "(" + button.offsetHeight + ", " + button.offsetWidth + ") " + >- "(" + button.clientHeight + ", " + button.clientWidth + ")"; >+ "(" + Math.round(button.offsetHeight) + ", " + Math.round(button.offsetWidth) + ") " + >+ "(" + Math.round(button.clientHeight) + ", " + Math.round(button.clientWidth) + ")"; > } > } > >diff --git a/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt b/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt >index 36a4bb1ea1fb627fe19969975e169ec24fe78fc2..77465b1913a3e5635a7517179694c4fb60599d2d 100644 >--- a/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt >+++ b/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt >@@ -52,7 +52,6 @@ PASS a["offsetLeft"] is 8 > PASS a["offsetTop"] is 774 > PASS a["offsetWidth"] is 39 > PASS a["offsetHeight"] is 18 >-PASS a["offsetParent"] is [object HTMLBodyElement] > PASS a["clientLeft"] is 0 > PASS a["clientTop"] is 0 > PASS a["clientWidth"] is 0 >@@ -61,6 +60,7 @@ PASS a["scrollLeft"] is 0 > PASS a["scrollTop"] is 0 > PASS a["scrollWidth"] is 0 > PASS a["scrollHeight"] is 0 >+PASS a["offsetParent"] is [object HTMLBodyElement] > PASS a["className"] is > PASS a["classList"] is > PASS a["dataset"] is [object DOMStringMap] >diff --git a/LayoutTests/platform/mac/fast/scrolling/scroll-div-latched-div.html b/LayoutTests/platform/mac/fast/scrolling/scroll-div-latched-div.html >index 2969da8971f77e28c593246d4b0e454a7fe5fda9..f64711b429085b09f6c23add4fcb06cf4f65036f 100644 >--- a/LayoutTests/platform/mac/fast/scrolling/scroll-div-latched-div.html >+++ b/LayoutTests/platform/mac/fast/scrolling/scroll-div-latched-div.html >@@ -69,7 +69,7 @@ function scrollTest() { > // Scroll the #source until we reach the #target. > var startPosX = divTarget.offsetLeft + 20; > debug("div display height = " + divTarget.clientHeight); >- var startPosY = divTarget.offsetTop + divTarget.clientHeight - 42; // One wheel turn before end. >+ var startPosY = Math.round(divTarget.offsetTop) + Math.round(divTarget.clientHeight) - 42; // One wheel turn before end. > eventSender.mouseMoveTo(startPosX, startPosY); // Make sure we are just outside the iFrame > debug("Mouse moved to (" + startPosX + ", " + startPosY + ")"); > eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none', true); >diff --git a/LayoutTests/platform/mac/fast/scrolling/scroll-div-latched-mainframe.html b/LayoutTests/platform/mac/fast/scrolling/scroll-div-latched-mainframe.html >index c43feaeebb93c5ced60b667046a74f20e994b904..c904d3bb02d29f34297fba50bae3e5e0b724c520 100644 >--- a/LayoutTests/platform/mac/fast/scrolling/scroll-div-latched-mainframe.html >+++ b/LayoutTests/platform/mac/fast/scrolling/scroll-div-latched-mainframe.html >@@ -66,8 +66,8 @@ function scrollTest() { > divScrollPositionBefore = divTarget.scrollTop; > > // Scroll the #source until we reach the #target. >- var startPosX = divTarget.offsetLeft + 20; >- var startPosY = divTarget.offsetTop - 42; // Slightly more than one wheel scroll away from the IFrame >+ var startPosX = Math.round(divTarget.offsetLeft) + 20; >+ var startPosY = Math.round(divTarget.offsetTop) - 42; // Slightly more than one wheel scroll away from the IFrame > eventSender.mouseMoveTo(startPosX, startPosY); // Make sure we are just outside the iFrame > debug("Mouse moved to (" + startPosX + ", " + startPosY + ")"); > eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none', true); >diff --git a/LayoutTests/platform/mac/fast/scrolling/scroll-select-bottom-test.html b/LayoutTests/platform/mac/fast/scrolling/scroll-select-bottom-test.html >index ab11c2541f7dfa638369977f6a3201ce7c30600d..956dcc0d4412fc0cdd3ca5008d26a9408e69c96a 100644 >--- a/LayoutTests/platform/mac/fast/scrolling/scroll-select-bottom-test.html >+++ b/LayoutTests/platform/mac/fast/scrolling/scroll-select-bottom-test.html >@@ -71,7 +71,7 @@ function scrollTest() { > // Scroll the #source until we reach the #target. > var startPosX = selectTarget.offsetLeft + 20; > debug("div display height = " + selectTarget.clientHeight); >- var startPosY = selectTarget.offsetTop + selectTarget.clientHeight + clientInset - 2; // Very near top (accounting for top content inset). >+ var startPosY = Math.round(selectTarget.offsetTop) + Math.round(selectTarget.clientHeight) + clientInset - 2; // Very near top (accounting for top content inset). > eventSender.mouseMoveTo(startPosX, startPosY); > debug("Mouse moved to (" + startPosX + ", " + startPosY + ")"); > eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none', true); >diff --git a/LayoutTests/platform/mac/fast/scrolling/scroll-select-latched-mainframe.html b/LayoutTests/platform/mac/fast/scrolling/scroll-select-latched-mainframe.html >index 2d7a465d1687227af068971a1ea279c3f5557574..34ecb1e7402803229c62821945cac00c74f251e6 100644 >--- a/LayoutTests/platform/mac/fast/scrolling/scroll-select-latched-mainframe.html >+++ b/LayoutTests/platform/mac/fast/scrolling/scroll-select-latched-mainframe.html >@@ -66,8 +66,8 @@ function scrollTest() { > selectScrollPositionBefore = selectTarget.scrollTop; > > // Scroll the #source until we reach the #target. >- var startPosX = selectTarget.offsetLeft + 20; >- var startPosY = selectTarget.offsetTop - 42; // Slightly more than one wheel scroll away from the IFrame >+ var startPosX = Math.round(selectTarget.offsetLeft) + 20; >+ var startPosY = Math.round(selectTarget.offsetTop) - 42; // Slightly more than one wheel scroll away from the IFrame > eventSender.mouseMoveTo(startPosX, startPosY); // Make sure we are just outside the iFrame > debug("Mouse moved to (" + startPosX + ", " + startPosY + ")"); > eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none', true); >diff --git a/LayoutTests/platform/mac/fast/scrolling/scroll-select-latched-select.html b/LayoutTests/platform/mac/fast/scrolling/scroll-select-latched-select.html >index 97228466b97c3c6c7107e5849e79d2e239bf52f9..123e2a996195aa3e4e53acf13fdc8032899d419b 100644 >--- a/LayoutTests/platform/mac/fast/scrolling/scroll-select-latched-select.html >+++ b/LayoutTests/platform/mac/fast/scrolling/scroll-select-latched-select.html >@@ -67,9 +67,9 @@ function scrollTest() { > selectScrollPositionBefore = selectTarget.scrollTop; > > // Scroll the #source until we reach the #target. >- var startPosX = selectTarget.offsetLeft + 20; >+ var startPosX = Math.round(selectTarget.offsetLeft) + 20; > debug("div display height = " + selectTarget.clientHeight); >- var startPosY = selectTarget.offsetTop + selectTarget.clientHeight - 42; // One wheel turn before end. >+ var startPosY = Math.round(selectTarget.offsetTop) + Math.round(selectTarget.clientHeight) - 42; // One wheel turn before end. > eventSender.mouseMoveTo(startPosX, startPosY); // Make sure we are just outside the iFrame > debug("Mouse moved to (" + startPosX + ", " + startPosY + ")"); > eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none', true); >diff --git a/LayoutTests/resources/check-layout.js b/LayoutTests/resources/check-layout.js >index 05e6afd4888b9b14def4882c21ab4312574cf143..16873f8af26e364b9911e2915d740f4937831169 100644 >--- a/LayoutTests/resources/check-layout.js >+++ b/LayoutTests/resources/check-layout.js >@@ -37,63 +37,63 @@ function checkExpectedValues(node, failures) > var output = { checked: false }; > var expectedWidth = checkAttribute(output, node, "data-expected-width"); > if (expectedWidth) { >- if (node.offsetWidth != parseInt(expectedWidth)) >+ if (Math.round(node.offsetWidth) != parseInt(expectedWidth)) > failures.push("Expected " + expectedWidth + " for width, but got " + node.offsetWidth + ". "); > } > > var expectedHeight = checkAttribute(output, node, "data-expected-height"); > if (expectedHeight) { >- if (node.offsetHeight != parseInt(expectedHeight)) >+ if (Math.round(node.offsetHeight) != parseInt(expectedHeight)) > failures.push("Expected " + expectedHeight + " for height, but got " + node.offsetHeight + ". "); > } > > var expectedOffset = checkAttribute(output, node, "data-offset-x"); > if (expectedOffset) { >- if (node.offsetLeft != parseInt(expectedOffset)) >+ if (Math.round(node.offsetLeft) != parseInt(expectedOffset)) > failures.push("Expected " + expectedOffset + " for offsetLeft, but got " + node.offsetLeft + ". "); > } > > var expectedOffset = checkAttribute(output, node, "data-offset-y"); > if (expectedOffset) { >- if (node.offsetTop != parseInt(expectedOffset)) >+ if (Math.round(node.offsetTop) != parseInt(expectedOffset)) > failures.push("Expected " + expectedOffset + " for offsetTop, but got " + node.offsetTop + ". "); > } > > var expectedWidth = checkAttribute(output, node, "data-expected-client-width"); > if (expectedWidth) { >- if (node.clientWidth != parseInt(expectedWidth)) >+ if (Math.round(node.clientWidth) != parseInt(expectedWidth)) > failures.push("Expected " + expectedWidth + " for clientWidth, but got " + node.clientWidth + ". "); > } > > var expectedHeight = checkAttribute(output, node, "data-expected-client-height"); > if (expectedHeight) { >- if (node.clientHeight != parseInt(expectedHeight)) >+ if (Math.round(node.clientHeight) != parseInt(expectedHeight)) > failures.push("Expected " + expectedHeight + " for clientHeight, but got " + node.clientHeight + ". "); > } > > var expectedWidth = checkAttribute(output, node, "data-expected-scroll-width"); > if (expectedWidth) { >- if (node.scrollWidth != parseInt(expectedWidth)) >+ if (Math.round(node.scrollWidth) != parseInt(expectedWidth)) > failures.push("Expected " + expectedWidth + " for scrollWidth, but got " + node.scrollWidth + ". "); > } > > var expectedHeight = checkAttribute(output, node, "data-expected-scroll-height"); > if (expectedHeight) { >- if (node.scrollHeight != parseInt(expectedHeight)) >+ if (Math.round(node.scrollHeight) != parseInt(expectedHeight)) > failures.push("Expected " + expectedHeight + " for scrollHeight, but got " + node.scrollHeight + ". "); > } > > var expectedOffset = checkAttribute(output, node, "data-total-x"); > if (expectedOffset) { > var totalLeft = node.clientLeft + node.offsetLeft; >- if (totalLeft != parseInt(expectedOffset)) >+ if (Math.round(totalLeft) != parseInt(expectedOffset)) > failures.push("Expected " + expectedOffset + " for clientLeft+offsetLeft, but got " + totalLeft + ", clientLeft: " + node.clientLeft + ", offsetLeft: " + node.offsetLeft + ". "); > } > > var expectedOffset = checkAttribute(output, node, "data-total-y"); > if (expectedOffset) { > var totalTop = node.clientTop + node.offsetTop; >- if (totalTop != parseInt(expectedOffset)) >+ if (Math.round(totalTop) != parseInt(expectedOffset)) > failures.push("Expected " + expectedOffset + " for clientTop+offsetTop, but got " + totalTop + ", clientTop: " + node.clientTop + ", + offsetTop: " + node.offsetTop + ". "); > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 132895
:
231432
|
231450
|
231454
|
231458
|
231465