diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2012-11-07 11:22:47 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2012-11-07 11:22:47 +0100 |
commit | cfd86b747d32ac22246a1aa908eaa720c63a88c1 (patch) | |
tree | 24d68c6f61c464ecba1e05670b80390ea3b0e50c /Source/WebCore/rendering/RenderBoxModelObject.cpp | |
parent | 69d7c744c9de19d152dbe2d8e46eb7dfd4511d1a (diff) | |
download | qtwebkit-cfd86b747d32ac22246a1aa908eaa720c63a88c1.tar.gz |
Imported WebKit commit 20271caf2e2c016d5cef40184cddeefeac4f1876 (http://svn.webkit.org/repository/webkit/trunk@133733)
New snapshot that contains all previous fixes as well as build fix for latest QtMultimedia API changes.
Diffstat (limited to 'Source/WebCore/rendering/RenderBoxModelObject.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderBoxModelObject.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/Source/WebCore/rendering/RenderBoxModelObject.cpp b/Source/WebCore/rendering/RenderBoxModelObject.cpp index fd6390ae3..3ee8827f2 100644 --- a/Source/WebCore/rendering/RenderBoxModelObject.cpp +++ b/Source/WebCore/rendering/RenderBoxModelObject.cpp @@ -1046,6 +1046,12 @@ IntSize RenderBoxModelObject::calculateImageIntrinsicDimensions(StyleImage* imag return positioningAreaSize; } +static inline void applySubPixelHeuristicForTileSize(LayoutSize& tileSize, const IntSize& positioningAreaSize) +{ + tileSize.setWidth(positioningAreaSize.width() - tileSize.width() <= 1 ? tileSize.width().ceil() : tileSize.width().floor()); + tileSize.setHeight(positioningAreaSize.height() - tileSize.height() <= 1 ? tileSize.height().ceil() : tileSize.height().floor()); +} + IntSize RenderBoxModelObject::calculateFillTileSize(const FillLayer* fillLayer, const IntSize& positioningAreaSize) const { StyleImage* image = fillLayer->image(); @@ -1056,37 +1062,38 @@ IntSize RenderBoxModelObject::calculateFillTileSize(const FillLayer* fillLayer, RenderView* renderView = view(); switch (type) { case SizeLength: { - int w = positioningAreaSize.width(); - int h = positioningAreaSize.height(); + LayoutSize tileSize = positioningAreaSize; Length layerWidth = fillLayer->size().size.width(); Length layerHeight = fillLayer->size().size.height(); if (layerWidth.isFixed()) - w = layerWidth.value(); + tileSize.setWidth(layerWidth.value()); else if (layerWidth.isPercent() || layerHeight.isViewportPercentage()) - w = valueForLength(layerWidth, positioningAreaSize.width(), renderView); + tileSize.setWidth(valueForLength(layerWidth, positioningAreaSize.width(), renderView)); if (layerHeight.isFixed()) - h = layerHeight.value(); + tileSize.setHeight(layerHeight.value()); else if (layerHeight.isPercent() || layerHeight.isViewportPercentage()) - h = valueForLength(layerHeight, positioningAreaSize.height(), renderView); - + tileSize.setHeight(valueForLength(layerHeight, positioningAreaSize.height(), renderView)); + + applySubPixelHeuristicForTileSize(tileSize, positioningAreaSize); + // If one of the values is auto we have to use the appropriate // scale to maintain our aspect ratio. if (layerWidth.isAuto() && !layerHeight.isAuto()) { if (imageIntrinsicSize.height()) - w = imageIntrinsicSize.width() * h / imageIntrinsicSize.height(); + tileSize.setWidth(imageIntrinsicSize.width() * tileSize.height() / imageIntrinsicSize.height()); } else if (!layerWidth.isAuto() && layerHeight.isAuto()) { if (imageIntrinsicSize.width()) - h = imageIntrinsicSize.height() * w / imageIntrinsicSize.width(); + tileSize.setHeight(imageIntrinsicSize.height() * tileSize.width() / imageIntrinsicSize.width()); } else if (layerWidth.isAuto() && layerHeight.isAuto()) { // If both width and height are auto, use the image's intrinsic size. - w = imageIntrinsicSize.width(); - h = imageIntrinsicSize.height(); + tileSize = imageIntrinsicSize; } - return IntSize(max(0, w), max(0, h)); + tileSize.clampNegativeToZero(); + return flooredIntSize(tileSize); } case SizeNone: { // If both values are ‘auto’ then the intrinsic width and/or height of the image should be used, if any. |