| 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 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv
ed. |
| 7 * Copyright (C) 2009 Google Inc. All rights reserved. | 7 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 RenderObjectChildList* children = virtualChildren(); | 349 RenderObjectChildList* children = virtualChildren(); |
| 350 ASSERT(children); | 350 ASSERT(children); |
| 351 if (!children) | 351 if (!children) |
| 352 return; | 352 return; |
| 353 | 353 |
| 354 children->removeChildNode(this, oldChild); | 354 children->removeChildNode(this, oldChild); |
| 355 } | 355 } |
| 356 | 356 |
| 357 RenderObject* RenderObject::nextInPreOrder() const | 357 RenderObject* RenderObject::nextInPreOrder() const |
| 358 { | 358 { |
| 359 if (RenderObject* o = firstChild()) | 359 if (RenderObject* o = slowFirstChild()) |
| 360 return o; | 360 return o; |
| 361 | 361 |
| 362 return nextInPreOrderAfterChildren(); | 362 return nextInPreOrderAfterChildren(); |
| 363 } | 363 } |
| 364 | 364 |
| 365 RenderObject* RenderObject::nextInPreOrderAfterChildren() const | 365 RenderObject* RenderObject::nextInPreOrderAfterChildren() const |
| 366 { | 366 { |
| 367 RenderObject* o; | 367 RenderObject* o; |
| 368 if (!(o = nextSibling())) { | 368 if (!(o = nextSibling())) { |
| 369 o = parent(); | 369 o = parent(); |
| 370 while (o && !o->nextSibling()) | 370 while (o && !o->nextSibling()) |
| 371 o = o->parent(); | 371 o = o->parent(); |
| 372 if (o) | 372 if (o) |
| 373 o = o->nextSibling(); | 373 o = o->nextSibling(); |
| 374 } | 374 } |
| 375 | 375 |
| 376 return o; | 376 return o; |
| 377 } | 377 } |
| 378 | 378 |
| 379 RenderObject* RenderObject::nextInPreOrder(const RenderObject* stayWithin) const | 379 RenderObject* RenderObject::nextInPreOrder(const RenderObject* stayWithin) const |
| 380 { | 380 { |
| 381 if (RenderObject* o = firstChild()) | 381 if (RenderObject* o = slowFirstChild()) |
| 382 return o; | 382 return o; |
| 383 | 383 |
| 384 return nextInPreOrderAfterChildren(stayWithin); | 384 return nextInPreOrderAfterChildren(stayWithin); |
| 385 } | 385 } |
| 386 | 386 |
| 387 RenderObject* RenderObject::nextInPreOrderAfterChildren(const RenderObject* stay
Within) const | 387 RenderObject* RenderObject::nextInPreOrderAfterChildren(const RenderObject* stay
Within) const |
| 388 { | 388 { |
| 389 if (this == stayWithin) | 389 if (this == stayWithin) |
| 390 return 0; | 390 return 0; |
| 391 | 391 |
| 392 const RenderObject* current = this; | 392 const RenderObject* current = this; |
| 393 RenderObject* next; | 393 RenderObject* next; |
| 394 while (!(next = current->nextSibling())) { | 394 while (!(next = current->nextSibling())) { |
| 395 current = current->parent(); | 395 current = current->parent(); |
| 396 if (!current || current == stayWithin) | 396 if (!current || current == stayWithin) |
| 397 return 0; | 397 return 0; |
| 398 } | 398 } |
| 399 return next; | 399 return next; |
| 400 } | 400 } |
| 401 | 401 |
| 402 RenderObject* RenderObject::previousInPreOrder() const | 402 RenderObject* RenderObject::previousInPreOrder() const |
| 403 { | 403 { |
| 404 if (RenderObject* o = previousSibling()) { | 404 if (RenderObject* o = previousSibling()) { |
| 405 while (o->lastChild()) | 405 while (RenderObject* lastChild = o->slowLastChild()) |
| 406 o = o->lastChild(); | 406 o = lastChild; |
| 407 return o; | 407 return o; |
| 408 } | 408 } |
| 409 | 409 |
| 410 return parent(); | 410 return parent(); |
| 411 } | 411 } |
| 412 | 412 |
| 413 RenderObject* RenderObject::previousInPreOrder(const RenderObject* stayWithin) c
onst | 413 RenderObject* RenderObject::previousInPreOrder(const RenderObject* stayWithin) c
onst |
| 414 { | 414 { |
| 415 if (this == stayWithin) | 415 if (this == stayWithin) |
| 416 return 0; | 416 return 0; |
| 417 | 417 |
| 418 return previousInPreOrder(); | 418 return previousInPreOrder(); |
| 419 } | 419 } |
| 420 | 420 |
| 421 RenderObject* RenderObject::childAt(unsigned index) const | 421 RenderObject* RenderObject::childAt(unsigned index) const |
| 422 { | 422 { |
| 423 RenderObject* child = firstChild(); | 423 RenderObject* child = slowFirstChild(); |
| 424 for (unsigned i = 0; child && i < index; i++) | 424 for (unsigned i = 0; child && i < index; i++) |
| 425 child = child->nextSibling(); | 425 child = child->nextSibling(); |
| 426 return child; | 426 return child; |
| 427 } | 427 } |
| 428 | 428 |
| 429 RenderObject* RenderObject::lastLeafChild() const | 429 RenderObject* RenderObject::lastLeafChild() const |
| 430 { | 430 { |
| 431 RenderObject* r = lastChild(); | 431 RenderObject* r = slowLastChild(); |
| 432 while (r) { | 432 while (r) { |
| 433 RenderObject* n = 0; | 433 RenderObject* n = 0; |
| 434 n = r->lastChild(); | 434 n = r->slowLastChild(); |
| 435 if (!n) | 435 if (!n) |
| 436 break; | 436 break; |
| 437 r = n; | 437 r = n; |
| 438 } | 438 } |
| 439 return r; | 439 return r; |
| 440 } | 440 } |
| 441 | 441 |
| 442 static void addLayers(RenderObject* obj, RenderLayer* parentLayer, RenderObject*
& newObject, | 442 static void addLayers(RenderObject* obj, RenderLayer* parentLayer, RenderObject*
& newObject, |
| 443 RenderLayer*& beforeChild) | 443 RenderLayer*& beforeChild) |
| 444 { | 444 { |
| 445 if (obj->hasLayer()) { | 445 if (obj->hasLayer()) { |
| 446 if (!beforeChild && newObject) { | 446 if (!beforeChild && newObject) { |
| 447 // We need to figure out the layer that follows newObject. We only d
o | 447 // We need to figure out the layer that follows newObject. We only d
o |
| 448 // this the first time we find a child layer, and then we update the | 448 // this the first time we find a child layer, and then we update the |
| 449 // pointer values for newObject and beforeChild used by everyone els
e. | 449 // pointer values for newObject and beforeChild used by everyone els
e. |
| 450 beforeChild = newObject->parent()->findNextLayer(parentLayer, newObj
ect); | 450 beforeChild = newObject->parent()->findNextLayer(parentLayer, newObj
ect); |
| 451 newObject = 0; | 451 newObject = 0; |
| 452 } | 452 } |
| 453 parentLayer->addChild(toRenderLayerModelObject(obj)->layer(), beforeChil
d); | 453 parentLayer->addChild(toRenderLayerModelObject(obj)->layer(), beforeChil
d); |
| 454 return; | 454 return; |
| 455 } | 455 } |
| 456 | 456 |
| 457 for (RenderObject* curr = obj->firstChild(); curr; curr = curr->nextSibling(
)) | 457 for (RenderObject* curr = obj->slowFirstChild(); curr; curr = curr->nextSibl
ing()) |
| 458 addLayers(curr, parentLayer, newObject, beforeChild); | 458 addLayers(curr, parentLayer, newObject, beforeChild); |
| 459 } | 459 } |
| 460 | 460 |
| 461 void RenderObject::addLayers(RenderLayer* parentLayer) | 461 void RenderObject::addLayers(RenderLayer* parentLayer) |
| 462 { | 462 { |
| 463 if (!parentLayer) | 463 if (!parentLayer) |
| 464 return; | 464 return; |
| 465 | 465 |
| 466 RenderObject* object = this; | 466 RenderObject* object = this; |
| 467 RenderLayer* beforeChild = 0; | 467 RenderLayer* beforeChild = 0; |
| 468 WebCore::addLayers(this, parentLayer, object, beforeChild); | 468 WebCore::addLayers(this, parentLayer, object, beforeChild); |
| 469 } | 469 } |
| 470 | 470 |
| 471 void RenderObject::removeLayers(RenderLayer* parentLayer) | 471 void RenderObject::removeLayers(RenderLayer* parentLayer) |
| 472 { | 472 { |
| 473 if (!parentLayer) | 473 if (!parentLayer) |
| 474 return; | 474 return; |
| 475 | 475 |
| 476 if (hasLayer()) { | 476 if (hasLayer()) { |
| 477 parentLayer->removeChild(toRenderLayerModelObject(this)->layer()); | 477 parentLayer->removeChild(toRenderLayerModelObject(this)->layer()); |
| 478 return; | 478 return; |
| 479 } | 479 } |
| 480 | 480 |
| 481 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()) | 481 for (RenderObject* curr = slowFirstChild(); curr; curr = curr->nextSibling()
) |
| 482 curr->removeLayers(parentLayer); | 482 curr->removeLayers(parentLayer); |
| 483 } | 483 } |
| 484 | 484 |
| 485 void RenderObject::moveLayers(RenderLayer* oldParent, RenderLayer* newParent) | 485 void RenderObject::moveLayers(RenderLayer* oldParent, RenderLayer* newParent) |
| 486 { | 486 { |
| 487 if (!newParent) | 487 if (!newParent) |
| 488 return; | 488 return; |
| 489 | 489 |
| 490 if (hasLayer()) { | 490 if (hasLayer()) { |
| 491 RenderLayer* layer = toRenderLayerModelObject(this)->layer(); | 491 RenderLayer* layer = toRenderLayerModelObject(this)->layer(); |
| 492 ASSERT(oldParent == layer->parent()); | 492 ASSERT(oldParent == layer->parent()); |
| 493 if (oldParent) | 493 if (oldParent) |
| 494 oldParent->removeChild(layer); | 494 oldParent->removeChild(layer); |
| 495 newParent->addChild(layer); | 495 newParent->addChild(layer); |
| 496 return; | 496 return; |
| 497 } | 497 } |
| 498 | 498 |
| 499 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()) | 499 for (RenderObject* curr = slowFirstChild(); curr; curr = curr->nextSibling()
) |
| 500 curr->moveLayers(oldParent, newParent); | 500 curr->moveLayers(oldParent, newParent); |
| 501 } | 501 } |
| 502 | 502 |
| 503 RenderLayer* RenderObject::findNextLayer(RenderLayer* parentLayer, RenderObject*
startPoint, | 503 RenderLayer* RenderObject::findNextLayer(RenderLayer* parentLayer, RenderObject*
startPoint, |
| 504 bool checkParent) | 504 bool checkParent) |
| 505 { | 505 { |
| 506 // Error check the parent layer passed in. If it's null, we can't find anyth
ing. | 506 // Error check the parent layer passed in. If it's null, we can't find anyth
ing. |
| 507 if (!parentLayer) | 507 if (!parentLayer) |
| 508 return 0; | 508 return 0; |
| 509 | 509 |
| 510 // Step 1: If our layer is a child of the desired parent, then return our la
yer. | 510 // Step 1: If our layer is a child of the desired parent, then return our la
yer. |
| 511 RenderLayer* ourLayer = hasLayer() ? toRenderLayerModelObject(this)->layer()
: 0; | 511 RenderLayer* ourLayer = hasLayer() ? toRenderLayerModelObject(this)->layer()
: 0; |
| 512 if (ourLayer && ourLayer->parent() == parentLayer) | 512 if (ourLayer && ourLayer->parent() == parentLayer) |
| 513 return ourLayer; | 513 return ourLayer; |
| 514 | 514 |
| 515 // Step 2: If we don't have a layer, or our layer is the desired parent, the
n descend | 515 // Step 2: If we don't have a layer, or our layer is the desired parent, the
n descend |
| 516 // into our siblings trying to find the next layer whose parent is the desir
ed parent. | 516 // into our siblings trying to find the next layer whose parent is the desir
ed parent. |
| 517 if (!ourLayer || ourLayer == parentLayer) { | 517 if (!ourLayer || ourLayer == parentLayer) { |
| 518 for (RenderObject* curr = startPoint ? startPoint->nextSibling() : first
Child(); | 518 for (RenderObject* curr = startPoint ? startPoint->nextSibling() : slowF
irstChild(); |
| 519 curr; curr = curr->nextSibling()) { | 519 curr; curr = curr->nextSibling()) { |
| 520 RenderLayer* nextLayer = curr->findNextLayer(parentLayer, 0, false); | 520 RenderLayer* nextLayer = curr->findNextLayer(parentLayer, 0, false); |
| 521 if (nextLayer) | 521 if (nextLayer) |
| 522 return nextLayer; | 522 return nextLayer; |
| 523 } | 523 } |
| 524 } | 524 } |
| 525 | 525 |
| 526 // Step 3: If our layer is the desired parent layer, then we're finished. We
didn't | 526 // Step 3: If our layer is the desired parent layer, then we're finished. We
didn't |
| 527 // find anything. | 527 // find anything. |
| 528 if (parentLayer == ourLayer) | 528 if (parentLayer == ourLayer) |
| (...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1324 for (size_t i = 0; i < quads.size(); ++i) | 1324 for (size_t i = 0; i < quads.size(); ++i) |
| 1325 result.unite(quads[i].boundingBox()); | 1325 result.unite(quads[i].boundingBox()); |
| 1326 | 1326 |
| 1327 return result; | 1327 return result; |
| 1328 } | 1328 } |
| 1329 | 1329 |
| 1330 void RenderObject::addAbsoluteRectForLayer(LayoutRect& result) | 1330 void RenderObject::addAbsoluteRectForLayer(LayoutRect& result) |
| 1331 { | 1331 { |
| 1332 if (hasLayer()) | 1332 if (hasLayer()) |
| 1333 result.unite(absoluteBoundingBoxRectIgnoringTransforms()); | 1333 result.unite(absoluteBoundingBoxRectIgnoringTransforms()); |
| 1334 for (RenderObject* current = firstChild(); current; current = current->nextS
ibling()) | 1334 for (RenderObject* current = slowFirstChild(); current; current = current->n
extSibling()) |
| 1335 current->addAbsoluteRectForLayer(result); | 1335 current->addAbsoluteRectForLayer(result); |
| 1336 } | 1336 } |
| 1337 | 1337 |
| 1338 LayoutRect RenderObject::paintingRootRect(LayoutRect& topLevelRect) | 1338 LayoutRect RenderObject::paintingRootRect(LayoutRect& topLevelRect) |
| 1339 { | 1339 { |
| 1340 LayoutRect result = absoluteBoundingBoxRectIgnoringTransforms(); | 1340 LayoutRect result = absoluteBoundingBoxRectIgnoringTransforms(); |
| 1341 topLevelRect = result; | 1341 topLevelRect = result; |
| 1342 for (RenderObject* current = firstChild(); current; current = current->nextS
ibling()) | 1342 for (RenderObject* current = slowFirstChild(); current; current = current->n
extSibling()) |
| 1343 current->addAbsoluteRectForLayer(result); | 1343 current->addAbsoluteRectForLayer(result); |
| 1344 return result; | 1344 return result; |
| 1345 } | 1345 } |
| 1346 | 1346 |
| 1347 void RenderObject::paint(PaintInfo&, const LayoutPoint&) | 1347 void RenderObject::paint(PaintInfo&, const LayoutPoint&) |
| 1348 { | 1348 { |
| 1349 } | 1349 } |
| 1350 | 1350 |
| 1351 const RenderLayerModelObject* RenderObject::containerForRepaint() const | 1351 const RenderLayerModelObject* RenderObject::containerForRepaint() const |
| 1352 { | 1352 { |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1539 | 1539 |
| 1540 void RenderObject::repaintTreeAfterLayout(const RenderLayerModelObject& repaintC
ontainer) | 1540 void RenderObject::repaintTreeAfterLayout(const RenderLayerModelObject& repaintC
ontainer) |
| 1541 { | 1541 { |
| 1542 // If we didn't need invalidation then our children don't need as well. | 1542 // If we didn't need invalidation then our children don't need as well. |
| 1543 // Skip walking down the tree as everything should be fine below us. | 1543 // Skip walking down the tree as everything should be fine below us. |
| 1544 if (!shouldCheckForInvalidationAfterLayout()) | 1544 if (!shouldCheckForInvalidationAfterLayout()) |
| 1545 return; | 1545 return; |
| 1546 | 1546 |
| 1547 clearRepaintState(); | 1547 clearRepaintState(); |
| 1548 | 1548 |
| 1549 for (RenderObject* child = firstChild(); child; child = child->nextSibling()
) { | 1549 for (RenderObject* child = slowFirstChild(); child; child = child->nextSibli
ng()) { |
| 1550 if (!child->isOutOfFlowPositioned()) | 1550 if (!child->isOutOfFlowPositioned()) |
| 1551 child->repaintTreeAfterLayout(repaintContainer); | 1551 child->repaintTreeAfterLayout(repaintContainer); |
| 1552 } | 1552 } |
| 1553 } | 1553 } |
| 1554 | 1554 |
| 1555 static PassRefPtr<JSONValue> jsonObjectForOldAndNewRects(const LayoutRect& oldRe
ct, const LayoutRect& newRect) | 1555 static PassRefPtr<JSONValue> jsonObjectForOldAndNewRects(const LayoutRect& oldRe
ct, const LayoutRect& newRect) |
| 1556 { | 1556 { |
| 1557 RefPtr<JSONObject> object = JSONObject::create(); | 1557 RefPtr<JSONObject> object = JSONObject::create(); |
| 1558 | 1558 |
| 1559 object->setValue("old", jsonObjectForRect(oldRect)); | 1559 object->setValue("old", jsonObjectForRect(oldRect)); |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1821 printedCharacters += fprintf(stderr, "%s", markedLabel1); | 1821 printedCharacters += fprintf(stderr, "%s", markedLabel1); |
| 1822 if (markedObject2 == this && markedLabel2) | 1822 if (markedObject2 == this && markedLabel2) |
| 1823 printedCharacters += fprintf(stderr, "%s", markedLabel2); | 1823 printedCharacters += fprintf(stderr, "%s", markedLabel2); |
| 1824 for (; printedCharacters < depth * 2; printedCharacters++) | 1824 for (; printedCharacters < depth * 2; printedCharacters++) |
| 1825 fputc(' ', stderr); | 1825 fputc(' ', stderr); |
| 1826 | 1826 |
| 1827 showRenderObject(printedCharacters); | 1827 showRenderObject(printedCharacters); |
| 1828 if (!this) | 1828 if (!this) |
| 1829 return; | 1829 return; |
| 1830 | 1830 |
| 1831 for (const RenderObject* child = firstChild(); child; child = child->nextSib
ling()) | 1831 for (const RenderObject* child = slowFirstChild(); child; child = child->nex
tSibling()) |
| 1832 child->showRenderTreeAndMark(markedObject1, markedLabel1, markedObject2,
markedLabel2, depth + 1); | 1832 child->showRenderTreeAndMark(markedObject1, markedLabel1, markedObject2,
markedLabel2, depth + 1); |
| 1833 } | 1833 } |
| 1834 | 1834 |
| 1835 #endif // NDEBUG | 1835 #endif // NDEBUG |
| 1836 | 1836 |
| 1837 bool RenderObject::isSelectable() const | 1837 bool RenderObject::isSelectable() const |
| 1838 { | 1838 { |
| 1839 return !isInert() && !(style()->userSelect() == SELECT_NONE && style()->user
Modify() == READ_ONLY); | 1839 return !isInert() && !(style()->userSelect() == SELECT_NONE && style()->user
Modify() == READ_ONLY); |
| 1840 } | 1840 } |
| 1841 | 1841 |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1979 return; | 1979 return; |
| 1980 } | 1980 } |
| 1981 | 1981 |
| 1982 setStyle(pseudoStyle); | 1982 setStyle(pseudoStyle); |
| 1983 } | 1983 } |
| 1984 | 1984 |
| 1985 inline bool RenderObject::hasImmediateNonWhitespaceTextChildOrPropertiesDependen
tOnColor() const | 1985 inline bool RenderObject::hasImmediateNonWhitespaceTextChildOrPropertiesDependen
tOnColor() const |
| 1986 { | 1986 { |
| 1987 if (style()->hasBorder() || style()->hasOutline()) | 1987 if (style()->hasBorder() || style()->hasOutline()) |
| 1988 return true; | 1988 return true; |
| 1989 for (const RenderObject* r = firstChild(); r; r = r->nextSibling()) { | 1989 for (const RenderObject* r = slowFirstChild(); r; r = r->nextSibling()) { |
| 1990 if (r->isText() && !toRenderText(r)->isAllCollapsibleWhitespace()) | 1990 if (r->isText() && !toRenderText(r)->isAllCollapsibleWhitespace()) |
| 1991 return true; | 1991 return true; |
| 1992 if (r->style()->hasOutline() || r->style()->hasBorder()) | 1992 if (r->style()->hasOutline() || r->style()->hasBorder()) |
| 1993 return true; | 1993 return true; |
| 1994 } | 1994 } |
| 1995 return false; | 1995 return false; |
| 1996 } | 1996 } |
| 1997 | 1997 |
| 1998 void RenderObject::markContainingBlocksForOverflowRecalc() | 1998 void RenderObject::markContainingBlocksForOverflowRecalc() |
| 1999 { | 1999 { |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2234 | 2234 |
| 2235 if (oldStyle && !areCursorsEqual(oldStyle, style())) { | 2235 if (oldStyle && !areCursorsEqual(oldStyle, style())) { |
| 2236 if (LocalFrame* frame = this->frame()) | 2236 if (LocalFrame* frame = this->frame()) |
| 2237 frame->eventHandler().scheduleCursorUpdate(); | 2237 frame->eventHandler().scheduleCursorUpdate(); |
| 2238 } | 2238 } |
| 2239 } | 2239 } |
| 2240 | 2240 |
| 2241 void RenderObject::propagateStyleToAnonymousChildren(bool blockChildrenOnly) | 2241 void RenderObject::propagateStyleToAnonymousChildren(bool blockChildrenOnly) |
| 2242 { | 2242 { |
| 2243 // FIXME: We could save this call when the change only affected non-inherite
d properties. | 2243 // FIXME: We could save this call when the change only affected non-inherite
d properties. |
| 2244 for (RenderObject* child = firstChild(); child; child = child->nextSibling()
) { | 2244 for (RenderObject* child = slowFirstChild(); child; child = child->nextSibli
ng()) { |
| 2245 if (!child->isAnonymous() || child->style()->styleType() != NOPSEUDO) | 2245 if (!child->isAnonymous() || child->style()->styleType() != NOPSEUDO) |
| 2246 continue; | 2246 continue; |
| 2247 | 2247 |
| 2248 if (blockChildrenOnly && !child->isRenderBlock()) | 2248 if (blockChildrenOnly && !child->isRenderBlock()) |
| 2249 continue; | 2249 continue; |
| 2250 | 2250 |
| 2251 if (child->isRenderFullScreen() || child->isRenderFullScreenPlaceholder(
)) | 2251 if (child->isRenderFullScreen() || child->isRenderFullScreenPlaceholder(
)) |
| 2252 continue; | 2252 continue; |
| 2253 | 2253 |
| 2254 RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisp
lay(style(), child->style()->display()); | 2254 RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisp
lay(style(), child->style()->display()); |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2543 newContainerRect = containerRect; | 2543 newContainerRect = containerRect; |
| 2544 | 2544 |
| 2545 // If it's possible for children to have rects outside our bounds, then we n
eed to descend into | 2545 // If it's possible for children to have rects outside our bounds, then we n
eed to descend into |
| 2546 // the children and compute them. | 2546 // the children and compute them. |
| 2547 // Ideally there would be other cases where we could detect that children co
uldn't have rects | 2547 // Ideally there would be other cases where we could detect that children co
uldn't have rects |
| 2548 // outside our bounds and prune the tree walk. | 2548 // outside our bounds and prune the tree walk. |
| 2549 // Note that we don't use Region here because Union is O(N) - better to just
keep a list of | 2549 // Note that we don't use Region here because Union is O(N) - better to just
keep a list of |
| 2550 // partially redundant rectangles. If we find examples where this is expensi
ve, then we could | 2550 // partially redundant rectangles. If we find examples where this is expensi
ve, then we could |
| 2551 // rewrite Region to be more efficient. See https://bugs.webkit.org/show_bug
.cgi?id=100814. | 2551 // rewrite Region to be more efficient. See https://bugs.webkit.org/show_bug
.cgi?id=100814. |
| 2552 if (!isRenderView()) { | 2552 if (!isRenderView()) { |
| 2553 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()
) { | 2553 for (RenderObject* curr = slowFirstChild(); curr; curr = curr->nextSibli
ng()) { |
| 2554 curr->addLayerHitTestRects(layerRects, currentLayer, layerOffset, n
ewContainerRect); | 2554 curr->addLayerHitTestRects(layerRects, currentLayer, layerOffset, n
ewContainerRect); |
| 2555 } | 2555 } |
| 2556 } | 2556 } |
| 2557 } | 2557 } |
| 2558 | 2558 |
| 2559 bool RenderObject::isRooted() const | 2559 bool RenderObject::isRooted() const |
| 2560 { | 2560 { |
| 2561 const RenderObject* object = this; | 2561 const RenderObject* object = this; |
| 2562 while (object->parent() && !object->hasLayer()) | 2562 while (object->parent() && !object->hasLayer()) |
| 2563 object = object->parent(); | 2563 object = object->parent(); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2711 clearLayoutRootIfNeeded(); | 2711 clearLayoutRootIfNeeded(); |
| 2712 } | 2712 } |
| 2713 | 2713 |
| 2714 void RenderObject::insertedIntoTree() | 2714 void RenderObject::insertedIntoTree() |
| 2715 { | 2715 { |
| 2716 // FIXME: We should ASSERT(isRooted()) here but generated content makes some
out-of-order insertion. | 2716 // FIXME: We should ASSERT(isRooted()) here but generated content makes some
out-of-order insertion. |
| 2717 | 2717 |
| 2718 // Keep our layer hierarchy updated. Optimize for the common case where we d
on't have any children | 2718 // Keep our layer hierarchy updated. Optimize for the common case where we d
on't have any children |
| 2719 // and don't have a layer attached to ourselves. | 2719 // and don't have a layer attached to ourselves. |
| 2720 RenderLayer* layer = 0; | 2720 RenderLayer* layer = 0; |
| 2721 if (firstChild() || hasLayer()) { | 2721 if (slowFirstChild() || hasLayer()) { |
| 2722 layer = parent()->enclosingLayer(); | 2722 layer = parent()->enclosingLayer(); |
| 2723 addLayers(layer); | 2723 addLayers(layer); |
| 2724 } | 2724 } |
| 2725 | 2725 |
| 2726 // If |this| is visible but this object was not, tell the layer it has some
visible content | 2726 // If |this| is visible but this object was not, tell the layer it has some
visible content |
| 2727 // that needs to be drawn and layer visibility optimization can't be used | 2727 // that needs to be drawn and layer visibility optimization can't be used |
| 2728 if (parent()->style()->visibility() != VISIBLE && style()->visibility() == V
ISIBLE && !hasLayer()) { | 2728 if (parent()->style()->visibility() != VISIBLE && style()->visibility() == V
ISIBLE && !hasLayer()) { |
| 2729 if (!layer) | 2729 if (!layer) |
| 2730 layer = parent()->enclosingLayer(); | 2730 layer = parent()->enclosingLayer(); |
| 2731 if (layer) | 2731 if (layer) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2742 | 2742 |
| 2743 // If we remove a visible child from an invisible parent, we don't know the
layer visibility any more. | 2743 // If we remove a visible child from an invisible parent, we don't know the
layer visibility any more. |
| 2744 RenderLayer* layer = 0; | 2744 RenderLayer* layer = 0; |
| 2745 if (parent()->style()->visibility() != VISIBLE && style()->visibility() == V
ISIBLE && !hasLayer()) { | 2745 if (parent()->style()->visibility() != VISIBLE && style()->visibility() == V
ISIBLE && !hasLayer()) { |
| 2746 layer = parent()->enclosingLayer(); | 2746 layer = parent()->enclosingLayer(); |
| 2747 if (layer) | 2747 if (layer) |
| 2748 layer->dirtyVisibleContentStatus(); | 2748 layer->dirtyVisibleContentStatus(); |
| 2749 } | 2749 } |
| 2750 | 2750 |
| 2751 // Keep our layer hierarchy updated. | 2751 // Keep our layer hierarchy updated. |
| 2752 if (firstChild() || hasLayer()) { | 2752 if (slowFirstChild() || hasLayer()) { |
| 2753 if (!layer) | 2753 if (!layer) |
| 2754 layer = parent()->enclosingLayer(); | 2754 layer = parent()->enclosingLayer(); |
| 2755 removeLayers(layer); | 2755 removeLayers(layer); |
| 2756 } | 2756 } |
| 2757 | 2757 |
| 2758 if (isOutOfFlowPositioned() && parent()->childrenInline()) | 2758 if (isOutOfFlowPositioned() && parent()->childrenInline()) |
| 2759 parent()->dirtyLinesFromChangedChild(this); | 2759 parent()->dirtyLinesFromChangedChild(this); |
| 2760 | 2760 |
| 2761 removeFromRenderFlowThread(); | 2761 removeFromRenderFlowThread(); |
| 2762 | 2762 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2798 RenderObject* destroyRoot = this; | 2798 RenderObject* destroyRoot = this; |
| 2799 for (RenderObject* destroyRootParent = destroyRoot->parent(); destroyRootPar
ent && destroyRootParent->isAnonymous(); destroyRoot = destroyRootParent, destro
yRootParent = destroyRootParent->parent()) { | 2799 for (RenderObject* destroyRootParent = destroyRoot->parent(); destroyRootPar
ent && destroyRootParent->isAnonymous(); destroyRoot = destroyRootParent, destro
yRootParent = destroyRootParent->parent()) { |
| 2800 // Anonymous block continuations are tracked and destroyed elsewhere (se
e the bottom of RenderBlock::removeChild) | 2800 // Anonymous block continuations are tracked and destroyed elsewhere (se
e the bottom of RenderBlock::removeChild) |
| 2801 if (destroyRootParent->isRenderBlock() && toRenderBlock(destroyRootParen
t)->isAnonymousBlockContinuation()) | 2801 if (destroyRootParent->isRenderBlock() && toRenderBlock(destroyRootParen
t)->isAnonymousBlockContinuation()) |
| 2802 break; | 2802 break; |
| 2803 // Render flow threads are tracked by the FlowThreadController, so we ca
n't destroy them here. | 2803 // Render flow threads are tracked by the FlowThreadController, so we ca
n't destroy them here. |
| 2804 // Column spans are tracked elsewhere. | 2804 // Column spans are tracked elsewhere. |
| 2805 if (destroyRootParent->isRenderFlowThread() || destroyRootParent->isAnon
ymousColumnSpanBlock()) | 2805 if (destroyRootParent->isRenderFlowThread() || destroyRootParent->isAnon
ymousColumnSpanBlock()) |
| 2806 break; | 2806 break; |
| 2807 | 2807 |
| 2808 if (destroyRootParent->firstChild() != this || destroyRootParent->lastCh
ild() != this) | 2808 if (destroyRootParent->slowFirstChild() != this || destroyRootParent->sl
owLastChild() != this) |
| 2809 break; | 2809 break; |
| 2810 } | 2810 } |
| 2811 | 2811 |
| 2812 destroyRoot->destroy(); | 2812 destroyRoot->destroy(); |
| 2813 | 2813 |
| 2814 // WARNING: |this| is deleted here. | 2814 // WARNING: |this| is deleted here. |
| 2815 } | 2815 } |
| 2816 | 2816 |
| 2817 void RenderObject::destroy() | 2817 void RenderObject::destroy() |
| 2818 { | 2818 { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2862 void RenderObject::updateDragState(bool dragOn) | 2862 void RenderObject::updateDragState(bool dragOn) |
| 2863 { | 2863 { |
| 2864 bool valueChanged = (dragOn != isDragging()); | 2864 bool valueChanged = (dragOn != isDragging()); |
| 2865 setIsDragging(dragOn); | 2865 setIsDragging(dragOn); |
| 2866 if (valueChanged && node()) { | 2866 if (valueChanged && node()) { |
| 2867 if (node()->isElementNode() && toElement(node())->childrenAffectedByDrag
()) | 2867 if (node()->isElementNode() && toElement(node())->childrenAffectedByDrag
()) |
| 2868 node()->setNeedsStyleRecalc(SubtreeStyleChange); | 2868 node()->setNeedsStyleRecalc(SubtreeStyleChange); |
| 2869 else if (style()->affectedByDrag()) | 2869 else if (style()->affectedByDrag()) |
| 2870 node()->setNeedsStyleRecalc(LocalStyleChange); | 2870 node()->setNeedsStyleRecalc(LocalStyleChange); |
| 2871 } | 2871 } |
| 2872 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()) | 2872 for (RenderObject* curr = slowFirstChild(); curr; curr = curr->nextSibling()
) |
| 2873 curr->updateDragState(dragOn); | 2873 curr->updateDragState(dragOn); |
| 2874 } | 2874 } |
| 2875 | 2875 |
| 2876 CompositingState RenderObject::compositingState() const | 2876 CompositingState RenderObject::compositingState() const |
| 2877 { | 2877 { |
| 2878 return hasLayer() ? toRenderLayerModelObject(this)->layer()->compositingStat
e() : NotComposited; | 2878 return hasLayer() ? toRenderLayerModelObject(this)->layer()->compositingStat
e() : NotComposited; |
| 2879 } | 2879 } |
| 2880 | 2880 |
| 2881 CompositingReasons RenderObject::additionalCompositingReasons(CompositingTrigger
Flags) const | 2881 CompositingReasons RenderObject::additionalCompositingReasons(CompositingTrigger
Flags) const |
| 2882 { | 2882 { |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3171 } | 3171 } |
| 3172 | 3172 |
| 3173 void RenderObject::collectAnnotatedRegions(Vector<AnnotatedRegionValue>& regions
) | 3173 void RenderObject::collectAnnotatedRegions(Vector<AnnotatedRegionValue>& regions
) |
| 3174 { | 3174 { |
| 3175 // RenderTexts don't have their own style, they just use their parent's styl
e, | 3175 // RenderTexts don't have their own style, they just use their parent's styl
e, |
| 3176 // so we don't want to include them. | 3176 // so we don't want to include them. |
| 3177 if (isText()) | 3177 if (isText()) |
| 3178 return; | 3178 return; |
| 3179 | 3179 |
| 3180 addAnnotatedRegions(regions); | 3180 addAnnotatedRegions(regions); |
| 3181 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling()) | 3181 for (RenderObject* curr = slowFirstChild(); curr; curr = curr->nextSibling()
) |
| 3182 curr->collectAnnotatedRegions(regions); | 3182 curr->collectAnnotatedRegions(regions); |
| 3183 } | 3183 } |
| 3184 | 3184 |
| 3185 bool RenderObject::willRenderImage(ImageResource*) | 3185 bool RenderObject::willRenderImage(ImageResource*) |
| 3186 { | 3186 { |
| 3187 // Without visibility we won't render (and therefore don't care about animat
ion). | 3187 // Without visibility we won't render (and therefore don't care about animat
ion). |
| 3188 if (style()->visibility() != VISIBLE) | 3188 if (style()->visibility() != VISIBLE) |
| 3189 return false; | 3189 return false; |
| 3190 | 3190 |
| 3191 // We will not render a new image when Active DOM is suspended | 3191 // We will not render a new image when Active DOM is suspended |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3478 { | 3478 { |
| 3479 if (object1) { | 3479 if (object1) { |
| 3480 const WebCore::RenderObject* root = object1; | 3480 const WebCore::RenderObject* root = object1; |
| 3481 while (root->parent()) | 3481 while (root->parent()) |
| 3482 root = root->parent(); | 3482 root = root->parent(); |
| 3483 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); | 3483 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); |
| 3484 } | 3484 } |
| 3485 } | 3485 } |
| 3486 | 3486 |
| 3487 #endif | 3487 #endif |
| OLD | NEW |