Chromium Code Reviews| 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 728 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 739 // A positioned object has no effect on the min/max width of its con taining block ever. | 739 // A positioned object has no effect on the min/max width of its con taining block ever. |
| 740 // We can optimize this case and not go up any further. | 740 // We can optimize this case and not go up any further. |
| 741 break; | 741 break; |
| 742 o = container; | 742 o = container; |
| 743 } | 743 } |
| 744 } | 744 } |
| 745 | 745 |
| 746 void RenderObject::setLayerNeedsFullRepaint() | 746 void RenderObject::setLayerNeedsFullRepaint() |
| 747 { | 747 { |
| 748 ASSERT(hasLayer()); | 748 ASSERT(hasLayer()); |
| 749 toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(NeedsF ullRepaint); | 749 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
| 750 setShouldDoFullRepaintAfterLayout(true); | |
| 751 else | |
| 752 toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(Ne edsFullRepaint); | |
| 750 } | 753 } |
| 751 | 754 |
| 752 void RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout() | 755 void RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout() |
| 753 { | 756 { |
| 754 ASSERT(hasLayer()); | 757 ASSERT(hasLayer()); |
| 755 toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(NeedsF ullRepaintForPositionedMovementLayout); | 758 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
| 759 setShouldDoFullRepaintAfterLayout(true); | |
|
Julien - ping for review
2014/03/04 18:22:10
This is wrong :-/
It's OK to put a FIXME but this
dsinclair
2014/03/04 19:21:52
Done.
Had to store another flag in this case so w
| |
| 760 else | |
| 761 toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(Ne edsFullRepaintForPositionedMovementLayout); | |
| 756 } | 762 } |
| 757 | 763 |
| 758 RenderBlock* RenderObject::containerForFixedPosition(const RenderLayerModelObjec t* repaintContainer, bool* repaintContainerSkipped) const | 764 RenderBlock* RenderObject::containerForFixedPosition(const RenderLayerModelObjec t* repaintContainer, bool* repaintContainerSkipped) const |
| 759 { | 765 { |
| 760 ASSERT(!repaintContainerSkipped || !*repaintContainerSkipped); | 766 ASSERT(!repaintContainerSkipped || !*repaintContainerSkipped); |
| 761 ASSERT(!isText()); | 767 ASSERT(!isText()); |
| 762 ASSERT(style()->position() == FixedPosition); | 768 ASSERT(style()->position() == FixedPosition); |
| 763 | 769 |
| 764 RenderObject* ancestor = parent(); | 770 RenderObject* ancestor = parent(); |
| 765 for (; ancestor && !ancestor->canContainFixedPositionObjects(); ancestor = a ncestor->parent()) { | 771 for (; ancestor && !ancestor->canContainFixedPositionObjects(); ancestor = a ncestor->parent()) { |
| (...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1593 } | 1599 } |
| 1594 return false; | 1600 return false; |
| 1595 } | 1601 } |
| 1596 | 1602 |
| 1597 void RenderObject::repaintOverflow() | 1603 void RenderObject::repaintOverflow() |
| 1598 { | 1604 { |
| 1599 } | 1605 } |
| 1600 | 1606 |
| 1601 bool RenderObject::checkForRepaint() const | 1607 bool RenderObject::checkForRepaint() const |
| 1602 { | 1608 { |
| 1609 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) | |
| 1610 return !document().view()->needsFullRepaint() && everHadLayout(); | |
|
Julien - ping for review
2014/03/04 18:22:10
FYI I think we shouldn't check everHadLayout() her
dsinclair
2014/03/04 19:21:52
Ack.
| |
| 1611 | |
| 1603 return !document().view()->needsFullRepaint() && !hasLayer() && everHadLayou t(); | 1612 return !document().view()->needsFullRepaint() && !hasLayer() && everHadLayou t(); |
| 1604 } | 1613 } |
| 1605 | 1614 |
| 1606 bool RenderObject::checkForRepaintDuringLayout() const | 1615 bool RenderObject::checkForRepaintDuringLayout() const |
| 1607 { | 1616 { |
| 1608 return !RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && checkForRepai nt(); | 1617 return !RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && checkForRepai nt(); |
| 1609 } | 1618 } |
| 1610 | 1619 |
| 1611 LayoutRect RenderObject::rectWithOutlineForRepaint(const RenderLayerModelObject* repaintContainer, LayoutUnit outlineWidth) const | 1620 LayoutRect RenderObject::rectWithOutlineForRepaint(const RenderLayerModelObject* repaintContainer, LayoutUnit outlineWidth) const |
| 1612 { | 1621 { |
| (...skipping 1694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3307 { | 3316 { |
| 3308 ASSERT_NOT_REACHED(); | 3317 ASSERT_NOT_REACHED(); |
| 3309 return false; | 3318 return false; |
| 3310 } | 3319 } |
| 3311 | 3320 |
| 3312 bool RenderObject::isRelayoutBoundaryForInspector() const | 3321 bool RenderObject::isRelayoutBoundaryForInspector() const |
| 3313 { | 3322 { |
| 3314 return objectIsRelayoutBoundary(this); | 3323 return objectIsRelayoutBoundary(this); |
| 3315 } | 3324 } |
| 3316 | 3325 |
| 3326 const LayoutRect RenderObject::newOutlineRect() | |
| 3327 { | |
| 3328 ASSERT(hasOutline()); | |
|
Julien - ping for review
2014/03/04 18:22:10
The outline rectangle includes the box shadow too
dsinclair
2014/03/04 19:21:52
So, then the shadow isn't included in the repaint
Julien - ping for review
2014/03/07 18:26:38
It is actually included in the repaint rect (see a
| |
| 3329 | |
| 3330 OutlineRects* outlineRects = view()->outlineRects(); | |
| 3331 OutlineRects::iterator it = outlineRects->find(this); | |
| 3332 if (it == outlineRects->end()) | |
| 3333 return outlineBoundsForRepaint(containerForRepaint()); | |
| 3334 return it->value.newOutlineRect; | |
| 3335 } | |
| 3336 | |
| 3337 void RenderObject::setNewOutlineRect(const LayoutRect& rect) | |
| 3338 { | |
| 3339 ASSERT(hasOutline()); | |
| 3340 | |
| 3341 OutlineRects* outlineRects = view()->outlineRects(); | |
| 3342 OutlineRects::iterator it = outlineRects->find(this); | |
| 3343 if (it == outlineRects->end()) | |
| 3344 outlineRects->set(this, OutlineRectInfo()); | |
| 3345 | |
| 3346 outlineRects->get(this).newOutlineRect = rect; | |
| 3347 } | |
| 3348 | |
| 3349 const LayoutRect RenderObject::oldOutlineRect() | |
|
Julien - ping for review
2014/03/04 18:22:10
I don't see the point in making a copy of LayoutRe
dsinclair
2014/03/04 19:21:52
Done.
| |
| 3350 { | |
| 3351 ASSERT(hasOutline()); | |
| 3352 | |
| 3353 OutlineRects* outlineRects = view()->outlineRects(); | |
| 3354 OutlineRects::iterator it = outlineRects->find(this); | |
| 3355 if (it == outlineRects->end()) | |
| 3356 return LayoutRect(); | |
| 3357 return it->value.oldOutlineRect; | |
| 3358 } | |
| 3359 | |
| 3360 void RenderObject::setOldOutlineRect(const LayoutRect& rect) | |
| 3361 { | |
| 3362 ASSERT(hasOutline()); | |
| 3363 | |
| 3364 OutlineRects* outlineRects = view()->outlineRects(); | |
| 3365 OutlineRects::iterator it = outlineRects->find(this); | |
| 3366 if (it == outlineRects->end()) | |
| 3367 outlineRects->set(this, OutlineRectInfo()); | |
| 3368 outlineRects->get(this).oldOutlineRect = rect; | |
| 3369 } | |
| 3370 | |
| 3371 void RenderObject::clearRepaintState() | |
| 3372 { | |
| 3373 setShouldDoFullRepaintAfterLayout(false); | |
| 3374 setShouldDoFullRepaintIfSelfPaintingLayer(false); | |
| 3375 setShouldRepaintOverflowIfNeeded(false); | |
| 3376 setLayoutDidGetCalled(false); | |
| 3377 | |
| 3378 OutlineRects* outlineRects = view()->outlineRects(); | |
| 3379 OutlineRects::iterator it = outlineRects->find(this); | |
| 3380 if (it != outlineRects->end()) | |
| 3381 outlineRects->remove(it); | |
| 3382 } | |
| 3383 | |
| 3317 } // namespace WebCore | 3384 } // namespace WebCore |
| 3318 | 3385 |
| 3319 #ifndef NDEBUG | 3386 #ifndef NDEBUG |
| 3320 | 3387 |
| 3321 void showTree(const WebCore::RenderObject* object) | 3388 void showTree(const WebCore::RenderObject* object) |
| 3322 { | 3389 { |
| 3323 if (object) | 3390 if (object) |
| 3324 object->showTreeForThis(); | 3391 object->showTreeForThis(); |
| 3325 } | 3392 } |
| 3326 | 3393 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 3339 { | 3406 { |
| 3340 if (object1) { | 3407 if (object1) { |
| 3341 const WebCore::RenderObject* root = object1; | 3408 const WebCore::RenderObject* root = object1; |
| 3342 while (root->parent()) | 3409 while (root->parent()) |
| 3343 root = root->parent(); | 3410 root = root->parent(); |
| 3344 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); | 3411 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); |
| 3345 } | 3412 } |
| 3346 } | 3413 } |
| 3347 | 3414 |
| 3348 #endif | 3415 #endif |
| OLD | NEW |