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

Side by Side Diff: Source/core/rendering/RenderBox.cpp

Issue 353403006: Consider subpixel accumulation when invalidating paint (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix win layout test Created 6 years, 5 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 | Annotate | Revision Log
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, 2010 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 7 * Copyright (C) 2013 Adobe Systems Incorporated. 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 4074 matching lines...) Expand 10 before | Expand all | Expand 10 after
4085 LayoutUnit borderWidth = std::max<LayoutUnit>(borderRight(), std::max<La youtUnit>(valueForLength(style()->borderTopRightRadius().width(), boxWidth), val ueForLength(style()->borderBottomRightRadius().width(), boxWidth))); 4085 LayoutUnit borderWidth = std::max<LayoutUnit>(borderRight(), std::max<La youtUnit>(valueForLength(style()->borderTopRightRadius().width(), boxWidth), val ueForLength(style()->borderBottomRightRadius().width(), boxWidth)));
4086 LayoutUnit decorationsLeftWidth = std::max<LayoutUnit>(-outlineStyle->ou tlineOffset(), borderWidth + minInsetRightShadowExtent) + std::max<LayoutUnit>(o utlineWidth, -shadowLeft); 4086 LayoutUnit decorationsLeftWidth = std::max<LayoutUnit>(-outlineStyle->ou tlineOffset(), borderWidth + minInsetRightShadowExtent) + std::max<LayoutUnit>(o utlineWidth, -shadowLeft);
4087 LayoutUnit decorationsRightWidth = std::max<LayoutUnit>(-outlineStyle->o utlineOffset(), borderWidth + minInsetRightShadowExtent) + std::max<LayoutUnit>( outlineWidth, shadowRight); 4087 LayoutUnit decorationsRightWidth = std::max<LayoutUnit>(-outlineStyle->o utlineOffset(), borderWidth + minInsetRightShadowExtent) + std::max<LayoutUnit>( outlineWidth, shadowRight);
4088 LayoutRect rightRect(newBounds.x() + std::min(newBounds.width(), oldBoun ds.width()) - decorationsLeftWidth, 4088 LayoutRect rightRect(newBounds.x() + std::min(newBounds.width(), oldBoun ds.width()) - decorationsLeftWidth,
4089 newBounds.y(), 4089 newBounds.y(),
4090 deltaWidth + decorationsLeftWidth + decorationsRightWidth, 4090 deltaWidth + decorationsLeftWidth + decorationsRightWidth,
4091 std::max(newBounds.height(), oldBounds.height())); 4091 std::max(newBounds.height(), oldBounds.height()));
4092 LayoutUnit right = std::min<LayoutUnit>(newBounds.maxX(), oldBounds.maxX ()); 4092 LayoutUnit right = std::min<LayoutUnit>(newBounds.maxX(), oldBounds.maxX ());
4093 if (rightRect.x() < right) { 4093 if (rightRect.x() < right) {
4094 rightRect.setWidth(std::min(rightRect.width(), right - rightRect.x() )); 4094 rightRect.setWidth(std::min(rightRect.width(), right - rightRect.x() ));
4095 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnapp edIntRect(rightRect), InvalidationIncremental); 4095 invalidatePaintUsingContainer(paintInvalidationContainer, rightRect, InvalidationIncremental);
4096 } 4096 }
4097 } 4097 }
4098 4098
4099 LayoutUnit deltaHeight = absoluteValue(newBounds.height() - oldBounds.height ()); 4099 LayoutUnit deltaHeight = absoluteValue(newBounds.height() - oldBounds.height ());
4100 if (deltaHeight) { 4100 if (deltaHeight) {
4101 LayoutUnit shadowTop; 4101 LayoutUnit shadowTop;
4102 LayoutUnit shadowBottom; 4102 LayoutUnit shadowBottom;
4103 style()->getBoxShadowVerticalExtent(shadowTop, shadowBottom); 4103 style()->getBoxShadowVerticalExtent(shadowTop, shadowBottom);
4104 LayoutUnit boxHeight = height(); 4104 LayoutUnit boxHeight = height();
4105 LayoutUnit minInsetBottomShadowExtent = std::min<LayoutUnit>(-insetShado wExtent.bottom(), std::min<LayoutUnit>(newBounds.height(), oldBounds.height())); 4105 LayoutUnit minInsetBottomShadowExtent = std::min<LayoutUnit>(-insetShado wExtent.bottom(), std::min<LayoutUnit>(newBounds.height(), oldBounds.height()));
4106 LayoutUnit borderHeight = std::max<LayoutUnit>(borderBottom(), std::max< LayoutUnit>(valueForLength(style()->borderBottomLeftRadius().height(), boxHeight ), valueForLength(style()->borderBottomRightRadius().height(), boxHeight))); 4106 LayoutUnit borderHeight = std::max<LayoutUnit>(borderBottom(), std::max< LayoutUnit>(valueForLength(style()->borderBottomLeftRadius().height(), boxHeight ), valueForLength(style()->borderBottomRightRadius().height(), boxHeight)));
4107 LayoutUnit decorationsTopHeight = std::max<LayoutUnit>(-outlineStyle->ou tlineOffset(), borderHeight + minInsetBottomShadowExtent) + std::max<LayoutUnit> (outlineWidth, -shadowTop); 4107 LayoutUnit decorationsTopHeight = std::max<LayoutUnit>(-outlineStyle->ou tlineOffset(), borderHeight + minInsetBottomShadowExtent) + std::max<LayoutUnit> (outlineWidth, -shadowTop);
4108 LayoutUnit decorationsBottomHeight = std::max<LayoutUnit>(-outlineStyle- >outlineOffset(), borderHeight + minInsetBottomShadowExtent) + std::max<LayoutUn it>(outlineWidth, shadowBottom); 4108 LayoutUnit decorationsBottomHeight = std::max<LayoutUnit>(-outlineStyle- >outlineOffset(), borderHeight + minInsetBottomShadowExtent) + std::max<LayoutUn it>(outlineWidth, shadowBottom);
4109 LayoutRect bottomRect(newBounds.x(), 4109 LayoutRect bottomRect(newBounds.x(),
4110 std::min(newBounds.maxY(), oldBounds.maxY()) - decorationsTopHeight, 4110 std::min(newBounds.maxY(), oldBounds.maxY()) - decorationsTopHeight,
4111 std::max(newBounds.width(), oldBounds.width()), 4111 std::max(newBounds.width(), oldBounds.width()),
4112 deltaHeight + decorationsTopHeight + decorationsBottomHeight); 4112 deltaHeight + decorationsTopHeight + decorationsBottomHeight);
4113 LayoutUnit bottom = std::min(newBounds.maxY(), oldBounds.maxY()); 4113 LayoutUnit bottom = std::min(newBounds.maxY(), oldBounds.maxY());
4114 if (bottomRect.y() < bottom) { 4114 if (bottomRect.y() < bottom) {
4115 bottomRect.setHeight(std::min(bottomRect.height(), bottom - bottomRe ct.y())); 4115 bottomRect.setHeight(std::min(bottomRect.height(), bottom - bottomRe ct.y()));
4116 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnapp edIntRect(bottomRect), InvalidationIncremental); 4116 invalidatePaintUsingContainer(paintInvalidationContainer, bottomRect , InvalidationIncremental);
4117 } 4117 }
4118 } 4118 }
4119 } 4119 }
4120 4120
4121 void RenderBox::markForPaginationRelayoutIfNeeded(SubtreeLayoutScope& layoutScop e) 4121 void RenderBox::markForPaginationRelayoutIfNeeded(SubtreeLayoutScope& layoutScop e)
4122 { 4122 {
4123 ASSERT(!needsLayout()); 4123 ASSERT(!needsLayout());
4124 // If fragmentation height has changed, we need to lay out. No need to enter the renderer if it 4124 // If fragmentation height has changed, we need to lay out. No need to enter the renderer if it
4125 // is childless, though. 4125 // is childless, though.
4126 if (view()->layoutState()->pageLogicalHeightChanged() && slowFirstChild()) 4126 if (view()->layoutState()->pageLogicalHeightChanged() && slowFirstChild())
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
4667 return 0; 4667 return 0;
4668 4668
4669 if (!layoutState && !flowThreadContainingBlock()) 4669 if (!layoutState && !flowThreadContainingBlock())
4670 return 0; 4670 return 0;
4671 4671
4672 RenderBlock* containerBlock = containingBlock(); 4672 RenderBlock* containerBlock = containingBlock();
4673 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop(); 4673 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop();
4674 } 4674 }
4675 4675
4676 } // namespace WebCore 4676 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698