Title: [113317] trunk/Source/WebCore
Revision
113317
Author
[email protected]
Date
2012-04-05 05:49:20 -0700 (Thu, 05 Apr 2012)

Log Message

DOM measurement APIs should operate on pixel snapped values.
https://bugs.webkit.org/show_bug.cgi?id=83138

Reviewed by Julien Chaffraix.

DOM measurement APIs return unscaled integers. In an effort to return the best possible values (and
most consistent with current behavior) when we use sub-pixel values for Layout, we want to adjust
the actual on-screen position and size values for scaling, not the sub-pixel values.

No new tests. No change in behavior.

* dom/Element.cpp:
(WebCore::adjustForLocalZoom): Needs to return an integer, since this is what the DOM API calls for.
(WebCore::Element::offsetWidth): Using pixel snapped values for all the following functions.
(WebCore::Element::offsetHeight):
(WebCore::Element::clientLeft):
(WebCore::Element::clientTop):
(WebCore::Element::clientWidth):
(WebCore::Element::clientHeight):
* html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::width):
(WebCore::HTMLImageElement::height):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (113316 => 113317)


--- trunk/Source/WebCore/ChangeLog	2012-04-05 12:32:41 UTC (rev 113316)
+++ trunk/Source/WebCore/ChangeLog	2012-04-05 12:49:20 UTC (rev 113317)
@@ -1,3 +1,28 @@
+2012-04-05  Levi Weintraub  <[email protected]>
+
+        DOM measurement APIs should operate on pixel snapped values.
+        https://bugs.webkit.org/show_bug.cgi?id=83138
+
+        Reviewed by Julien Chaffraix.
+
+        DOM measurement APIs return unscaled integers. In an effort to return the best possible values (and
+        most consistent with current behavior) when we use sub-pixel values for Layout, we want to adjust
+        the actual on-screen position and size values for scaling, not the sub-pixel values.
+
+        No new tests. No change in behavior.
+
+        * dom/Element.cpp:
+        (WebCore::adjustForLocalZoom): Needs to return an integer, since this is what the DOM API calls for.
+        (WebCore::Element::offsetWidth): Using pixel snapped values for all the following functions.
+        (WebCore::Element::offsetHeight):
+        (WebCore::Element::clientLeft):
+        (WebCore::Element::clientTop):
+        (WebCore::Element::clientWidth):
+        (WebCore::Element::clientHeight):
+        * html/HTMLImageElement.cpp:
+        (WebCore::HTMLImageElement::width):
+        (WebCore::HTMLImageElement::height):
+
 2012-04-05  Pavel Feldman  <[email protected]>
 
         Web Inspector: add ability to copy resource URL from web inspector's resources page.

Modified: trunk/Source/WebCore/dom/Element.cpp (113316 => 113317)


--- trunk/Source/WebCore/dom/Element.cpp	2012-04-05 12:32:41 UTC (rev 113316)
+++ trunk/Source/WebCore/dom/Element.cpp	2012-04-05 12:49:20 UTC (rev 113317)
@@ -318,7 +318,7 @@
     return zoomFactor;
 }
 
