summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/RenderBoxModelObject.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2012-11-07 11:22:47 +0100
committerSimon Hausmann <simon.hausmann@digia.com>2012-11-07 11:22:47 +0100
commitcfd86b747d32ac22246a1aa908eaa720c63a88c1 (patch)
tree24d68c6f61c464ecba1e05670b80390ea3b0e50c /Source/WebCore/rendering/RenderBoxModelObject.cpp
parent69d7c744c9de19d152dbe2d8e46eb7dfd4511d1a (diff)
downloadqtwebkit-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.cpp31
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.