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

Side by Side Diff: Source/core/layout/LayoutTextControlSingleLine.cpp

Issue 926193003: Move rendering/RenderBox to layout/LayoutBox. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 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
« no previous file with comments | « Source/core/layout/LayoutTextControlSingleLine.h ('k') | Source/core/layout/LayoutTheme.cpp » ('j') | 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) 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 // styleDidChange(). We need them because 98 // styleDidChange(). We need them because
99 // - Center the inner elements vertically if the input height is taller than 99 // - Center the inner elements vertically if the input height is taller than
100 // the intrinsic height of the inner elements. 100 // the intrinsic height of the inner elements.
101 // - Shrink the inner elment heights if the input height is samller than the 101 // - Shrink the inner elment heights if the input height is samller than the
102 // intrinsic heights of the inner elements. 102 // intrinsic heights of the inner elements.
103 103
104 // We don't honor paddings and borders for textfields without decorations 104 // We don't honor paddings and borders for textfields without decorations
105 // and type=search if the text height is taller than the contentHeight() 105 // and type=search if the text height is taller than the contentHeight()
106 // because of compability. 106 // because of compability.
107 107
108 RenderBox* innerEditorRenderer = innerEditorElement()->renderBox(); 108 LayoutBox* innerEditorRenderer = innerEditorElement()->layoutBox();
109 RenderBox* viewPortRenderer = editingViewPortElement() ? editingViewPortElem ent()->renderBox() : 0; 109 LayoutBox* viewPortRenderer = editingViewPortElement() ? editingViewPortElem ent()->layoutBox() : 0;
110 110
111 // To ensure consistency between layouts, we need to reset any conditionally overriden height. 111 // To ensure consistency between layouts, we need to reset any conditionally overriden height.
112 if (innerEditorRenderer && !innerEditorRenderer->style()->logicalHeight().is Auto()) { 112 if (innerEditorRenderer && !innerEditorRenderer->style()->logicalHeight().is Auto()) {
113 innerEditorRenderer->style()->setLogicalHeight(Length(Auto)); 113 innerEditorRenderer->style()->setLogicalHeight(Length(Auto));
114 layoutScope.setNeedsLayout(innerEditorRenderer); 114 layoutScope.setNeedsLayout(innerEditorRenderer);
115 HTMLElement* placeholderElement = inputElement()->placeholderElement(); 115 HTMLElement* placeholderElement = inputElement()->placeholderElement();
116 if (RenderBox* placeholderBox = placeholderElement ? placeholderElement- >renderBox() : 0) 116 if (LayoutBox* placeholderBox = placeholderElement ? placeholderElement- >layoutBox() : 0)
117 layoutScope.setNeedsLayout(placeholderBox); 117 layoutScope.setNeedsLayout(placeholderBox);
118 } 118 }
119 if (viewPortRenderer && !viewPortRenderer->style()->logicalHeight().isAuto() ) { 119 if (viewPortRenderer && !viewPortRenderer->style()->logicalHeight().isAuto() ) {
120 viewPortRenderer->style()->setLogicalHeight(Length(Auto)); 120 viewPortRenderer->style()->setLogicalHeight(Length(Auto));
121 layoutScope.setNeedsLayout(viewPortRenderer); 121 layoutScope.setNeedsLayout(viewPortRenderer);
122 } 122 }
123 123
124 RenderBlockFlow::layoutBlock(false); 124 RenderBlockFlow::layoutBlock(false);
125 125
126 Element* container = containerElement(); 126 Element* container = containerElement();
127 RenderBox* containerRenderer = container ? container->renderBox() : 0; 127 LayoutBox* containerRenderer = container ? container->layoutBox() : 0;
128 128
129 // Set the text block height 129 // Set the text block height
130 LayoutUnit desiredLogicalHeight = textBlockLogicalHeight(); 130 LayoutUnit desiredLogicalHeight = textBlockLogicalHeight();
131 LayoutUnit logicalHeightLimit = computeLogicalHeightLimit(); 131 LayoutUnit logicalHeightLimit = computeLogicalHeightLimit();
132 if (innerEditorRenderer && innerEditorRenderer->logicalHeight() > logicalHei ghtLimit) { 132 if (innerEditorRenderer && innerEditorRenderer->logicalHeight() > logicalHei ghtLimit) {
133 if (desiredLogicalHeight != innerEditorRenderer->logicalHeight()) 133 if (desiredLogicalHeight != innerEditorRenderer->logicalHeight())
134 layoutScope.setNeedsLayout(this); 134 layoutScope.setNeedsLayout(this);
135 135
136 m_desiredInnerEditorLogicalHeight = desiredLogicalHeight; 136 m_desiredInnerEditorLogicalHeight = desiredLogicalHeight;
137 137
(...skipping 25 matching lines...) Expand all
163 163
164 // Center the child block in the block progression direction (vertical cente ring for horizontal text fields). 164 // Center the child block in the block progression direction (vertical cente ring for horizontal text fields).
165 if (!container && innerEditorRenderer && innerEditorRenderer->size().height( ) != contentLogicalHeight()) { 165 if (!container && innerEditorRenderer && innerEditorRenderer->size().height( ) != contentLogicalHeight()) {
166 LayoutUnit logicalHeightDiff = innerEditorRenderer->logicalHeight() - co ntentLogicalHeight(); 166 LayoutUnit logicalHeightDiff = innerEditorRenderer->logicalHeight() - co ntentLogicalHeight();
167 innerEditorRenderer->setLogicalTop(innerEditorRenderer->logicalTop() - ( logicalHeightDiff / 2 + layoutMod(logicalHeightDiff, 2))); 167 innerEditorRenderer->setLogicalTop(innerEditorRenderer->logicalTop() - ( logicalHeightDiff / 2 + layoutMod(logicalHeightDiff, 2)));
168 } else { 168 } else {
169 centerContainerIfNeeded(containerRenderer); 169 centerContainerIfNeeded(containerRenderer);
170 } 170 }
171 171
172 HTMLElement* placeholderElement = inputElement()->placeholderElement(); 172 HTMLElement* placeholderElement = inputElement()->placeholderElement();
173 if (RenderBox* placeholderBox = placeholderElement ? placeholderElement->ren derBox() : 0) { 173 if (LayoutBox* placeholderBox = placeholderElement ? placeholderElement->lay outBox() : 0) {
174 LayoutSize innerEditorSize; 174 LayoutSize innerEditorSize;
175 175
176 if (innerEditorRenderer) 176 if (innerEditorRenderer)
177 innerEditorSize = innerEditorRenderer->size(); 177 innerEditorSize = innerEditorRenderer->size();
178 placeholderBox->style()->setWidth(Length(innerEditorSize.width() - place holderBox->borderAndPaddingWidth(), Fixed)); 178 placeholderBox->style()->setWidth(Length(innerEditorSize.width() - place holderBox->borderAndPaddingWidth(), Fixed));
179 placeholderBox->style()->setHeight(Length(innerEditorSize.height() - pla ceholderBox->borderAndPaddingHeight(), Fixed)); 179 placeholderBox->style()->setHeight(Length(innerEditorSize.height() - pla ceholderBox->borderAndPaddingHeight(), Fixed));
180 bool neededLayout = placeholderBox->needsLayout(); 180 bool neededLayout = placeholderBox->needsLayout();
181 placeholderBox->layoutIfNeeded(); 181 placeholderBox->layoutIfNeeded();
182 LayoutPoint textOffset; 182 LayoutPoint textOffset;
183 if (innerEditorRenderer) 183 if (innerEditorRenderer)
184 textOffset = innerEditorRenderer->location(); 184 textOffset = innerEditorRenderer->location();
185 if (editingViewPortElement() && editingViewPortElement()->renderBox()) 185 if (editingViewPortElement() && editingViewPortElement()->layoutBox())
186 textOffset += toLayoutSize(editingViewPortElement()->renderBox()->lo cation()); 186 textOffset += toLayoutSize(editingViewPortElement()->layoutBox()->lo cation());
187 if (containerRenderer) 187 if (containerRenderer)
188 textOffset += toLayoutSize(containerRenderer->location()); 188 textOffset += toLayoutSize(containerRenderer->location());
189 placeholderBox->setLocation(textOffset); 189 placeholderBox->setLocation(textOffset);
190 190
191 // The placeholder gets layout last, after the parent text control and i ts other children, 191 // The placeholder gets layout last, after the parent text control and i ts other children,
192 // so in order to get the correct overflow from the placeholder we need to recompute it now. 192 // so in order to get the correct overflow from the placeholder we need to recompute it now.
193 if (neededLayout) 193 if (neededLayout)
194 computeOverflow(clientLogicalBottom()); 194 computeOverflow(clientLogicalBottom());
195 } 195 }
196 } 196 }
197 197
198 bool LayoutTextControlSingleLine::nodeAtPoint(const HitTestRequest& request, Hit TestResult& result, const HitTestLocation& locationInContainer, const LayoutPoin t& accumulatedOffset, HitTestAction hitTestAction) 198 bool LayoutTextControlSingleLine::nodeAtPoint(const HitTestRequest& request, Hit TestResult& result, const HitTestLocation& locationInContainer, const LayoutPoin t& accumulatedOffset, HitTestAction hitTestAction)
199 { 199 {
200 if (!LayoutTextControl::nodeAtPoint(request, result, locationInContainer, ac cumulatedOffset, hitTestAction)) 200 if (!LayoutTextControl::nodeAtPoint(request, result, locationInContainer, ac cumulatedOffset, hitTestAction))
201 return false; 201 return false;
202 202
203 // Say that we hit the inner text element if 203 // Say that we hit the inner text element if
204 // - we hit a node inside the inner text element, 204 // - we hit a node inside the inner text element,
205 // - we hit the <input> element (e.g. we're over the border or padding), or 205 // - we hit the <input> element (e.g. we're over the border or padding), or
206 // - we hit regions not in any decoration buttons. 206 // - we hit regions not in any decoration buttons.
207 Element* container = containerElement(); 207 Element* container = containerElement();
208 if (result.innerNode()->isDescendantOf(innerEditorElement()) || result.inner Node() == node() || (container && container == result.innerNode())) { 208 if (result.innerNode()->isDescendantOf(innerEditorElement()) || result.inner Node() == node() || (container && container == result.innerNode())) {
209 LayoutPoint pointInParent = locationInContainer.point(); 209 LayoutPoint pointInParent = locationInContainer.point();
210 if (container && editingViewPortElement()) { 210 if (container && editingViewPortElement()) {
211 if (editingViewPortElement()->renderBox()) 211 if (editingViewPortElement()->layoutBox())
212 pointInParent -= toLayoutSize(editingViewPortElement()->renderBo x()->location()); 212 pointInParent -= toLayoutSize(editingViewPortElement()->layoutBo x()->location());
213 if (container->renderBox()) 213 if (container->layoutBox())
214 pointInParent -= toLayoutSize(container->renderBox()->location() ); 214 pointInParent -= toLayoutSize(container->layoutBox()->location() );
215 } 215 }
216 hitInnerEditorElement(result, pointInParent, accumulatedOffset); 216 hitInnerEditorElement(result, pointInParent, accumulatedOffset);
217 } 217 }
218 return true; 218 return true;
219 } 219 }
220 220
221 void LayoutTextControlSingleLine::styleDidChange(StyleDifference diff, const Lay outStyle* oldStyle) 221 void LayoutTextControlSingleLine::styleDidChange(StyleDifference diff, const Lay outStyle* oldStyle)
222 { 222 {
223 m_desiredInnerEditorLogicalHeight = -1; 223 m_desiredInnerEditorLogicalHeight = -1;
224 LayoutTextControl::styleDidChange(diff, oldStyle); 224 LayoutTextControl::styleDidChange(diff, oldStyle);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 bool LayoutTextControlSingleLine::hasControlClip() const 267 bool LayoutTextControlSingleLine::hasControlClip() const
268 { 268 {
269 // Apply control clip for text fields with decorations. 269 // Apply control clip for text fields with decorations.
270 return !!containerElement(); 270 return !!containerElement();
271 } 271 }
272 272
273 LayoutRect LayoutTextControlSingleLine::controlClipRect(const LayoutPoint& addit ionalOffset) const 273 LayoutRect LayoutTextControlSingleLine::controlClipRect(const LayoutPoint& addit ionalOffset) const
274 { 274 {
275 ASSERT(hasControlClip()); 275 ASSERT(hasControlClip());
276 LayoutRect clipRect = contentBoxRect(); 276 LayoutRect clipRect = contentBoxRect();
277 if (containerElement()->renderBox()) 277 if (containerElement()->layoutBox())
278 clipRect = unionRect(clipRect, containerElement()->renderBox()->frameRec t()); 278 clipRect = unionRect(clipRect, containerElement()->layoutBox()->frameRec t());
279 clipRect.moveBy(additionalOffset); 279 clipRect.moveBy(additionalOffset);
280 return clipRect; 280 return clipRect;
281 } 281 }
282 282
283 float LayoutTextControlSingleLine::getAvgCharWidth(AtomicString family) 283 float LayoutTextControlSingleLine::getAvgCharWidth(AtomicString family)
284 { 284 {
285 // Since Lucida Grande is the default font, we want this to match the width 285 // Since Lucida Grande is the default font, we want this to match the width
286 // of MS Shell Dlg, the default font for textareas in Firefox, Safari Win an d 286 // of MS Shell Dlg, the default font for textareas in Firefox, Safari Win an d
287 // IE for some encodings (in IE, the default font is encoding specific). 287 // IE for some encodings (in IE, the default font is encoding specific).
288 // 901 is the avgCharWidth value in the OS/2 table for MS Shell Dlg. 288 // 901 is the avgCharWidth value in the OS/2 table for MS Shell Dlg.
(...skipping 22 matching lines...) Expand all
311 maxCharWidth = scaleEmToUnits(4027); 311 maxCharWidth = scaleEmToUnits(4027);
312 else if (hasValidAvgCharWidth(family)) 312 else if (hasValidAvgCharWidth(family))
313 maxCharWidth = roundf(style()->font().primaryFont()->maxCharWidth()); 313 maxCharWidth = roundf(style()->font().primaryFont()->maxCharWidth());
314 314
315 // For text inputs, IE adds some extra width. 315 // For text inputs, IE adds some extra width.
316 if (maxCharWidth > 0.f) 316 if (maxCharWidth > 0.f)
317 result += maxCharWidth - charWidth; 317 result += maxCharWidth - charWidth;
318 318
319 if (includesDecoration) { 319 if (includesDecoration) {
320 HTMLElement* spinButton = innerSpinButtonElement(); 320 HTMLElement* spinButton = innerSpinButtonElement();
321 if (RenderBox* spinRenderer = spinButton ? spinButton->renderBox() : 0) { 321 if (LayoutBox* spinRenderer = spinButton ? spinButton->layoutBox() : 0) {
322 result += spinRenderer->borderAndPaddingLogicalWidth(); 322 result += spinRenderer->borderAndPaddingLogicalWidth();
323 // Since the width of spinRenderer is not calculated yet, spinRender er->logicalWidth() returns 0. 323 // Since the width of spinRenderer is not calculated yet, spinRender er->logicalWidth() returns 0.
324 // So computedStyle()->logicalWidth() is used instead. 324 // So computedStyle()->logicalWidth() is used instead.
325 result += spinButton->computedStyle()->logicalWidth().value(); 325 result += spinButton->computedStyle()->logicalWidth().value();
326 } 326 }
327 } 327 }
328 328
329 return result; 329 return result;
330 } 330 }
331 331
(...skipping 29 matching lines...) Expand all
361 return textBlockStyle.release(); 361 return textBlockStyle.release();
362 } 362 }
363 363
364 bool LayoutTextControlSingleLine::textShouldBeTruncated() const 364 bool LayoutTextControlSingleLine::textShouldBeTruncated() const
365 { 365 {
366 return document().focusedElement() != node() && style()->textOverflow() == T extOverflowEllipsis; 366 return document().focusedElement() != node() && style()->textOverflow() == T extOverflowEllipsis;
367 } 367 }
368 368
369 void LayoutTextControlSingleLine::autoscroll(const IntPoint& position) 369 void LayoutTextControlSingleLine::autoscroll(const IntPoint& position)
370 { 370 {
371 RenderBox* renderer = innerEditorElement()->renderBox(); 371 LayoutBox* renderer = innerEditorElement()->layoutBox();
372 if (!renderer) 372 if (!renderer)
373 return; 373 return;
374 374
375 renderer->autoscroll(position); 375 renderer->autoscroll(position);
376 } 376 }
377 377
378 LayoutUnit LayoutTextControlSingleLine::scrollWidth() const 378 LayoutUnit LayoutTextControlSingleLine::scrollWidth() const
379 { 379 {
380 if (RenderBox* inner = innerEditorElement() ? innerEditorElement()->renderBo x() : 0) { 380 if (LayoutBox* inner = innerEditorElement() ? innerEditorElement()->layoutBo x() : 0) {
381 // Adjust scrollWidth to inculde input element horizontal paddings and 381 // Adjust scrollWidth to inculde input element horizontal paddings and
382 // decoration width 382 // decoration width
383 LayoutUnit adjustment = clientWidth() - inner->clientWidth(); 383 LayoutUnit adjustment = clientWidth() - inner->clientWidth();
384 return innerEditorElement()->scrollWidth() + adjustment; 384 return innerEditorElement()->scrollWidth() + adjustment;
385 } 385 }
386 return RenderBlockFlow::scrollWidth(); 386 return RenderBlockFlow::scrollWidth();
387 } 387 }
388 388
389 LayoutUnit LayoutTextControlSingleLine::scrollHeight() const 389 LayoutUnit LayoutTextControlSingleLine::scrollHeight() const
390 { 390 {
391 if (RenderBox* inner = innerEditorElement() ? innerEditorElement()->renderBo x() : 0) { 391 if (LayoutBox* inner = innerEditorElement() ? innerEditorElement()->layoutBo x() : 0) {
392 // Adjust scrollHeight to include input element vertical paddings and 392 // Adjust scrollHeight to include input element vertical paddings and
393 // decoration height 393 // decoration height
394 LayoutUnit adjustment = clientHeight() - inner->clientHeight(); 394 LayoutUnit adjustment = clientHeight() - inner->clientHeight();
395 return innerEditorElement()->scrollHeight() + adjustment; 395 return innerEditorElement()->scrollHeight() + adjustment;
396 } 396 }
397 return RenderBlockFlow::scrollHeight(); 397 return RenderBlockFlow::scrollHeight();
398 } 398 }
399 399
400 LayoutUnit LayoutTextControlSingleLine::scrollLeft() const 400 LayoutUnit LayoutTextControlSingleLine::scrollLeft() const
401 { 401 {
(...skipping 20 matching lines...) Expand all
422 if (innerEditorElement()) 422 if (innerEditorElement())
423 innerEditorElement()->setScrollTop(newTop); 423 innerEditorElement()->setScrollTop(newTop);
424 } 424 }
425 425
426 HTMLInputElement* LayoutTextControlSingleLine::inputElement() const 426 HTMLInputElement* LayoutTextControlSingleLine::inputElement() const
427 { 427 {
428 return toHTMLInputElement(node()); 428 return toHTMLInputElement(node());
429 } 429 }
430 430
431 } 431 }
OLDNEW
« no previous file with comments | « Source/core/layout/LayoutTextControlSingleLine.h ('k') | Source/core/layout/LayoutTheme.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698