Changeset 139659 in webkit


Ignore:
Timestamp:
Jan 14, 2013 1:40:52 PM (11 years ago)
Author:
eae@chromium.org
Message:

offsetWidth/height incorrect for images when zoomed
https://bugs.webkit.org/show_bug.cgi?id=106624

Source/WebCore:

Reviewed by Levi Weintraub.

offsetWidth and height are incorrect for images at certain zoom
levels due to flooring the values ones adjusted for zoom.
By rounding the value instead we avoid the problem and return
the right size.

Test: fast/images/zoomed-offset-size.html

  • dom/Element.cpp:

(WebCore::Element::offsetWidth):
(WebCore::Element::offsetHeight):
(WebCore::Element::clientWidth):
(WebCore::Element::clientHeight):
Change to round (as opposed to floor) the zoom adjusted value.

  • rendering/RenderObject.h:

(WebCore::adjustLayoutUnitForAbsoluteZoom):

  • rendering/style/RenderStyle.h:

(WebCore::adjustLayoutUnitForAbsoluteZoom):
Add LayoutUnit version of adjustForAbsoluteZoom to avoid float
conversion.

LayoutTests:

Reviewed by Levi Weintraub.

Add test for offsetWidth/Height for zoomed image.

  • fast/images/zoomed-offset-size-expected.txt: Added.
  • fast/images/zoomed-offset-size.html: Added.
Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r139658 r139659  
     12013-01-11  Emil A Eklund  <eae@chromium.org>
     2
     3        offsetWidth/height incorrect for images when zoomed
     4        https://bugs.webkit.org/show_bug.cgi?id=106624
     5
     6        Reviewed by Levi Weintraub.
     7       
     8        Add test for offsetWidth/Height for zoomed image.
     9
     10        * fast/images/zoomed-offset-size-expected.txt: Added.
     11        * fast/images/zoomed-offset-size.html: Added.
     12
    1132013-01-14  Dominic Mazzoni  <dmazzoni@google.com>
    214
  • trunk/Source/WebCore/ChangeLog

    r139652 r139659  
     12013-01-11  Emil A Eklund  <eae@chromium.org>
     2
     3        offsetWidth/height incorrect for images when zoomed
     4        https://bugs.webkit.org/show_bug.cgi?id=106624
     5
     6        Reviewed by Levi Weintraub.
     7       
     8        offsetWidth and height are incorrect for images at certain zoom
     9        levels due to flooring the values ones adjusted for zoom.
     10        By rounding the value instead we avoid the problem and return
     11        the right size.
     12
     13        Test: fast/images/zoomed-offset-size.html
     14
     15        * dom/Element.cpp:
     16        (WebCore::Element::offsetWidth):
     17        (WebCore::Element::offsetHeight):
     18        (WebCore::Element::clientWidth):
     19        (WebCore::Element::clientHeight):
     20        Change to round (as opposed to floor) the zoom adjusted value.
     21       
     22        * rendering/RenderObject.h:
     23        (WebCore::adjustLayoutUnitForAbsoluteZoom):
     24        * rendering/style/RenderStyle.h:
     25        (WebCore::adjustLayoutUnitForAbsoluteZoom):
     26        Add LayoutUnit version of adjustForAbsoluteZoom to avoid float
     27        conversion.
     28
    1292013-01-14  Mark Pilgrim  <pilgrim@chromium.org>
    230
  • trunk/Source/WebCore/dom/Element.cpp

    r139639 r139659  
    454454    document()->updateLayoutIgnorePendingStylesheets();
    455455    if (RenderBoxModelObject* renderer = renderBoxModelObject())
     456#if ENABLE(SUBPIXEL_LAYOUT)
     457        return adjustLayoutUnitForAbsoluteZoom(renderer->pixelSnappedOffsetWidth(), renderer).round();
     458#else
    456459        return adjustForAbsoluteZoom(renderer->pixelSnappedOffsetWidth(), renderer);
     460#endif
    457461    return 0;
    458462}
     
    462466    document()->updateLayoutIgnorePendingStylesheets();
    463467    if (RenderBoxModelObject* renderer = renderBoxModelObject())
     468#if ENABLE(SUBPIXEL_LAYOUT)
     469        return adjustLayoutUnitForAbsoluteZoom(renderer->pixelSnappedOffsetHeight(), renderer).round();
     470#else
    464471        return adjustForAbsoluteZoom(renderer->pixelSnappedOffsetHeight(), renderer);
     472#endif
    465473    return 0;
    466474}
     
    509517   
    510518    if (RenderBox* renderer = renderBox())
     519#if ENABLE(SUBPIXEL_LAYOUT)
     520        return adjustLayoutUnitForAbsoluteZoom(renderer->pixelSnappedClientWidth(), renderer).round();
     521#else
    511522        return adjustForAbsoluteZoom(renderer->pixelSnappedClientWidth(), renderer);
     523#endif
    512524    return 0;
    513525}
     
    530542   
    531543    if (RenderBox* renderer = renderBox())
     544#if ENABLE(SUBPIXEL_LAYOUT)
     545        return adjustLayoutUnitForAbsoluteZoom(renderer->pixelSnappedClientHeight(), renderer).round();
     546#else
    532547        return adjustForAbsoluteZoom(renderer->pixelSnappedClientHeight(), renderer);
     548#endif
    533549    return 0;
    534550}
  • trunk/Source/WebCore/rendering/RenderObject.h

    r139573 r139659  
    12741274}
    12751275
     1276#if ENABLE(SUBPIXEL_LAYOUT)
     1277inline LayoutUnit adjustLayoutUnitForAbsoluteZoom(LayoutUnit value, RenderObject* renderer)
     1278{
     1279    return adjustLayoutUnitForAbsoluteZoom(value, renderer->style());
     1280}
     1281#endif
     1282
    12761283inline void adjustFloatQuadForAbsoluteZoom(FloatQuad& quad, RenderObject* renderer)
    12771284{
  • trunk/Source/WebCore/rendering/style/RenderStyle.h

    r139573 r139659  
    17831783}
    17841784
     1785#if ENABLE(SUBPIXEL_LAYOUT)
     1786inline LayoutUnit adjustLayoutUnitForAbsoluteZoom(LayoutUnit value, const RenderStyle* style)
     1787{
     1788    return value / style->effectiveZoom();
     1789}
     1790#endif
     1791
    17851792inline bool RenderStyle::setZoom(float f)
    17861793{
Note: See TracChangeset for help on using the changeset viewer.