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

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

Issue 236203020: Separate repaint and layout requirements of StyleDifference (Step 1) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Update layout test expectations Created 6 years, 8 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 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 if (isOutOfFlowPositioned()) 146 if (isOutOfFlowPositioned())
147 RenderBlock::removePositionedObject(this); 147 RenderBlock::removePositionedObject(this);
148 } 148 }
149 149
150 void RenderBox::styleWillChange(StyleDifference diff, const RenderStyle& newStyl e) 150 void RenderBox::styleWillChange(StyleDifference diff, const RenderStyle& newStyl e)
151 { 151 {
152 RenderStyle* oldStyle = style(); 152 RenderStyle* oldStyle = style();
153 if (oldStyle) { 153 if (oldStyle) {
154 // The background of the root element or the body element could propagat e up to 154 // The background of the root element or the body element could propagat e up to
155 // the canvas. Just dirty the entire canvas when our style changes subs tantially. 155 // the canvas. Just dirty the entire canvas when our style changes subs tantially.
156 if (diff >= StyleDifferenceRepaint && node() && 156 if (diff.needsRepaint() && node()
157 (isHTMLHtmlElement(*node()) || isHTMLBodyElement(*node()))) { 157 && (isHTMLHtmlElement(*node()) || isHTMLBodyElement(*node()))) {
158 158
159 if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled() || diff != StyleDifferenceLayout) 159 if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled() || !diff.ne edsFullLayout())
160 view()->repaint(); 160 view()->repaint();
161 161
162 if (oldStyle->hasEntirelyFixedBackground() != newStyle.hasEntirelyFi xedBackground()) 162 if (oldStyle->hasEntirelyFixedBackground() != newStyle.hasEntirelyFi xedBackground())
163 view()->compositor()->setNeedsUpdateFixedBackground(); 163 view()->compositor()->setNeedsUpdateFixedBackground();
164 } 164 }
165 165
166 // When a layout hint happens and an object's position style changes, we have to do a layout 166 // When a layout hint happens and an object's position style changes, we have to do a layout
167 // to dirty the render tree using the old position value now. 167 // to dirty the render tree using the old position value now.
168 if (diff == StyleDifferenceLayout && parent() && oldStyle->position() != newStyle.position()) { 168 if (diff.needsFullLayout() && parent() && oldStyle->position() != newSty le.position()) {
169 markContainingBlocksForLayout(); 169 markContainingBlocksForLayout();
170 if (oldStyle->position() == StaticPosition) 170 if (oldStyle->position() == StaticPosition)
171 repaint(); 171 repaint();
172 else if (newStyle.hasOutOfFlowPosition()) 172 else if (newStyle.hasOutOfFlowPosition())
173 parent()->setChildNeedsLayout(); 173 parent()->setChildNeedsLayout();
174 if (isFloating() && !isOutOfFlowPositioned() && newStyle.hasOutOfFlo wPosition()) 174 if (isFloating() && !isOutOfFlowPositioned() && newStyle.hasOutOfFlo wPosition())
175 removeFloatingOrPositionedChildFromBlockLists(); 175 removeFloatingOrPositionedChildFromBlockLists();
176 } 176 }
177 // FIXME: This branch runs when !oldStyle, which means that layout was never called 177 // FIXME: This branch runs when !oldStyle, which means that layout was never called
178 // so what's the point in invalidating the whole view that we never painted? 178 // so what's the point in invalidating the whole view that we never painted?
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 left = (left / oldStyle->effectiveZoom()) * newStyle->effectiveZoom( ); 214 left = (left / oldStyle->effectiveZoom()) * newStyle->effectiveZoom( );
215 layer()->scrollableArea()->scrollToXOffset(left); 215 layer()->scrollableArea()->scrollToXOffset(left);
216 } 216 }
217 if (int top = layer()->scrollableArea()->scrollYOffset()) { 217 if (int top = layer()->scrollableArea()->scrollYOffset()) {
218 top = (top / oldStyle->effectiveZoom()) * newStyle->effectiveZoom(); 218 top = (top / oldStyle->effectiveZoom()) * newStyle->effectiveZoom();
219 layer()->scrollableArea()->scrollToYOffset(top); 219 layer()->scrollableArea()->scrollToYOffset(top);
220 } 220 }
221 } 221 }
222 222
223 // Our opaqueness might have changed without triggering layout. 223 // Our opaqueness might have changed without triggering layout.
224 if (diff == StyleDifferenceRepaint || diff == StyleDifferenceRepaintLayer) { 224 if (diff.needsRepaint()) {
225 RenderObject* parentToInvalidate = parent(); 225 RenderObject* parentToInvalidate = parent();
226 for (unsigned i = 0; i < backgroundObscurationTestMaxDepth && parentToIn validate; ++i) { 226 for (unsigned i = 0; i < backgroundObscurationTestMaxDepth && parentToIn validate; ++i) {
227 parentToInvalidate->invalidateBackgroundObscurationStatus(); 227 parentToInvalidate->invalidateBackgroundObscurationStatus();
228 parentToInvalidate = parentToInvalidate->parent(); 228 parentToInvalidate = parentToInvalidate->parent();
229 } 229 }
230 } 230 }
231 231
232 if (isDocumentElement() || isBody()) 232 if (isDocumentElement() || isBody())
233 document().view()->recalculateScrollbarOverlayStyle(); 233 document().view()->recalculateScrollbarOverlayStyle();
234 234
(...skipping 4513 matching lines...) Expand 10 before | Expand all | Expand 10 after
4748 return 0; 4748 return 0;
4749 4749
4750 if (!layoutState && !flowThreadContainingBlock()) 4750 if (!layoutState && !flowThreadContainingBlock())
4751 return 0; 4751 return 0;
4752 4752
4753 RenderBlock* containerBlock = containingBlock(); 4753 RenderBlock* containerBlock = containingBlock();
4754 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop(); 4754 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop();
4755 } 4755 }
4756 4756
4757 } // namespace WebCore 4757 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698