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