| OLD | NEW |
| 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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 // 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() |
| 109 // because of compability. | 109 // because of compability. |
| 110 | 110 |
| 111 LayoutBox* innerEditorRenderer = innerEditorElement()->layoutBox(); | 111 LayoutBox* innerEditorRenderer = innerEditorElement()->layoutBox(); |
| 112 bool innerEditorRendererHadLayout = innerEditorRenderer && innerEditorRender
er->needsLayout(); | 112 bool innerEditorRendererHadLayout = innerEditorRenderer && innerEditorRender
er->needsLayout(); |
| 113 LayoutBox* viewPortRenderer = editingViewPortElement() ? editingViewPortElem
ent()->layoutBox() : 0; | 113 LayoutBox* viewPortRenderer = editingViewPortElement() ? editingViewPortElem
ent()->layoutBox() : 0; |
| 114 | 114 |
| 115 // To ensure consistency between layouts, we need to reset any conditionally
overriden height. | 115 // To ensure consistency between layouts, we need to reset any conditionally
overriden height. |
| 116 if (innerEditorRenderer && !innerEditorRenderer->styleRef().logicalHeight().
isAuto()) { | 116 if (innerEditorRenderer && !innerEditorRenderer->styleRef().logicalHeight().
isAuto()) { |
| 117 innerEditorRenderer->mutableStyleRef().setLogicalHeight(Length(Auto)); | 117 innerEditorRenderer->mutableStyleRef().setLogicalHeight(Length(Auto)); |
| 118 layoutScope.setNeedsLayout(innerEditorRenderer); | 118 layoutScope.setNeedsLayout(innerEditorRenderer, LayoutInvalidationReason
::TextControlChanged); |
| 119 HTMLElement* placeholderElement = inputElement()->placeholderElement(); | 119 HTMLElement* placeholderElement = inputElement()->placeholderElement(); |
| 120 if (LayoutBox* placeholderBox = placeholderElement ? placeholderElement-
>layoutBox() : 0) | 120 if (LayoutBox* placeholderBox = placeholderElement ? placeholderElement-
>layoutBox() : 0) |
| 121 layoutScope.setNeedsLayout(placeholderBox); | 121 layoutScope.setNeedsLayout(placeholderBox, LayoutInvalidationReason:
:TextControlChanged); |
| 122 } | 122 } |
| 123 if (viewPortRenderer && !viewPortRenderer->styleRef().logicalHeight().isAuto
()) { | 123 if (viewPortRenderer && !viewPortRenderer->styleRef().logicalHeight().isAuto
()) { |
| 124 viewPortRenderer->mutableStyleRef().setLogicalHeight(Length(Auto)); | 124 viewPortRenderer->mutableStyleRef().setLogicalHeight(Length(Auto)); |
| 125 layoutScope.setNeedsLayout(viewPortRenderer); | 125 layoutScope.setNeedsLayout(viewPortRenderer, LayoutInvalidationReason::T
extControlChanged); |
| 126 } | 126 } |
| 127 | 127 |
| 128 LayoutBlockFlow::layoutBlock(false); | 128 LayoutBlockFlow::layoutBlock(false); |
| 129 | 129 |
| 130 Element* container = containerElement(); | 130 Element* container = containerElement(); |
| 131 LayoutBox* containerRenderer = container ? container->layoutBox() : 0; | 131 LayoutBox* containerRenderer = container ? container->layoutBox() : 0; |
| 132 | 132 |
| 133 // Set the text block height | 133 // Set the text block height |
| 134 LayoutUnit desiredLogicalHeight = textBlockLogicalHeight(); | 134 LayoutUnit desiredLogicalHeight = textBlockLogicalHeight(); |
| 135 LayoutUnit logicalHeightLimit = computeLogicalHeightLimit(); | 135 LayoutUnit logicalHeightLimit = computeLogicalHeightLimit(); |
| 136 if (innerEditorRenderer && innerEditorRenderer->logicalHeight() > logicalHei
ghtLimit) { | 136 if (innerEditorRenderer && innerEditorRenderer->logicalHeight() > logicalHei
ghtLimit) { |
| 137 if (desiredLogicalHeight != innerEditorRenderer->logicalHeight()) | 137 if (desiredLogicalHeight != innerEditorRenderer->logicalHeight()) |
| 138 layoutScope.setNeedsLayout(this); | 138 layoutScope.setNeedsLayout(this, LayoutInvalidationReason::TextContr
olChanged); |
| 139 | 139 |
| 140 m_desiredInnerEditorLogicalHeight = desiredLogicalHeight; | 140 m_desiredInnerEditorLogicalHeight = desiredLogicalHeight; |
| 141 | 141 |
| 142 innerEditorRenderer->mutableStyleRef().setLogicalHeight(Length(desiredLo
gicalHeight, Fixed)); | 142 innerEditorRenderer->mutableStyleRef().setLogicalHeight(Length(desiredLo
gicalHeight, Fixed)); |
| 143 layoutScope.setNeedsLayout(innerEditorRenderer); | 143 layoutScope.setNeedsLayout(innerEditorRenderer, LayoutInvalidationReason
::TextControlChanged); |
| 144 if (viewPortRenderer) { | 144 if (viewPortRenderer) { |
| 145 viewPortRenderer->mutableStyleRef().setLogicalHeight(Length(desiredL
ogicalHeight, Fixed)); | 145 viewPortRenderer->mutableStyleRef().setLogicalHeight(Length(desiredL
ogicalHeight, Fixed)); |
| 146 layoutScope.setNeedsLayout(viewPortRenderer); | 146 layoutScope.setNeedsLayout(viewPortRenderer, LayoutInvalidationReaso
n::TextControlChanged); |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 // The container might be taller because of decoration elements. | 149 // The container might be taller because of decoration elements. |
| 150 if (containerRenderer) { | 150 if (containerRenderer) { |
| 151 containerRenderer->layoutIfNeeded(); | 151 containerRenderer->layoutIfNeeded(); |
| 152 LayoutUnit containerLogicalHeight = containerRenderer->logicalHeight(); | 152 LayoutUnit containerLogicalHeight = containerRenderer->logicalHeight(); |
| 153 if (containerLogicalHeight > logicalHeightLimit) { | 153 if (containerLogicalHeight > logicalHeightLimit) { |
| 154 containerRenderer->mutableStyleRef().setLogicalHeight(Length(logical
HeightLimit, Fixed)); | 154 containerRenderer->mutableStyleRef().setLogicalHeight(Length(logical
HeightLimit, Fixed)); |
| 155 layoutScope.setNeedsLayout(this); | 155 layoutScope.setNeedsLayout(this, LayoutInvalidationReason::TextContr
olChanged); |
| 156 } else if (containerRenderer->logicalHeight() < contentLogicalHeight())
{ | 156 } else if (containerRenderer->logicalHeight() < contentLogicalHeight())
{ |
| 157 containerRenderer->mutableStyleRef().setLogicalHeight(Length(content
LogicalHeight(), Fixed)); | 157 containerRenderer->mutableStyleRef().setLogicalHeight(Length(content
LogicalHeight(), Fixed)); |
| 158 layoutScope.setNeedsLayout(this); | 158 layoutScope.setNeedsLayout(this, LayoutInvalidationReason::TextContr
olChanged); |
| 159 } else { | 159 } else { |
| 160 containerRenderer->mutableStyleRef().setLogicalHeight(Length(contain
erLogicalHeight, Fixed)); | 160 containerRenderer->mutableStyleRef().setLogicalHeight(Length(contain
erLogicalHeight, Fixed)); |
| 161 } | 161 } |
| 162 } | 162 } |
| 163 | 163 |
| 164 // We ensure that the inner editor renderer is laid out at least once. This
is | 164 // We ensure that the inner editor renderer is laid out at least once. This
is |
| 165 // required as the logic below assumes that we don't carry over previous lay
out values. | 165 // required as the logic below assumes that we don't carry over previous lay
out values. |
| 166 if (innerEditorRenderer && !innerEditorRendererHadLayout) | 166 if (innerEditorRenderer && !innerEditorRendererHadLayout) |
| 167 layoutScope.setNeedsLayout(innerEditorRenderer); | 167 layoutScope.setNeedsLayout(innerEditorRenderer, LayoutInvalidationReason
::TextControlChanged); |
| 168 | 168 |
| 169 // If we need another layout pass, we have changed one of children's height
so we need to relayout them. | 169 // If we need another layout pass, we have changed one of children's height
so we need to relayout them. |
| 170 if (needsLayout()) | 170 if (needsLayout()) |
| 171 LayoutBlockFlow::layoutBlock(true); | 171 LayoutBlockFlow::layoutBlock(true); |
| 172 | 172 |
| 173 // Center the child block in the block progression direction (vertical cente
ring for horizontal text fields). | 173 // Center the child block in the block progression direction (vertical cente
ring for horizontal text fields). |
| 174 if (!container && innerEditorRenderer && innerEditorRenderer->size().height(
) != contentLogicalHeight()) { | 174 if (!container && innerEditorRenderer && innerEditorRenderer->size().height(
) != contentLogicalHeight()) { |
| 175 LayoutUnit logicalHeightDiff = innerEditorRenderer->logicalHeight() - co
ntentLogicalHeight(); | 175 LayoutUnit logicalHeightDiff = innerEditorRenderer->logicalHeight() - co
ntentLogicalHeight(); |
| 176 innerEditorRenderer->setLogicalTop(innerEditorRenderer->logicalTop() - (
logicalHeightDiff / 2 + layoutMod(logicalHeightDiff, 2))); | 176 innerEditorRenderer->setLogicalTop(innerEditorRenderer->logicalTop() - (
logicalHeightDiff / 2 + layoutMod(logicalHeightDiff, 2))); |
| 177 } else { | 177 } else { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 viewPortRenderer->mutableStyleRef().setHeight(Length()); | 239 viewPortRenderer->mutableStyleRef().setHeight(Length()); |
| 240 viewPortRenderer->mutableStyleRef().setWidth(Length()); | 240 viewPortRenderer->mutableStyleRef().setWidth(Length()); |
| 241 } | 241 } |
| 242 Element* container = containerElement(); | 242 Element* container = containerElement(); |
| 243 if (LayoutObject* containerRenderer = container ? container->layoutObject()
: 0) { | 243 if (LayoutObject* containerRenderer = container ? container->layoutObject()
: 0) { |
| 244 containerRenderer->mutableStyleRef().setHeight(Length()); | 244 containerRenderer->mutableStyleRef().setHeight(Length()); |
| 245 containerRenderer->mutableStyleRef().setWidth(Length()); | 245 containerRenderer->mutableStyleRef().setWidth(Length()); |
| 246 } | 246 } |
| 247 LayoutObject* innerEditorRenderer = innerEditorElement()->layoutObject(); | 247 LayoutObject* innerEditorRenderer = innerEditorElement()->layoutObject(); |
| 248 if (innerEditorRenderer && diff.needsFullLayout()) | 248 if (innerEditorRenderer && diff.needsFullLayout()) |
| 249 innerEditorRenderer->setNeedsLayoutAndFullPaintInvalidation(); | 249 innerEditorRenderer->setNeedsLayoutAndFullPaintInvalidation(LayoutInvali
dationReason::StyleChange); |
| 250 if (HTMLElement* placeholder = inputElement()->placeholderElement()) | 250 if (HTMLElement* placeholder = inputElement()->placeholderElement()) |
| 251 placeholder->setInlineStyleProperty(CSSPropertyTextOverflow, textShouldB
eTruncated() ? CSSValueEllipsis : CSSValueClip); | 251 placeholder->setInlineStyleProperty(CSSPropertyTextOverflow, textShouldB
eTruncated() ? CSSValueEllipsis : CSSValueClip); |
| 252 setHasOverflowClip(false); | 252 setHasOverflowClip(false); |
| 253 } | 253 } |
| 254 | 254 |
| 255 void LayoutTextControlSingleLine::capsLockStateMayHaveChanged() | 255 void LayoutTextControlSingleLine::capsLockStateMayHaveChanged() |
| 256 { | 256 { |
| 257 if (!node()) | 257 if (!node()) |
| 258 return; | 258 return; |
| 259 | 259 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 if (innerEditorElement()) | 431 if (innerEditorElement()) |
| 432 innerEditorElement()->setScrollTop(newTop); | 432 innerEditorElement()->setScrollTop(newTop); |
| 433 } | 433 } |
| 434 | 434 |
| 435 HTMLInputElement* LayoutTextControlSingleLine::inputElement() const | 435 HTMLInputElement* LayoutTextControlSingleLine::inputElement() const |
| 436 { | 436 { |
| 437 return toHTMLInputElement(node()); | 437 return toHTMLInputElement(node()); |
| 438 } | 438 } |
| 439 | 439 |
| 440 } | 440 } |
| OLD | NEW |