-static LayoutUnit adjustForLocalZoom(LayoutUnit value, RenderObject* renderer)
+static int adjustForLocalZoom(LayoutUnit value, RenderObject* renderer)
 {
     float zoomFactor = localZoomForRenderer(renderer);
     if (zoomFactor == 1)
@@ -326,38 +326,38 @@
     // Needed because computeLengthInt truncates (rather than rounds) when scaling up.
     if (zoomFactor > 1)
         value++;
-    return static_cast<LayoutUnit>(value / zoomFactor);
+    return static_cast<int>(value / zoomFactor);
 }
 
 int Element::offsetLeft()
 {
     document()->updateLayoutIgnorePendingStylesheets();
-    if (RenderBoxModelObject* rend = renderBoxModelObject())
-        return adjustForLocalZoom(rend->offsetLeft(), rend);
+    if (RenderBoxModelObject* renderer = renderBoxModelObject())
+        return adjustForLocalZoom(renderer->pixelSnappedOffsetLeft(), renderer);
     return 0;
 }
 
 int Element::offsetTop()
 {
     document()->updateLayoutIgnorePendingStylesheets();
-    if (RenderBoxModelObject* rend = renderBoxModelObject())
-        return adjustForLocalZoom(rend->offsetTop(), rend);
+    if (RenderBoxModelObject* renderer = renderBoxModelObject())
+        return adjustForLocalZoom(renderer->pixelSnappedOffsetTop(), renderer);
     return 0;
 }
 
 int Element::offsetWidth()
 {
     document()->updateLayoutIgnorePendingStylesheets();
-    if (RenderBoxModelObject* rend = renderBoxModelObject())
-        return adjustForAbsoluteZoom(rend->offsetWidth(), rend);
+    if (RenderBoxModelObject* renderer = renderBoxModelObject())
+        return adjustForAbsoluteZoom(renderer->pixelSnappedOffsetWidth(), renderer);
     return 0;
 }
 
 int Element::offsetHeight()
 {
     document()->updateLayoutIgnorePendingStylesheets();
-    if (RenderBoxModelObject* rend = renderBoxModelObject())
-        return adjustForAbsoluteZoom(rend->offsetHeight(), rend);
+    if (RenderBoxModelObject* renderer = renderBoxModelObject())
+        return adjustForAbsoluteZoom(renderer->pixelSnappedOffsetHeight(), renderer);
     return 0;
 }
 
@@ -374,8 +374,8 @@
 {
     document()->updateLayoutIgnorePendingStylesheets();
 
-    if (RenderBox* rend = renderBox())
-        return adjustForAbsoluteZoom(rend->clientLeft(), rend);
+    if (RenderBox* renderer = renderBox())
+        return adjustForAbsoluteZoom(roundToInt(renderer->clientLeft()), renderer);
     return 0;
 }
 
@@ -383,8 +383,8 @@
 {
     document()->updateLayoutIgnorePendingStylesheets();
 
-    if (RenderBox* rend = renderBox())
-        return adjustForAbsoluteZoom(rend->clientTop(), rend);
+    if (RenderBox* renderer = renderBox())
+        return adjustForAbsoluteZoom(roundToInt(renderer->clientTop()), renderer);
     return 0;
 }
 
@@ -403,8 +403,8 @@
         }
     }
     
-    if (RenderBox* rend = renderBox())
-        return adjustForAbsoluteZoom(rend->clientWidth(), rend);
+    if (RenderBox* renderer = renderBox())
+        return adjustForAbsoluteZoom(renderer->pixelSnappedClientWidth(), renderer);
     return 0;
 }
 
@@ -424,8 +424,8 @@
         }
     }
     
-    if (RenderBox* rend = renderBox())
-        return adjustForAbsoluteZoom(rend->clientHeight(), rend);
+    if (RenderBox* renderer = renderBox())
+        return adjustForAbsoluteZoom(renderer->pixelSnappedClientHeight(), renderer);
     return 0;
 }
 

Modified: trunk/Source/WebCore/html/HTMLImageElement.cpp (113316 => 113317)


--- trunk/Source/WebCore/html/HTMLImageElement.cpp	2012-04-05 12:32:41 UTC (rev 113316)
+++ trunk/Source/WebCore/html/HTMLImageElement.cpp	2012-04-05 12:49:20 UTC (rev 113317)
@@ -222,7 +222,7 @@
         document()->updateLayout();
 
     RenderBox* box = renderBox();
-    return box ? adjustForAbsoluteZoom(box->contentWidth(), box) : 0;
+    return box ? adjustForAbsoluteZoom(box->contentBoxRect().pixelSnappedWidth(), box) : 0;
 }
 
 int HTMLImageElement::height(bool ignorePendingStylesheets)
@@ -245,7 +245,7 @@
         document()->updateLayout();
 
     RenderBox* box = renderBox();
-    return box ? adjustForAbsoluteZoom(box->contentHeight(), box) : 0;
+    return box ? adjustForAbsoluteZoom(box->contentBoxRect().pixelSnappedHeight(), box) : 0;
 }
 
 int HTMLImageElement::naturalWidth() const
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to