OLD | NEW |
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 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 // If any descendant blocks exist then they will be in the next anonymou
s block and its siblings. | 208 // If any descendant blocks exist then they will be in the next anonymou
s block and its siblings. |
209 LayoutObject* block = containingBlock()->nextSibling(); | 209 LayoutObject* block = containingBlock()->nextSibling(); |
210 if (block && block->isAnonymousBlock()) | 210 if (block && block->isAnonymousBlock()) |
211 updateStyleOfAnonymousBlockContinuations(block, newStyle, *oldStyle)
; | 211 updateStyleOfAnonymousBlockContinuations(block, newStyle, *oldStyle)
; |
212 } | 212 } |
213 | 213 |
214 if (!alwaysCreateLineBoxes()) { | 214 if (!alwaysCreateLineBoxes()) { |
215 bool alwaysCreateLineBoxesNew = hasSelfPaintingLayer() || hasBoxDecorati
onBackground() || newStyle.hasPadding() || newStyle.hasMargin() || newStyle.hasO
utline(); | 215 bool alwaysCreateLineBoxesNew = hasSelfPaintingLayer() || hasBoxDecorati
onBackground() || newStyle.hasPadding() || newStyle.hasMargin() || newStyle.hasO
utline(); |
216 if (oldStyle && alwaysCreateLineBoxesNew) { | 216 if (oldStyle && alwaysCreateLineBoxesNew) { |
217 dirtyLineBoxes(false); | 217 dirtyLineBoxes(false); |
218 setNeedsLayoutAndFullPaintInvalidation(); | 218 setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidationReason::Sty
leChange); |
219 } | 219 } |
220 setAlwaysCreateLineBoxes(alwaysCreateLineBoxesNew); | 220 setAlwaysCreateLineBoxes(alwaysCreateLineBoxesNew); |
221 } | 221 } |
222 } | 222 } |
223 | 223 |
224 void LayoutInline::updateAlwaysCreateLineBoxes(bool fullLayout) | 224 void LayoutInline::updateAlwaysCreateLineBoxes(bool fullLayout) |
225 { | 225 { |
226 // Once we have been tainted once, just assume it will happen again. This wa
y effects like hover highlighting that change the | 226 // Once we have been tainted once, just assume it will happen again. This wa
y effects like hover highlighting that change the |
227 // background color will only cause a layout on the first rollover. | 227 // background color will only cause a layout on the first rollover. |
228 if (alwaysCreateLineBoxes()) | 228 if (alwaysCreateLineBoxes()) |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 newBox->setStyle(newStyle.release()); | 346 newBox->setStyle(newStyle.release()); |
347 LayoutBoxModelObject* oldContinuation = continuation(); | 347 LayoutBoxModelObject* oldContinuation = continuation(); |
348 setContinuation(newBox); | 348 setContinuation(newBox); |
349 | 349 |
350 splitFlow(beforeChild, newBox, newChild, oldContinuation); | 350 splitFlow(beforeChild, newBox, newChild, oldContinuation); |
351 return; | 351 return; |
352 } | 352 } |
353 | 353 |
354 LayoutBoxModelObject::addChild(newChild, beforeChild); | 354 LayoutBoxModelObject::addChild(newChild, beforeChild); |
355 | 355 |
356 newChild->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); | 356 newChild->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutIn
validationReason::ChildChanged); |
357 } | 357 } |
358 | 358 |
359 LayoutInline* LayoutInline::clone() const | 359 LayoutInline* LayoutInline::clone() const |
360 { | 360 { |
361 LayoutInline* cloneInline = new LayoutInline(node()); | 361 LayoutInline* cloneInline = new LayoutInline(node()); |
362 cloneInline->setStyle(style()); | 362 cloneInline->setStyle(style()); |
363 cloneInline->setFlowThreadState(flowThreadState()); | 363 cloneInline->setFlowThreadState(flowThreadState()); |
364 return cloneInline; | 364 return cloneInline; |
365 } | 365 } |
366 | 366 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 block->children()->insertChildNode(block, newBlockBox, boxFirst); | 486 block->children()->insertChildNode(block, newBlockBox, boxFirst); |
487 block->children()->insertChildNode(block, post, boxFirst); | 487 block->children()->insertChildNode(block, post, boxFirst); |
488 block->setChildrenInline(false); | 488 block->setChildrenInline(false); |
489 | 489 |
490 if (madeNewBeforeBlock) { | 490 if (madeNewBeforeBlock) { |
491 LayoutObject* o = boxFirst; | 491 LayoutObject* o = boxFirst; |
492 while (o) { | 492 while (o) { |
493 LayoutObject* no = o; | 493 LayoutObject* no = o; |
494 o = no->nextSibling(); | 494 o = no->nextSibling(); |
495 pre->children()->appendChildNode(pre, block->children()->removeChild
Node(block, no)); | 495 pre->children()->appendChildNode(pre, block->children()->removeChild
Node(block, no)); |
496 no->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); | 496 no->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(Layout
InvalidationReason::AnonymousBlockChange); |
497 } | 497 } |
498 } | 498 } |
499 | 499 |
500 splitInlines(pre, post, newBlockBox, beforeChild, oldCont); | 500 splitInlines(pre, post, newBlockBox, beforeChild, oldCont); |
501 | 501 |
502 // We already know the newBlockBox isn't going to contain inline kids, so av
oid wasting | 502 // We already know the newBlockBox isn't going to contain inline kids, so av
oid wasting |
503 // time in makeChildrenNonInline by just setting this explicitly up front. | 503 // time in makeChildrenNonInline by just setting this explicitly up front. |
504 newBlockBox->setChildrenInline(false); | 504 newBlockBox->setChildrenInline(false); |
505 | 505 |
506 newBlockBox->addChild(newChild); | 506 newBlockBox->addChild(newChild); |
507 | 507 |
508 // Always just do a full layout in order to ensure that line boxes (especial
ly wrappers for images) | 508 // Always just do a full layout in order to ensure that line boxes (especial
ly wrappers for images) |
509 // get deleted properly. Because objects moves from the pre block into the
post block, we want to | 509 // get deleted properly. Because objects moves from the pre block into the
post block, we want to |
510 // make new line boxes instead of leaving the old line boxes around. | 510 // make new line boxes instead of leaving the old line boxes around. |
511 pre->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); | 511 pre->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvalid
ationReason::AnonymousBlockChange); |
512 block->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); | 512 block->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInval
idationReason::AnonymousBlockChange); |
513 post->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); | 513 post->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvali
dationReason::AnonymousBlockChange); |
514 } | 514 } |
515 | 515 |
516 void LayoutInline::addChildToContinuation(LayoutObject* newChild, LayoutObject*
beforeChild) | 516 void LayoutInline::addChildToContinuation(LayoutObject* newChild, LayoutObject*
beforeChild) |
517 { | 517 { |
518 LayoutBoxModelObject* flow = continuationBefore(beforeChild); | 518 LayoutBoxModelObject* flow = continuationBefore(beforeChild); |
519 ASSERT(!beforeChild || beforeChild->parent()->isLayoutBlock() || beforeChild
->parent()->isLayoutInline()); | 519 ASSERT(!beforeChild || beforeChild->parent()->isLayoutBlock() || beforeChild
->parent()->isLayoutInline()); |
520 LayoutBoxModelObject* beforeChildParent = 0; | 520 LayoutBoxModelObject* beforeChildParent = 0; |
521 if (beforeChild) { | 521 if (beforeChild) { |
522 beforeChildParent = toLayoutBoxModelObject(beforeChild->parent()); | 522 beforeChildParent = toLayoutBoxModelObject(beforeChild->parent()); |
523 } else { | 523 } else { |
(...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1455 } | 1455 } |
1456 | 1456 |
1457 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain
tInvalidationContainer) const | 1457 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain
tInvalidationContainer) const |
1458 { | 1458 { |
1459 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine
r); | 1459 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine
r); |
1460 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) | 1460 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) |
1461 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); | 1461 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); |
1462 } | 1462 } |
1463 | 1463 |
1464 } // namespace blink | 1464 } // namespace blink |
OLD | NEW |