Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(283)

Side by Side Diff: Source/WebCore/rendering/RenderBoxModelObject.cpp

Issue 12712011: Merge 145726 "Fix body background image geometry calculation" (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1410/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/WebCore/rendering/RenderBoxModelObject.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
7 * Copyright (C) 2010 Google Inc. All rights reserved. 7 * Copyright (C) 2010 Google Inc. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 CompositeOperator operation = shouldClearBackground ? CompositeC opy : context->compositeOperation(); 861 CompositeOperator operation = shouldClearBackground ? CompositeC opy : context->compositeOperation();
862 context->fillRect(backgroundRect, bgColor, style()->colorSpace() , operation); 862 context->fillRect(backgroundRect, bgColor, style()->colorSpace() , operation);
863 } else if (shouldClearBackground) 863 } else if (shouldClearBackground)
864 context->clearRect(backgroundRect); 864 context->clearRect(backgroundRect);
865 } 865 }
866 } 866 }
867 867
868 // no progressive loading of the background image 868 // no progressive loading of the background image
869 if (shouldPaintBackgroundImage) { 869 if (shouldPaintBackgroundImage) {
870 BackgroundImageGeometry geometry; 870 BackgroundImageGeometry geometry;
871 calculateBackgroundImageGeometry(bgLayer, scrolledPaintRect, geometry); 871 calculateBackgroundImageGeometry(bgLayer, scrolledPaintRect, geometry, b ackgroundObject);
872 geometry.clip(paintInfo.rect); 872 geometry.clip(paintInfo.rect);
873 if (!geometry.destRect().isEmpty()) { 873 if (!geometry.destRect().isEmpty()) {
874 CompositeOperator compositeOp = op == CompositeSourceOver ? bgLayer- >composite() : op; 874 CompositeOperator compositeOp = op == CompositeSourceOver ? bgLayer- >composite() : op;
875 RenderObject* clientForBackgroundImage = backgroundObject ? backgrou ndObject : this; 875 RenderObject* clientForBackgroundImage = backgroundObject ? backgrou ndObject : this;
876 RefPtr<Image> image = bgImage->image(clientForBackgroundImage, geome try.tileSize()); 876 RefPtr<Image> image = bgImage->image(clientForBackgroundImage, geome try.tileSize());
877 bool useLowQualityScaling = shouldPaintAtLowQuality(context, image.g et(), bgLayer, geometry.tileSize()); 877 bool useLowQualityScaling = shouldPaintAtLowQuality(context, image.g et(), bgLayer, geometry.tileSize());
878 context->drawTiledImage(image.get(), style()->colorSpace(), geometry .destRect(), geometry.relativePhase(), geometry.tileSize(), 878 context->drawTiledImage(image.get(), style()->colorSpace(), geometry .destRect(), geometry.relativePhase(), geometry.tileSize(),
879 compositeOp, useLowQualityScaling); 879 compositeOp, useLowQualityScaling);
880 } 880 }
881 } 881 }
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 if (!rootLayer || !rootLayer->isComposited()) 1100 if (!rootLayer || !rootLayer->isComposited())
1101 return false; 1101 return false;
1102 1102
1103 return rootLayer->backing()->backgroundLayerPaintsFixedRootBackground(); 1103 return rootLayer->backing()->backgroundLayerPaintsFixedRootBackground();
1104 #else 1104 #else
1105 return false; 1105 return false;
1106 #endif 1106 #endif
1107 } 1107 }
1108 1108
1109 void RenderBoxModelObject::calculateBackgroundImageGeometry(const FillLayer* fil lLayer, const LayoutRect& paintRect, 1109 void RenderBoxModelObject::calculateBackgroundImageGeometry(const FillLayer* fil lLayer, const LayoutRect& paintRect,
1110 BackgroundImageGeome try& geometry) 1110 BackgroundImageGeometry& geometry, RenderObject* backgroundObject)
1111 { 1111 {
1112 LayoutUnit left = 0; 1112 LayoutUnit left = 0;
1113 LayoutUnit top = 0; 1113 LayoutUnit top = 0;
1114 IntSize positioningAreaSize; 1114 IntSize positioningAreaSize;
1115 IntRect snappedPaintRect = pixelSnappedIntRect(paintRect); 1115 IntRect snappedPaintRect = pixelSnappedIntRect(paintRect);
1116 1116
1117 // Determine the background positioning area and set destRect to the backgro und painting area. 1117 // Determine the background positioning area and set destRect to the backgro und painting area.
1118 // destRect will be adjusted later if the background is non-repeating. 1118 // destRect will be adjusted later if the background is non-repeating.
1119 bool fixedAttachment = fillLayer->attachment() == FixedBackgroundAttachment; 1119 bool fixedAttachment = fillLayer->attachment() == FixedBackgroundAttachment;
1120 1120
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 IntRect viewportRect = pixelSnappedIntRect(viewRect()); 1160 IntRect viewportRect = pixelSnappedIntRect(viewRect());
1161 if (fixedBackgroundPaintsInLocalCoordinates()) 1161 if (fixedBackgroundPaintsInLocalCoordinates())
1162 viewportRect.setLocation(IntPoint()); 1162 viewportRect.setLocation(IntPoint());
1163 else if (FrameView* frameView = view()->frameView()) 1163 else if (FrameView* frameView = view()->frameView())
1164 viewportRect.setLocation(IntPoint(frameView->scrollOffsetForFixedPos ition())); 1164 viewportRect.setLocation(IntPoint(frameView->scrollOffsetForFixedPos ition()));
1165 1165
1166 geometry.setDestRect(pixelSnappedIntRect(viewportRect)); 1166 geometry.setDestRect(pixelSnappedIntRect(viewportRect));
1167 positioningAreaSize = geometry.destRect().size(); 1167 positioningAreaSize = geometry.destRect().size();
1168 } 1168 }
1169 1169
1170 RenderObject* clientForBackgroundImage = backgroundObject ? backgroundObject : this;
1170 IntSize fillTileSize = calculateFillTileSize(fillLayer, positioningAreaSize) ; 1171 IntSize fillTileSize = calculateFillTileSize(fillLayer, positioningAreaSize) ;
1171 fillLayer->image()->setContainerSizeForRenderer(this, fillTileSize, style()- >effectiveZoom()); 1172 fillLayer->image()->setContainerSizeForRenderer(clientForBackgroundImage, fi llTileSize, style()->effectiveZoom());
1172 geometry.setTileSize(fillTileSize); 1173 geometry.setTileSize(fillTileSize);
1173 1174
1174 EFillRepeat backgroundRepeatX = fillLayer->repeatX(); 1175 EFillRepeat backgroundRepeatX = fillLayer->repeatX();
1175 EFillRepeat backgroundRepeatY = fillLayer->repeatY(); 1176 EFillRepeat backgroundRepeatY = fillLayer->repeatY();
1176 RenderView* renderView = view(); 1177 RenderView* renderView = view();
1177 int availableWidth = positioningAreaSize.width() - geometry.tileSize().width (); 1178 int availableWidth = positioningAreaSize.width() - geometry.tileSize().width ();
1178 int availableHeight = positioningAreaSize.height() - geometry.tileSize().hei ght(); 1179 int availableHeight = positioningAreaSize.height() - geometry.tileSize().hei ght();
1179 1180
1180 LayoutUnit computedXPosition = minimumValueForLength(fillLayer->xPosition(), availableWidth, renderView, true); 1181 LayoutUnit computedXPosition = minimumValueForLength(fillLayer->xPosition(), availableWidth, renderView, true);
1181 if (backgroundRepeatX == RepeatFill) 1182 if (backgroundRepeatX == RepeatFill)
(...skipping 1596 matching lines...) Expand 10 before | Expand all | Expand 10 after
2778 ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent()); 2779 ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent());
2779 for (RenderObject* child = startChild; child && child != endChild; ) { 2780 for (RenderObject* child = startChild; child && child != endChild; ) {
2780 // Save our next sibling as moveChildTo will clear it. 2781 // Save our next sibling as moveChildTo will clear it.
2781 RenderObject* nextSibling = child->nextSibling(); 2782 RenderObject* nextSibling = child->nextSibling();
2782 moveChildTo(toBoxModelObject, child, beforeChild, fullRemoveInsert); 2783 moveChildTo(toBoxModelObject, child, beforeChild, fullRemoveInsert);
2783 child = nextSibling; 2784 child = nextSibling;
2784 } 2785 }
2785 } 2786 }
2786 2787
2787 } // namespace WebCore 2788 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/WebCore/rendering/RenderBoxModelObject.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698