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

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

Issue 264963004: Mark when we may have been invalidated to early out on repaintTreeAfterLayout. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 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) 2006, 2007, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
3 * (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 3 * (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
4 * Copyright (C) 2010 Google Inc. All rights reserved. 4 * Copyright (C) 2010 Google Inc. All rights reserved.
5 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 5 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 88
89 LayoutUnit RenderTextControlSingleLine::computeLogicalHeightLimit() const 89 LayoutUnit RenderTextControlSingleLine::computeLogicalHeightLimit() const
90 { 90 {
91 return containerElement() ? contentLogicalHeight() : logicalHeight(); 91 return containerElement() ? contentLogicalHeight() : logicalHeight();
92 } 92 }
93 93
94 void RenderTextControlSingleLine::layout() 94 void RenderTextControlSingleLine::layout()
95 { 95 {
96 SubtreeLayoutScope layoutScope(*this); 96 SubtreeLayoutScope layoutScope(*this);
97 97
98 setMayNeedInvalidation(true);
99
98 // FIXME: We should remove the height-related hacks in layout() and 100 // FIXME: We should remove the height-related hacks in layout() and
99 // styleDidChange(). We need them because 101 // styleDidChange(). We need them because
100 // - Center the inner elements vertically if the input height is taller than 102 // - Center the inner elements vertically if the input height is taller than
101 // the intrinsic height of the inner elements. 103 // the intrinsic height of the inner elements.
102 // - Shrink the inner elment heights if the input height is samller than the 104 // - Shrink the inner elment heights if the input height is samller than the
103 // intrinsic heights of the inner elements. 105 // intrinsic heights of the inner elements.
104 106
105 // We don't honor paddings and borders for textfields without decorations 107 // We don't honor paddings and borders for textfields without decorations
106 // and type=search if the text height is taller than the contentHeight() 108 // and type=search if the text height is taller than the contentHeight()
107 // because of compability. 109 // because of compability.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 if (!container && innerTextRenderer && innerTextRenderer->height() != conten tLogicalHeight()) { 167 if (!container && innerTextRenderer && innerTextRenderer->height() != conten tLogicalHeight()) {
166 LayoutUnit logicalHeightDiff = innerTextRenderer->logicalHeight() - cont entLogicalHeight(); 168 LayoutUnit logicalHeightDiff = innerTextRenderer->logicalHeight() - cont entLogicalHeight();
167 innerTextRenderer->setLogicalTop(innerTextRenderer->logicalTop() - (logi calHeightDiff / 2 + layoutMod(logicalHeightDiff, 2))); 169 innerTextRenderer->setLogicalTop(innerTextRenderer->logicalTop() - (logi calHeightDiff / 2 + layoutMod(logicalHeightDiff, 2)));
168 } else 170 } else
169 centerContainerIfNeeded(containerRenderer); 171 centerContainerIfNeeded(containerRenderer);
170 172
171 HTMLElement* placeholderElement = inputElement()->placeholderElement(); 173 HTMLElement* placeholderElement = inputElement()->placeholderElement();
172 if (RenderBox* placeholderBox = placeholderElement ? placeholderElement->ren derBox() : 0) { 174 if (RenderBox* placeholderBox = placeholderElement ? placeholderElement->ren derBox() : 0) {
173 LayoutSize innerTextSize; 175 LayoutSize innerTextSize;
174 176
177 placeholderBox->setMayNeedInvalidation(true);
178
175 if (innerTextRenderer) 179 if (innerTextRenderer)
176 innerTextSize = innerTextRenderer->size(); 180 innerTextSize = innerTextRenderer->size();
177 placeholderBox->style()->setWidth(Length(innerTextSize.width() - placeho lderBox->borderAndPaddingWidth(), Fixed)); 181 placeholderBox->style()->setWidth(Length(innerTextSize.width() - placeho lderBox->borderAndPaddingWidth(), Fixed));
178 placeholderBox->style()->setHeight(Length(innerTextSize.height() - place holderBox->borderAndPaddingHeight(), Fixed)); 182 placeholderBox->style()->setHeight(Length(innerTextSize.height() - place holderBox->borderAndPaddingHeight(), Fixed));
179 bool neededLayout = placeholderBox->needsLayout(); 183 bool neededLayout = placeholderBox->needsLayout();
180 bool placeholderBoxHadLayout = placeholderBox->everHadLayout(); 184 bool placeholderBoxHadLayout = placeholderBox->everHadLayout();
181 placeholderBox->layoutIfNeeded(); 185 placeholderBox->layoutIfNeeded();
182 LayoutPoint textOffset; 186 LayoutPoint textOffset;
183 if (innerTextRenderer) 187 if (innerTextRenderer)
184 textOffset = innerTextRenderer->location(); 188 textOffset = innerTextRenderer->location();
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 if (innerTextElement()) 428 if (innerTextElement())
425 innerTextElement()->setScrollTop(newTop); 429 innerTextElement()->setScrollTop(newTop);
426 } 430 }
427 431
428 HTMLInputElement* RenderTextControlSingleLine::inputElement() const 432 HTMLInputElement* RenderTextControlSingleLine::inputElement() const
429 { 433 {
430 return toHTMLInputElement(node()); 434 return toHTMLInputElement(node());
431 } 435 }
432 436
433 } 437 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698