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

Side by Side Diff: Source/core/rendering/RenderObject.cpp

Issue 332543002: Rename Repaint to Paint Invalidation Part 4 (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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/rendering/RenderObject.h ('k') | Source/core/rendering/RenderObjectChildList.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) 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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 #endif 119 #endif
120 120
121 struct SameSizeAsRenderObject { 121 struct SameSizeAsRenderObject {
122 virtual ~SameSizeAsRenderObject() { } // Allocate vtable pointer. 122 virtual ~SameSizeAsRenderObject() { } // Allocate vtable pointer.
123 void* pointers[5]; 123 void* pointers[5];
124 #ifndef NDEBUG 124 #ifndef NDEBUG
125 unsigned m_debugBitfields : 2; 125 unsigned m_debugBitfields : 2;
126 #endif 126 #endif
127 unsigned m_bitfields; 127 unsigned m_bitfields;
128 unsigned m_bitfields2; 128 unsigned m_bitfields2;
129 LayoutRect rect; // Stores the previous repaint rect. 129 LayoutRect rect; // Stores the previous paint invalidation rect.
130 LayoutPoint position; // Stores the previous position from the repaint conta iner. 130 LayoutPoint position; // Stores the previous position from the paint invalid ation container.
131 }; 131 };
132 132
133 COMPILE_ASSERT(sizeof(RenderObject) == sizeof(SameSizeAsRenderObject), RenderObj ect_should_stay_small); 133 COMPILE_ASSERT(sizeof(RenderObject) == sizeof(SameSizeAsRenderObject), RenderObj ect_should_stay_small);
134 134
135 bool RenderObject::s_affectsParentBlock = false; 135 bool RenderObject::s_affectsParentBlock = false;
136 136
137 void* RenderObject::operator new(size_t sz) 137 void* RenderObject::operator new(size_t sz)
138 { 138 {
139 ASSERT(isMainThread()); 139 ASSERT(isMainThread());
140 return partitionAlloc(Partitions::getRenderingPartition(), sz); 140 return partitionAlloc(Partitions::getRenderingPartition(), sz);
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 742
743 o->m_bitfields.setPreferredLogicalWidthsDirty(true); 743 o->m_bitfields.setPreferredLogicalWidthsDirty(true);
744 if (o->style()->hasOutOfFlowPosition()) 744 if (o->style()->hasOutOfFlowPosition())
745 // A positioned object has no effect on the min/max width of its con taining block ever. 745 // A positioned object has no effect on the min/max width of its con taining block ever.
746 // We can optimize this case and not go up any further. 746 // We can optimize this case and not go up any further.
747 break; 747 break;
748 o = container; 748 o = container;
749 } 749 }
750 } 750 }
751 751
752 void RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout() 752 void RenderObject::setLayerNeedsFullPaintInvalidationForPositionedMovementLayout ()
753 { 753 {
754 ASSERT(hasLayer()); 754 ASSERT(hasLayer());
755 toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(NeedsF ullRepaintForPositionedMovementLayout); 755 toRenderLayerModelObject(this)->layer()->repainter().setRepaintStatus(NeedsF ullRepaintForPositionedMovementLayout);
756 } 756 }
757 757
758 RenderBlock* RenderObject::containerForFixedPosition(const RenderLayerModelObjec t* repaintContainer, bool* repaintContainerSkipped) const 758 RenderBlock* RenderObject::containerForFixedPosition(const RenderLayerModelObjec t* paintInvalidationContainer, bool* paintInvalidationContainerSkipped) const
759 { 759 {
760 ASSERT(!repaintContainerSkipped || !*repaintContainerSkipped); 760 ASSERT(!paintInvalidationContainerSkipped || !*paintInvalidationContainerSki pped);
761 ASSERT(!isText()); 761 ASSERT(!isText());
762 ASSERT(style()->position() == FixedPosition); 762 ASSERT(style()->position() == FixedPosition);
763 763
764 RenderObject* ancestor = parent(); 764 RenderObject* ancestor = parent();
765 for (; ancestor && !ancestor->canContainFixedPositionObjects(); ancestor = a ncestor->parent()) { 765 for (; ancestor && !ancestor->canContainFixedPositionObjects(); ancestor = a ncestor->parent()) {
766 if (repaintContainerSkipped && ancestor == repaintContainer) 766 if (paintInvalidationContainerSkipped && ancestor == paintInvalidationCo ntainer)
767 *repaintContainerSkipped = true; 767 *paintInvalidationContainerSkipped = true;
768 } 768 }
769 769
770 ASSERT(!ancestor || !ancestor->isAnonymousBlock()); 770 ASSERT(!ancestor || !ancestor->isAnonymousBlock());
771 return toRenderBlock(ancestor); 771 return toRenderBlock(ancestor);
772 } 772 }
773 773
774 RenderBlock* RenderObject::containingBlock() const 774 RenderBlock* RenderObject::containingBlock() const
775 { 775 {
776 RenderObject* o = parent(); 776 RenderObject* o = parent();
777 if (!o && isRenderScrollbarPart()) 777 if (!o && isRenderScrollbarPart())
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 } 839 }
840 840
841 bool RenderObject::canRenderBorderImage() const 841 bool RenderObject::canRenderBorderImage() const
842 { 842 {
843 ASSERT(style()->hasBorder()); 843 ASSERT(style()->hasBorder());
844 844
845 StyleImage* borderImage = style()->borderImage().image(); 845 StyleImage* borderImage = style()->borderImage().image();
846 return borderImage && borderImage->canRender(*this, style()->effectiveZoom() ) && borderImage->isLoaded(); 846 return borderImage && borderImage->canRender(*this, style()->effectiveZoom() ) && borderImage->isLoaded();
847 } 847 }
848 848
849 bool RenderObject::mustRepaintFillLayersOnWidthChange(const FillLayer& layer) co nst 849 bool RenderObject::mustInvalidateFillLayersPaintOnWidthChange(const FillLayer& l ayer) const
850 { 850 {
851 // Nobody will use multiple layers without wanting fancy positioning. 851 // Nobody will use multiple layers without wanting fancy positioning.
852 if (layer.next()) 852 if (layer.next())
853 return true; 853 return true;
854 854
855 // Make sure we have a valid image. 855 // Make sure we have a valid image.
856 StyleImage* img = layer.image(); 856 StyleImage* img = layer.image();
857 if (!img || !img->canRender(*this, style()->effectiveZoom())) 857 if (!img || !img->canRender(*this, style()->effectiveZoom()))
858 return false; 858 return false;
859 859
(...skipping 16 matching lines...) Expand all
876 return true; 876 return true;
877 if (img->isGeneratedImage() && layer.sizeLength().width().isAuto()) 877 if (img->isGeneratedImage() && layer.sizeLength().width().isAuto())
878 return true; 878 return true;
879 } else if (img->usesImageContainerSize()) { 879 } else if (img->usesImageContainerSize()) {
880 return true; 880 return true;
881 } 881 }
882 882
883 return false; 883 return false;
884 } 884 }
885 885
886 bool RenderObject::mustRepaintFillLayersOnHeightChange(const FillLayer& layer) c onst 886 bool RenderObject::mustInvalidateFillLayersPaintOnHeightChange(const FillLayer& layer) const
887 { 887 {
888 // Nobody will use multiple layers without wanting fancy positioning. 888 // Nobody will use multiple layers without wanting fancy positioning.
889 if (layer.next()) 889 if (layer.next())
890 return true; 890 return true;
891 891
892 // Make sure we have a valid image. 892 // Make sure we have a valid image.
893 StyleImage* img = layer.image(); 893 StyleImage* img = layer.image();
894 if (!img || !img->canRender(*this, style()->effectiveZoom())) 894 if (!img || !img->canRender(*this, style()->effectiveZoom()))
895 return false; 895 return false;
896 896
(...skipping 16 matching lines...) Expand all
913 return true; 913 return true;
914 if (img->isGeneratedImage() && layer.sizeLength().height().isAuto()) 914 if (img->isGeneratedImage() && layer.sizeLength().height().isAuto())
915 return true; 915 return true;
916 } else if (img->usesImageContainerSize()) { 916 } else if (img->usesImageContainerSize()) {
917 return true; 917 return true;
918 } 918 }
919 919
920 return false; 920 return false;
921 } 921 }
922 922
923 bool RenderObject::mustRepaintBackgroundOrBorderOnWidthChange() const 923 bool RenderObject::mustInvalidateBackgroundOrBorderPaintOnWidthChange() const
924 { 924 {
925 if (hasMask() && mustRepaintFillLayersOnWidthChange(*style()->maskLayers())) 925 if (hasMask() && mustInvalidateFillLayersPaintOnWidthChange(*style()->maskLa yers()))
926 return true; 926 return true;
927 927
928 // If we don't have a background/border/mask, then nothing to do. 928 // If we don't have a background/border/mask, then nothing to do.
929 if (!hasBoxDecorations()) 929 if (!hasBoxDecorations())
930 return false; 930 return false;
931 931
932 if (mustRepaintFillLayersOnWidthChange(*style()->backgroundLayers())) 932 if (mustInvalidateFillLayersPaintOnWidthChange(*style()->backgroundLayers()) )
933 return true; 933 return true;
934 934
935 // Our fill layers are ok. Let's check border. 935 // Our fill layers are ok. Let's check border.
936 if (style()->hasBorder() && canRenderBorderImage()) 936 if (style()->hasBorder() && canRenderBorderImage())
937 return true; 937 return true;
938 938
939 return false; 939 return false;
940 } 940 }
941 941
942 bool RenderObject::mustRepaintBackgroundOrBorderOnHeightChange() const 942 bool RenderObject::mustInvalidateBackgroundOrBorderPaintOnHeightChange() const
943 { 943 {
944 if (hasMask() && mustRepaintFillLayersOnHeightChange(*style()->maskLayers()) ) 944 if (hasMask() && mustInvalidateFillLayersPaintOnHeightChange(*style()->maskL ayers()))
945 return true; 945 return true;
946 946
947 // If we don't have a background/border/mask, then nothing to do. 947 // If we don't have a background/border/mask, then nothing to do.
948 if (!hasBoxDecorations()) 948 if (!hasBoxDecorations())
949 return false; 949 return false;
950 950
951 if (mustRepaintFillLayersOnHeightChange(*style()->backgroundLayers())) 951 if (mustInvalidateFillLayersPaintOnHeightChange(*style()->backgroundLayers() ))
952 return true; 952 return true;
953 953
954 // Our fill layers are ok. Let's check border. 954 // Our fill layers are ok. Let's check border.
955 if (style()->hasBorder() && canRenderBorderImage()) 955 if (style()->hasBorder() && canRenderBorderImage())
956 return true; 956 return true;
957 957
958 return false; 958 return false;
959 } 959 }
960 960
961 void RenderObject::drawLineForBoxSide(GraphicsContext* graphicsContext, int x1, int y1, int x2, int y2, 961 void RenderObject::drawLineForBoxSide(GraphicsContext* graphicsContext, int x1, int y1, int x2, int y2,
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 pos.move(box->locationOffset()); // FIXME: Snap offsets? crbug.c om/350474 1330 pos.move(box->locationOffset()); // FIXME: Snap offsets? crbug.c om/350474
1331 box->addFocusRingRects(rects, flooredIntPoint(pos), paintContain er); 1331 box->addFocusRingRects(rects, flooredIntPoint(pos), paintContain er);
1332 } 1332 }
1333 } else { 1333 } else {
1334 current->addFocusRingRects(rects, additionalOffset, paintContainer); 1334 current->addFocusRingRects(rects, additionalOffset, paintContainer);
1335 } 1335 }
1336 } 1336 }
1337 } 1337 }
1338 1338
1339 // FIXME: In repaint-after-layout, we should be able to change the logic to remo ve the need for this function. See crbug.com/368416. 1339 // FIXME: In repaint-after-layout, we should be able to change the logic to remo ve the need for this function. See crbug.com/368416.
1340 LayoutPoint RenderObject::positionFromRepaintContainer(const RenderLayerModelObj ect* repaintContainer) const 1340 LayoutPoint RenderObject::positionFromPaintInvalidationContainer(const RenderLay erModelObject* paintInvalidationContainer) const
1341 { 1341 {
1342 // FIXME: This assert should be re-enabled when we move repaint to after com positing update. crbug.com/360286 1342 // FIXME: This assert should be re-enabled when we move paint invalidation t o after compositing update. crbug.com/360286
1343 // ASSERT(containerForRepaint() == repaintContainer); 1343 // ASSERT(containerForPaintInvalidation() == paintInvalidationContainer);
1344 1344
1345 LayoutPoint offset = isBox() ? toRenderBox(this)->location() : LayoutPoint() ; 1345 LayoutPoint offset = isBox() ? toRenderBox(this)->location() : LayoutPoint() ;
1346 if (repaintContainer == this) 1346 if (paintInvalidationContainer == this)
1347 return offset; 1347 return offset;
1348 1348
1349 return roundedIntPoint(localToContainerPoint(offset, repaintContainer)); 1349 return roundedIntPoint(localToContainerPoint(offset, paintInvalidationContai ner));
1350 } 1350 }
1351 1351
1352 IntRect RenderObject::absoluteBoundingBoxRect() const 1352 IntRect RenderObject::absoluteBoundingBoxRect() const
1353 { 1353 {
1354 Vector<FloatQuad> quads; 1354 Vector<FloatQuad> quads;
1355 absoluteQuads(quads); 1355 absoluteQuads(quads);
1356 1356
1357 size_t n = quads.size(); 1357 size_t n = quads.size();
1358 if (!n) 1358 if (!n)
1359 return IntRect(); 1359 return IntRect();
(...skipping 16 matching lines...) Expand all
1376 1376
1377 LayoutRect result = rects[0]; 1377 LayoutRect result = rects[0];
1378 for (size_t i = 1; i < n; ++i) 1378 for (size_t i = 1; i < n; ++i)
1379 result.unite(rects[i]); 1379 result.unite(rects[i]);
1380 return pixelSnappedIntRect(result); 1380 return pixelSnappedIntRect(result);
1381 } 1381 }
1382 1382
1383 void RenderObject::absoluteFocusRingQuads(Vector<FloatQuad>& quads) 1383 void RenderObject::absoluteFocusRingQuads(Vector<FloatQuad>& quads)
1384 { 1384 {
1385 Vector<IntRect> rects; 1385 Vector<IntRect> rects;
1386 const RenderLayerModelObject* container = containerForRepaint(); 1386 const RenderLayerModelObject* container = containerForPaintInvalidation();
1387 addFocusRingRects(rects, LayoutPoint(localToContainerPoint(FloatPoint(), con tainer)), container); 1387 addFocusRingRects(rects, LayoutPoint(localToContainerPoint(FloatPoint(), con tainer)), container);
1388 size_t count = rects.size(); 1388 size_t count = rects.size();
1389 for (size_t i = 0; i < count; ++i) 1389 for (size_t i = 0; i < count; ++i)
1390 quads.append(container->localToAbsoluteQuad(FloatQuad(rects[i]))); 1390 quads.append(container->localToAbsoluteQuad(FloatQuad(rects[i])));
1391 } 1391 }
1392 1392
1393 FloatRect RenderObject::absoluteBoundingBoxRectForRange(const Range* range) 1393 FloatRect RenderObject::absoluteBoundingBoxRectForRange(const Range* range)
1394 { 1394 {
1395 if (!range || !range->startContainer()) 1395 if (!range || !range->startContainer())
1396 return FloatRect(); 1396 return FloatRect();
(...skipping 24 matching lines...) Expand all
1421 topLevelRect = result; 1421 topLevelRect = result;
1422 for (RenderObject* current = slowFirstChild(); current; current = current->n extSibling()) 1422 for (RenderObject* current = slowFirstChild(); current; current = current->n extSibling())
1423 current->addAbsoluteRectForLayer(result); 1423 current->addAbsoluteRectForLayer(result);
1424 return result; 1424 return result;
1425 } 1425 }
1426 1426
1427 void RenderObject::paint(PaintInfo&, const LayoutPoint&) 1427 void RenderObject::paint(PaintInfo&, const LayoutPoint&)
1428 { 1428 {
1429 } 1429 }
1430 1430
1431 const RenderLayerModelObject* RenderObject::containerForRepaint() const 1431 const RenderLayerModelObject* RenderObject::containerForPaintInvalidation() cons t
1432 { 1432 {
1433 if (!isRooted()) 1433 if (!isRooted())
1434 return 0; 1434 return 0;
1435 1435
1436 return adjustCompositedContainerForSpecialAncestors(enclosingCompositedConta iner()); 1436 return adjustCompositedContainerForSpecialAncestors(enclosingCompositedConta iner());
1437 } 1437 }
1438 1438
1439 const RenderLayerModelObject* RenderObject::enclosingCompositedContainer() const 1439 const RenderLayerModelObject* RenderObject::enclosingCompositedContainer() const
1440 { 1440 {
1441 RenderLayerModelObject* container = 0; 1441 RenderLayerModelObject* container = 0;
1442 if (view()->usesCompositing()) { 1442 if (view()->usesCompositing()) {
1443 // FIXME: CompositingState is not necessarily up to date for many caller s of this function. 1443 // FIXME: CompositingState is not necessarily up to date for many caller s of this function.
1444 DisableCompositingQueryAsserts disabler; 1444 DisableCompositingQueryAsserts disabler;
1445 1445
1446 if (RenderLayer* compositingLayer = enclosingLayer()->enclosingCompositi ngLayerForRepaint()) 1446 if (RenderLayer* compositingLayer = enclosingLayer()->enclosingCompositi ngLayerForRepaint())
1447 container = compositingLayer->renderer(); 1447 container = compositingLayer->renderer();
1448 } 1448 }
1449 return container; 1449 return container;
1450 } 1450 }
1451 1451
1452 const RenderLayerModelObject* RenderObject::adjustCompositedContainerForSpecialA ncestors(const RenderLayerModelObject* repaintContainer) const 1452 const RenderLayerModelObject* RenderObject::adjustCompositedContainerForSpecialA ncestors(const RenderLayerModelObject* paintInvalidationContainer) const
1453 { 1453 {
1454 1454
1455 if (document().view()->hasSoftwareFilters()) { 1455 if (document().view()->hasSoftwareFilters()) {
1456 if (RenderLayer* enclosingFilterLayer = enclosingLayer()->enclosingFilte rLayer()) 1456 if (RenderLayer* enclosingFilterLayer = enclosingLayer()->enclosingFilte rLayer())
1457 return enclosingFilterLayer->renderer(); 1457 return enclosingFilterLayer->renderer();
1458 } 1458 }
1459 1459
1460 // If we have a flow thread, then we need to do individual repaints within t he RenderRegions instead. 1460 // If we have a flow thread, then we need to do individual paint invalidatio ns within the RenderRegions instead.
1461 // Return the flow thread as a repaint container in order to create a chokep oint that allows us to change 1461 // Return the flow thread as a paint invalidation container in order to crea te a chokepoint that allows us to change
1462 // repainting to do individual region repaints. 1462 // paint invalidation to do individual region paint invalidations.
1463 if (RenderFlowThread* parentRenderFlowThread = flowThreadContainingBlock()) { 1463 if (RenderFlowThread* parentRenderFlowThread = flowThreadContainingBlock()) {
1464 // If we have already found a repaint container then we will repaint int o that container only if it is part of the same 1464 // If we have already found a paint invalidation container then we will invalidate paints in that container only if it is part of the same
1465 // flow thread. Otherwise we will need to catch the repaint call and sen d it to the flow thread. 1465 // flow thread. Otherwise we will need to catch the paint invalidation c all and send it to the flow thread.
1466 if (!repaintContainer || repaintContainer->flowThreadContainingBlock() ! = parentRenderFlowThread) 1466 if (!paintInvalidationContainer || paintInvalidationContainer->flowThrea dContainingBlock() != parentRenderFlowThread)
1467 repaintContainer = parentRenderFlowThread; 1467 paintInvalidationContainer = parentRenderFlowThread;
1468 } 1468 }
1469 return repaintContainer ? repaintContainer : view(); 1469 return paintInvalidationContainer ? paintInvalidationContainer : view();
1470 } 1470 }
1471 1471
1472 bool RenderObject::isRepaintContainer() const 1472 bool RenderObject::isPaintInvalidationContainer() const
1473 { 1473 {
1474 return hasLayer() && toRenderLayerModelObject(this)->layer()->isRepaintConta iner(); 1474 return hasLayer() && toRenderLayerModelObject(this)->layer()->isRepaintConta iner();
1475 } 1475 }
1476 1476
1477 template<typename T> PassRefPtr<JSONValue> jsonObjectForRect(const T& rect) 1477 template<typename T> PassRefPtr<JSONValue> jsonObjectForRect(const T& rect)
1478 { 1478 {
1479 RefPtr<JSONObject> object = JSONObject::create(); 1479 RefPtr<JSONObject> object = JSONObject::create();
1480 object->setNumber("x", rect.x()); 1480 object->setNumber("x", rect.x());
1481 object->setNumber("y", rect.y()); 1481 object->setNumber("y", rect.y());
1482 object->setNumber("width", rect.width()); 1482 object->setNumber("width", rect.width());
1483 object->setNumber("height", rect.height()); 1483 object->setNumber("height", rect.height());
1484 return object.release(); 1484 return object.release();
1485 } 1485 }
1486 1486
1487 static PassRefPtr<JSONValue> jsonObjectForRepaintInfo(const IntRect& rect, const String& invalidationReason) 1487 static PassRefPtr<JSONValue> jsonObjectForPaintInvalidationInfo(const IntRect& r ect, const String& invalidationReason)
1488 { 1488 {
1489 RefPtr<JSONObject> object = JSONObject::create(); 1489 RefPtr<JSONObject> object = JSONObject::create();
1490 object->setValue("rect", jsonObjectForRect(rect)); 1490 object->setValue("rect", jsonObjectForRect(rect));
1491 object->setString("invalidation_reason", invalidationReason); 1491 object->setString("invalidation_reason", invalidationReason);
1492 return object.release(); 1492 return object.release();
1493 } 1493 }
1494 1494
1495 LayoutRect RenderObject::computeRepaintRect(const RenderLayerModelObject* repain tContainer) const 1495 LayoutRect RenderObject::computePaintInvalidationRect(const RenderLayerModelObje ct* paintInvalidationContainer) const
1496 { 1496 {
1497 return clippedOverflowRectForRepaint(repaintContainer); 1497 return clippedOverflowRectForPaintInvalidation(paintInvalidationContainer);
1498 } 1498 }
1499 1499
1500 void RenderObject::invalidatePaintUsingContainer(const RenderLayerModelObject* p aintInvalidationContainer, const IntRect& r, InvalidationReason invalidationReas on) const 1500 void RenderObject::invalidatePaintUsingContainer(const RenderLayerModelObject* p aintInvalidationContainer, const IntRect& r, InvalidationReason invalidationReas on) const
1501 { 1501 {
1502 if (r.isEmpty()) 1502 if (r.isEmpty())
1503 return; 1503 return;
1504 1504
1505 // FIXME: This should be an assert, but editing/selection can trigger this c ase to invalidate 1505 // FIXME: This should be an assert, but editing/selection can trigger this c ase to invalidate
1506 // the selection. crbug.com/368140. 1506 // the selection. crbug.com/368140.
1507 if (!isRooted()) 1507 if (!isRooted())
1508 return; 1508 return;
1509 1509
1510 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), "RenderObject: :invalidatePaintUsingContainer()", 1510 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), "RenderObject: :invalidatePaintUsingContainer()",
1511 "object", this->debugName().ascii(), 1511 "object", this->debugName().ascii(),
1512 "info", TracedValue::fromJSONValue(jsonObjectForRepaintInfo(r, invalidat ionReasonToString(invalidationReason)))); 1512 "info", TracedValue::fromJSONValue(jsonObjectForPaintInvalidationInfo(r, invalidationReasonToString(invalidationReason))));
1513 1513
1514 // FIXME: Don't read compositing state here since we do this in the middle o f recalc/layout. 1514 // FIXME: Don't read compositing state here since we do this in the middle o f recalc/layout.
1515 DisableCompositingQueryAsserts disabler; 1515 DisableCompositingQueryAsserts disabler;
1516 if (paintInvalidationContainer->compositingState() == PaintsIntoGroupedBacki ng) { 1516 if (paintInvalidationContainer->compositingState() == PaintsIntoGroupedBacki ng) {
1517 ASSERT(paintInvalidationContainer->groupedMapping()); 1517 ASSERT(paintInvalidationContainer->groupedMapping());
1518 ASSERT(paintInvalidationContainer->layer()); 1518 ASSERT(paintInvalidationContainer->layer());
1519 1519
1520 // Not clean, but if squashing layer does not yet exist here (e.g. paint invalidation coming from within recomputing compositing requirements) 1520 // Not clean, but if squashing layer does not yet exist here (e.g. paint invalidation coming from within recomputing compositing requirements)
1521 // then it's ok to just exit here, since the squashing layer will get in validate when it is newly created. 1521 // then it's ok to just exit here, since the squashing layer will get in validate when it is newly created.
1522 if (!paintInvalidationContainer->groupedMapping()->squashingLayer()) 1522 if (!paintInvalidationContainer->groupedMapping()->squashingLayer())
(...skipping 27 matching lines...) Expand all
1550 { 1550 {
1551 if (!isRooted()) 1551 if (!isRooted())
1552 return; 1552 return;
1553 1553
1554 if (view()->document().printing()) 1554 if (view()->document().printing())
1555 return; // Don't invalidate paints if we're printing. 1555 return; // Don't invalidate paints if we're printing.
1556 1556
1557 // FIXME: really, we're in the paint invalidation phase here, and the follow ing queries are legal. 1557 // FIXME: really, we're in the paint invalidation phase here, and the follow ing queries are legal.
1558 // Until those states are fully fledged, I'll just disable the ASSERTS. 1558 // Until those states are fully fledged, I'll just disable the ASSERTS.
1559 DisableCompositingQueryAsserts disabler; 1559 DisableCompositingQueryAsserts disabler;
1560 const RenderLayerModelObject* paintInvalidationContainer = containerForRepai nt(); 1560 const RenderLayerModelObject* paintInvalidationContainer = containerForPaint Invalidation();
1561 LayoutRect paintInvalidationRect = boundsRectForRepaint(paintInvalidationCon tainer); 1561 LayoutRect paintInvalidationRect = boundsRectForPaintInvalidation(paintInval idationContainer);
1562 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnappedIntRec t(paintInvalidationRect), InvalidationRepaint); 1562 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnappedIntRec t(paintInvalidationRect), InvalidationPaint);
1563 } 1563 }
1564 1564
1565 LayoutRect RenderObject::boundsRectForRepaint(const RenderLayerModelObject* repa intContainer) const 1565 LayoutRect RenderObject::boundsRectForPaintInvalidation(const RenderLayerModelOb ject* paintInvalidationContainer) const
1566 { 1566 {
1567 if (!repaintContainer) 1567 if (!paintInvalidationContainer)
1568 return computeRepaintRect(repaintContainer); 1568 return computePaintInvalidationRect(paintInvalidationContainer);
1569 return RenderLayer::computeRepaintRect(this, repaintContainer->layer()); 1569 return RenderLayer::computeRepaintRect(this, paintInvalidationContainer->lay er());
1570 } 1570 }
1571 1571
1572 void RenderObject::invalidatePaintRectangle(const LayoutRect& r) const 1572 void RenderObject::invalidatePaintRectangle(const LayoutRect& r) const
1573 { 1573 {
1574 if (!isRooted()) 1574 if (!isRooted())
1575 return; 1575 return;
1576 1576
1577 if (view()->document().printing()) 1577 if (view()->document().printing())
1578 return; // Don't invalidate paints if we're printing. 1578 return; // Don't invalidate paints if we're printing.
1579 1579
1580 LayoutRect dirtyRect(r); 1580 LayoutRect dirtyRect(r);
1581 1581
1582 if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) { 1582 if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) {
1583 // FIXME: layoutDelta needs to be applied in parts before/after transfor ms and 1583 // FIXME: layoutDelta needs to be applied in parts before/after transfor ms and
1584 // paint invalidation containers. https://bugs.webkit.org/show_bug.cgi?i d=23308 1584 // paint invalidation containers. https://bugs.webkit.org/show_bug.cgi?i d=23308
1585 dirtyRect.move(view()->layoutDelta()); 1585 dirtyRect.move(view()->layoutDelta());
1586 } 1586 }
1587 1587
1588 const RenderLayerModelObject* paintInvalidationContainer = containerForRepai nt(); 1588 const RenderLayerModelObject* paintInvalidationContainer = containerForPaint Invalidation();
1589 RenderLayer::mapRectToRepaintBacking(this, paintInvalidationContainer, dirty Rect); 1589 RenderLayer::mapRectToRepaintBacking(this, paintInvalidationContainer, dirty Rect);
1590 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnappedIntRec t(dirtyRect), InvalidationRepaintRectangle); 1590 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnappedIntRec t(dirtyRect), InvalidationPaintRectangle);
1591 } 1591 }
1592 1592
1593 IntRect RenderObject::pixelSnappedAbsoluteClippedOverflowRect() const 1593 IntRect RenderObject::pixelSnappedAbsoluteClippedOverflowRect() const
1594 { 1594 {
1595 return pixelSnappedIntRect(absoluteClippedOverflowRect()); 1595 return pixelSnappedIntRect(absoluteClippedOverflowRect());
1596 } 1596 }
1597 1597
1598 const char* RenderObject::invalidationReasonToString(InvalidationReason reason) const 1598 const char* RenderObject::invalidationReasonToString(InvalidationReason reason) const
1599 { 1599 {
1600 switch (reason) { 1600 switch (reason) {
(...skipping 10 matching lines...) Expand all
1611 case InvalidationBoundsChange: 1611 case InvalidationBoundsChange:
1612 return "bounds change"; 1612 return "bounds change";
1613 case InvalidationLocationChange: 1613 case InvalidationLocationChange:
1614 return "location change"; 1614 return "location change";
1615 case InvalidationScroll: 1615 case InvalidationScroll:
1616 return "scroll"; 1616 return "scroll";
1617 case InvalidationSelection: 1617 case InvalidationSelection:
1618 return "selection"; 1618 return "selection";
1619 case InvalidationLayer: 1619 case InvalidationLayer:
1620 return "layer"; 1620 return "layer";
1621 case InvalidationRepaint: 1621 case InvalidationPaint:
1622 return "invalidate paint"; 1622 return "invalidate paint";
1623 case InvalidationRepaintRectangle: 1623 case InvalidationPaintRectangle:
1624 return "invalidate paint rectangle"; 1624 return "invalidate paint rectangle";
1625 } 1625 }
1626 ASSERT_NOT_REACHED(); 1626 ASSERT_NOT_REACHED();
1627 return ""; 1627 return "";
1628 } 1628 }
1629 1629
1630 void RenderObject::invalidateTreeAfterLayout(const RenderLayerModelObject& paint InvalidationContainer) 1630 void RenderObject::invalidateTreeAfterLayout(const RenderLayerModelObject& paint InvalidationContainer)
1631 { 1631 {
1632 // If we didn't need paint invalidation then our children don't need as well . 1632 // If we didn't need paint invalidation then our children don't need as well .
1633 // Skip walking down the tree as everything should be fine below us. 1633 // Skip walking down the tree as everything should be fine below us.
(...skipping 18 matching lines...) Expand all
1652 } 1652 }
1653 1653
1654 bool RenderObject::invalidatePaintAfterLayoutIfNeeded(const RenderLayerModelObje ct* paintInvalidationContainer, bool wasSelfLayout, 1654 bool RenderObject::invalidatePaintAfterLayoutIfNeeded(const RenderLayerModelObje ct* paintInvalidationContainer, bool wasSelfLayout,
1655 const LayoutRect& oldBounds, const LayoutPoint& oldLocation, const LayoutRec t* newBoundsPtr, const LayoutPoint* newLocationPtr) 1655 const LayoutRect& oldBounds, const LayoutPoint& oldLocation, const LayoutRec t* newBoundsPtr, const LayoutPoint* newLocationPtr)
1656 { 1656 {
1657 RenderView* v = view(); 1657 RenderView* v = view();
1658 if (v->document().printing()) 1658 if (v->document().printing())
1659 return false; // Don't invalidate paints if we're printing. 1659 return false; // Don't invalidate paints if we're printing.
1660 1660
1661 // This ASSERT fails due to animations. See https://bugs.webkit.org/show_bu g.cgi?id=37048 1661 // This ASSERT fails due to animations. See https://bugs.webkit.org/show_bu g.cgi?id=37048
1662 // ASSERT(!newBoundsPtr || *newBoundsPtr == clippedOverflowRectForRepaint(pa intInvalidationContainer)); 1662 // ASSERT(!newBoundsPtr || *newBoundsPtr == clippedOverflowRectForPaintInval idation(paintInvalidationContainer));
1663 LayoutRect newBounds = newBoundsPtr ? *newBoundsPtr : computeRepaintRect(); 1663 LayoutRect newBounds = newBoundsPtr ? *newBoundsPtr : computePaintInvalidati onRect();
1664 LayoutPoint newLocation = newLocationPtr ? (*newLocationPtr) : positionFromR epaintContainer(paintInvalidationContainer); 1664 LayoutPoint newLocation = newLocationPtr ? (*newLocationPtr) : positionFromP aintInvalidationContainer(paintInvalidationContainer);
1665 1665
1666 // FIXME: This should use a ConvertableToTraceFormat when they are available in Blink. 1666 // FIXME: This should use a ConvertableToTraceFormat when they are available in Blink.
1667 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), "RenderObject: :invalidatePaintAfterLayoutIfNeeded()", 1667 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), "RenderObject: :invalidatePaintAfterLayoutIfNeeded()",
1668 "object", this->debugName().ascii(), 1668 "object", this->debugName().ascii(),
1669 "info", TracedValue::fromJSONValue(jsonObjectForOldAndNewRects(oldBounds , newBounds))); 1669 "info", TracedValue::fromJSONValue(jsonObjectForOldAndNewRects(oldBounds , newBounds)));
1670 1670
1671 InvalidationReason invalidationReason = wasSelfLayout ? InvalidationSelfLayo ut : InvalidationIncremental; 1671 InvalidationReason invalidationReason = wasSelfLayout ? InvalidationSelfLayo ut : InvalidationIncremental;
1672 1672
1673 // Presumably a background or a border exists if border-fit:lines was specif ied. 1673 // Presumably a background or a border exists if border-fit:lines was specif ied.
1674 if (invalidationReason == InvalidationIncremental && style()->borderFit() == BorderFitLines) 1674 if (invalidationReason == InvalidationIncremental && style()->borderFit() == BorderFitLines)
(...skipping 11 matching lines...) Expand all
1686 if (invalidationReason == InvalidationIncremental && compositingState() != P aintsIntoOwnBacking && newLocation != oldLocation) 1686 if (invalidationReason == InvalidationIncremental && compositingState() != P aintsIntoOwnBacking && newLocation != oldLocation)
1687 invalidationReason = InvalidationLocationChange; 1687 invalidationReason = InvalidationLocationChange;
1688 1688
1689 // If the bounds are the same then we know that none of the statements below 1689 // If the bounds are the same then we know that none of the statements below
1690 // can match, so we can early out since we will not need to do any 1690 // can match, so we can early out since we will not need to do any
1691 // invalidation. 1691 // invalidation.
1692 if (invalidationReason == InvalidationIncremental && oldBounds == newBounds) 1692 if (invalidationReason == InvalidationIncremental && oldBounds == newBounds)
1693 return false; 1693 return false;
1694 1694
1695 if (invalidationReason == InvalidationIncremental) { 1695 if (invalidationReason == InvalidationIncremental) {
1696 if (oldBounds.width() != newBounds.width() && mustRepaintBackgroundOrBor derOnWidthChange()) 1696 if (oldBounds.width() != newBounds.width() && mustInvalidateBackgroundOr BorderPaintOnWidthChange())
1697 invalidationReason = InvalidationBoundsChangeWithBackground; 1697 invalidationReason = InvalidationBoundsChangeWithBackground;
1698 else if (oldBounds.height() != newBounds.height() && mustRepaintBackgrou ndOrBorderOnHeightChange()) 1698 else if (oldBounds.height() != newBounds.height() && mustInvalidateBackg roundOrBorderPaintOnHeightChange())
1699 invalidationReason = InvalidationBoundsChangeWithBackground; 1699 invalidationReason = InvalidationBoundsChangeWithBackground;
1700 } 1700 }
1701 1701
1702 // If we shifted, we don't know the exact reason so we are conservative and trigger a full invalidation. Shifting could 1702 // If we shifted, we don't know the exact reason so we are conservative and trigger a full invalidation. Shifting could
1703 // be caused by some layout property (left / top) or some in-flow renderer i nserted / removed before us in the tree. 1703 // be caused by some layout property (left / top) or some in-flow renderer i nserted / removed before us in the tree.
1704 if (invalidationReason == InvalidationIncremental && newBounds.location() != oldBounds.location()) 1704 if (invalidationReason == InvalidationIncremental && newBounds.location() != oldBounds.location())
1705 invalidationReason = InvalidationBoundsChange; 1705 invalidationReason = InvalidationBoundsChange;
1706 1706
1707 // If the size is zero on one of our bounds then we know we're going to have 1707 // If the size is zero on one of our bounds then we know we're going to have
1708 // to do a full invalidation of either old bounds or new bounds. If we fall 1708 // to do a full invalidation of either old bounds or new bounds. If we fall
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1743 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnappedIn tRect(newBounds.x(), oldBounds.maxY(), newBounds.width(), deltaBottom), invalida tionReason); 1743 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnappedIn tRect(newBounds.x(), oldBounds.maxY(), newBounds.width(), deltaBottom), invalida tionReason);
1744 else if (deltaBottom < 0) 1744 else if (deltaBottom < 0)
1745 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnappedIn tRect(oldBounds.x(), newBounds.maxY(), oldBounds.width(), -deltaBottom), invalid ationReason); 1745 invalidatePaintUsingContainer(paintInvalidationContainer, pixelSnappedIn tRect(oldBounds.x(), newBounds.maxY(), oldBounds.width(), -deltaBottom), invalid ationReason);
1746 1746
1747 // FIXME: This is a limitation of our visual overflow being a single rectang le. 1747 // FIXME: This is a limitation of our visual overflow being a single rectang le.
1748 if (!style()->boxShadow() && !style()->hasBorderImageOutsets() && !style()-> hasOutline()) 1748 if (!style()->boxShadow() && !style()->hasBorderImageOutsets() && !style()-> hasOutline())
1749 return false; 1749 return false;
1750 1750
1751 // We didn't move, but we did change size. Invalidate the delta, which will consist of possibly 1751 // We didn't move, but we did change size. Invalidate the delta, which will consist of possibly
1752 // two rectangles (but typically only one). 1752 // two rectangles (but typically only one).
1753 RenderStyle* outlineStyle = outlineStyleForRepaint(); 1753 RenderStyle* outlineStyle = outlineStyleForPaintInvalidation();
1754 LayoutUnit outlineWidth = outlineStyle->outlineSize(); 1754 LayoutUnit outlineWidth = outlineStyle->outlineSize();
1755 LayoutBoxExtent insetShadowExtent = style()->getBoxShadowInsetExtent(); 1755 LayoutBoxExtent insetShadowExtent = style()->getBoxShadowInsetExtent();
1756 LayoutUnit width = absoluteValue(newBounds.width() - oldBounds.width()); 1756 LayoutUnit width = absoluteValue(newBounds.width() - oldBounds.width());
1757 if (width) { 1757 if (width) {
1758 LayoutUnit shadowLeft; 1758 LayoutUnit shadowLeft;
1759 LayoutUnit shadowRight; 1759 LayoutUnit shadowRight;
1760 style()->getBoxShadowHorizontalExtent(shadowLeft, shadowRight); 1760 style()->getBoxShadowHorizontalExtent(shadowLeft, shadowRight);
1761 int borderRight = isBox() ? toRenderBox(this)->borderRight() : 0; 1761 int borderRight = isBox() ? toRenderBox(this)->borderRight() : 0;
1762 LayoutUnit boxWidth = isBox() ? toRenderBox(this)->width() : LayoutUnit( ); 1762 LayoutUnit boxWidth = isBox() ? toRenderBox(this)->width() : LayoutUnit( );
1763 LayoutUnit minInsetRightShadowExtent = min<LayoutUnit>(-insetShadowExten t.right(), min<LayoutUnit>(newBounds.width(), oldBounds.width())); 1763 LayoutUnit minInsetRightShadowExtent = min<LayoutUnit>(-insetShadowExten t.right(), min<LayoutUnit>(newBounds.width(), oldBounds.width()));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1801 void RenderObject::invalidatePaintForOverflow() 1801 void RenderObject::invalidatePaintForOverflow()
1802 { 1802 {
1803 } 1803 }
1804 1804
1805 void RenderObject::invalidatePaintForOverflowIfNeeded() 1805 void RenderObject::invalidatePaintForOverflowIfNeeded()
1806 { 1806 {
1807 if (shouldInvalidateOverflowForPaint()) 1807 if (shouldInvalidateOverflowForPaint())
1808 invalidatePaintForOverflow(); 1808 invalidatePaintForOverflow();
1809 } 1809 }
1810 1810
1811 bool RenderObject::checkForRepaint() const 1811 bool RenderObject::checkForPaintInvalidation() const
1812 { 1812 {
1813 return !document().view()->needsFullPaintInvalidation() && everHadLayout(); 1813 return !document().view()->needsFullPaintInvalidation() && everHadLayout();
1814 } 1814 }
1815 1815
1816 bool RenderObject::checkForRepaintDuringLayout() const 1816 bool RenderObject::checkForPaintInvalidationDuringLayout() const
1817 { 1817 {
1818 return !RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && checkForRepai nt(); 1818 return !RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && checkForPaint Invalidation();
1819 } 1819 }
1820 1820
1821 LayoutRect RenderObject::rectWithOutlineForRepaint(const RenderLayerModelObject* repaintContainer, LayoutUnit outlineWidth) const 1821 LayoutRect RenderObject::rectWithOutlineForPaintInvalidation(const RenderLayerMo delObject* paintInvalidationContainer, LayoutUnit outlineWidth) const
1822 { 1822 {
1823 LayoutRect r(clippedOverflowRectForRepaint(repaintContainer)); 1823 LayoutRect r(clippedOverflowRectForPaintInvalidation(paintInvalidationContai ner));
1824 r.inflate(outlineWidth); 1824 r.inflate(outlineWidth);
1825 return r; 1825 return r;
1826 } 1826 }
1827 1827
1828 LayoutRect RenderObject::clippedOverflowRectForRepaint(const RenderLayerModelObj ect*) const 1828 LayoutRect RenderObject::clippedOverflowRectForPaintInvalidation(const RenderLay erModelObject*) const
1829 { 1829 {
1830 ASSERT_NOT_REACHED(); 1830 ASSERT_NOT_REACHED();
1831 return LayoutRect(); 1831 return LayoutRect();
1832 } 1832 }
1833 1833
1834 void RenderObject::mapRectToRepaintBacking(const RenderLayerModelObject* repaint Container, LayoutRect& rect, bool fixed) const 1834 void RenderObject::mapRectToPaintInvalidationBacking(const RenderLayerModelObjec t* paintInvalidationContainer, LayoutRect& rect, bool fixed) const
1835 { 1835 {
1836 if (repaintContainer == this) 1836 if (paintInvalidationContainer == this)
1837 return; 1837 return;
1838 1838
1839 if (RenderObject* o = parent()) { 1839 if (RenderObject* o = parent()) {
1840 if (o->isRenderBlockFlow()) { 1840 if (o->isRenderBlockFlow()) {
1841 RenderBlock* cb = toRenderBlock(o); 1841 RenderBlock* cb = toRenderBlock(o);
1842 if (cb->hasColumns()) 1842 if (cb->hasColumns())
1843 cb->adjustRectForColumns(rect); 1843 cb->adjustRectForColumns(rect);
1844 } 1844 }
1845 1845
1846 if (o->hasOverflowClip()) { 1846 if (o->hasOverflowClip()) {
1847 RenderBox* boxParent = toRenderBox(o); 1847 RenderBox* boxParent = toRenderBox(o);
1848 boxParent->applyCachedClipAndScrollOffsetForRepaint(rect); 1848 boxParent->applyCachedClipAndScrollOffsetForRepaint(rect);
1849 if (rect.isEmpty()) 1849 if (rect.isEmpty())
1850 return; 1850 return;
1851 } 1851 }
1852 1852
1853 o->mapRectToRepaintBacking(repaintContainer, rect, fixed); 1853 o->mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect, f ixed);
1854 } 1854 }
1855 } 1855 }
1856 1856
1857 void RenderObject::computeFloatRectForRepaint(const RenderLayerModelObject*, Flo atRect&, bool) const 1857 void RenderObject::computeFloatRectForPaintInvalidation(const RenderLayerModelOb ject*, FloatRect&, bool) const
1858 { 1858 {
1859 ASSERT_NOT_REACHED(); 1859 ASSERT_NOT_REACHED();
1860 } 1860 }
1861 1861
1862 void RenderObject::dirtyLinesFromChangedChild(RenderObject*) 1862 void RenderObject::dirtyLinesFromChangedChild(RenderObject*)
1863 { 1863 {
1864 } 1864 }
1865 1865
1866 #ifndef NDEBUG 1866 #ifndef NDEBUG
1867 1867
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1993 block->children()->appendChildNode(block, childlist->removeChildNode (parent(), this)); 1993 block->children()->appendChildNode(block, childlist->removeChildNode (parent(), this));
1994 } 1994 }
1995 } 1995 }
1996 } 1996 }
1997 1997
1998 StyleDifference RenderObject::adjustStyleDifference(StyleDifference diff, unsign ed contextSensitiveProperties) const 1998 StyleDifference RenderObject::adjustStyleDifference(StyleDifference diff, unsign ed contextSensitiveProperties) const
1999 { 1999 {
2000 if (contextSensitiveProperties & ContextSensitivePropertyTransform && isSVG( )) 2000 if (contextSensitiveProperties & ContextSensitivePropertyTransform && isSVG( ))
2001 diff.setNeedsFullLayout(); 2001 diff.setNeedsFullLayout();
2002 2002
2003 // If transform changed, and the layer does not paint into its own separate backing, then we need to repaint. 2003 // If transform changed, and the layer does not paint into its own separate backing, then we need to invalidate paints.
2004 if (contextSensitiveProperties & ContextSensitivePropertyTransform) { 2004 if (contextSensitiveProperties & ContextSensitivePropertyTransform) {
2005 // Text nodes share style with their parents but transforms don't apply to them, 2005 // Text nodes share style with their parents but transforms don't apply to them,
2006 // hence the !isText() check. 2006 // hence the !isText() check.
2007 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer( )->styleDeterminedCompositingReasons())) 2007 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer( )->styleDeterminedCompositingReasons()))
2008 diff.setNeedsRepaintLayer(); 2008 diff.setNeedsRepaintLayer();
2009 else 2009 else
2010 diff.setNeedsRecompositeLayer(); 2010 diff.setNeedsRecompositeLayer();
2011 } 2011 }
2012 2012
2013 // If opacity or zIndex changed, and the layer does not paint into its own s eparate backing, then we need to repaint (also 2013 // If opacity or zIndex changed, and the layer does not paint into its own s eparate backing, then we need to invalidate paints (also
2014 // ignoring text nodes) 2014 // ignoring text nodes)
2015 if (contextSensitiveProperties & (ContextSensitivePropertyOpacity | ContextS ensitivePropertyZIndex)) { 2015 if (contextSensitiveProperties & (ContextSensitivePropertyOpacity | ContextS ensitivePropertyZIndex)) {
2016 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer( )->styleDeterminedCompositingReasons())) 2016 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer( )->styleDeterminedCompositingReasons()))
2017 diff.setNeedsRepaintLayer(); 2017 diff.setNeedsRepaintLayer();
2018 else 2018 else
2019 diff.setNeedsRecompositeLayer(); 2019 diff.setNeedsRecompositeLayer();
2020 } 2020 }
2021 2021
2022 // If filter changed, and the layer does not paint into its own separate bac king or it paints with filters, then we need to repaint. 2022 // If filter changed, and the layer does not paint into its own separate bac king or it paints with filters, then we need to invalidate paints.
2023 if ((contextSensitiveProperties & ContextSensitivePropertyFilter) && hasLaye r()) { 2023 if ((contextSensitiveProperties & ContextSensitivePropertyFilter) && hasLaye r()) {
2024 RenderLayer* layer = toRenderLayerModelObject(this)->layer(); 2024 RenderLayer* layer = toRenderLayerModelObject(this)->layer();
2025 if (!layer->styleDeterminedCompositingReasons() || layer->paintsWithFilt ers()) 2025 if (!layer->styleDeterminedCompositingReasons() || layer->paintsWithFilt ers())
2026 diff.setNeedsRepaintLayer(); 2026 diff.setNeedsRepaintLayer();
2027 else 2027 else
2028 diff.setNeedsRecompositeLayer(); 2028 diff.setNeedsRecompositeLayer();
2029 } 2029 }
2030 2030
2031 if ((contextSensitiveProperties & ContextSensitivePropertyTextOrColor) && !d iff.needsRepaint() 2031 if ((contextSensitiveProperties & ContextSensitivePropertyTextOrColor) && !d iff.needsRepaint()
2032 && hasImmediateNonWhitespaceTextChildOrPropertiesDependentOnColor()) 2032 && hasImmediateNonWhitespaceTextChildOrPropertiesDependentOnColor())
2033 diff.setNeedsRepaintObject(); 2033 diff.setNeedsRepaintObject();
2034 2034
2035 // The answer to layerTypeRequired() for plugins, iframes, and canvas can ch ange without the actual 2035 // The answer to layerTypeRequired() for plugins, iframes, and canvas can ch ange without the actual
2036 // style changing, since it depends on whether we decide to composite these elements. When the 2036 // style changing, since it depends on whether we decide to composite these elements. When the
2037 // layer status of one of these elements changes, we need to force a layout. 2037 // layer status of one of these elements changes, we need to force a layout.
2038 if (!diff.needsFullLayout() && style() && isLayerModelObject()) { 2038 if (!diff.needsFullLayout() && style() && isLayerModelObject()) {
2039 bool requiresLayer = toRenderLayerModelObject(this)->layerTypeRequired() != NoLayer; 2039 bool requiresLayer = toRenderLayerModelObject(this)->layerTypeRequired() != NoLayer;
2040 if (hasLayer() != requiresLayer) 2040 if (hasLayer() != requiresLayer)
2041 diff.setNeedsFullLayout(); 2041 diff.setNeedsFullLayout();
2042 } 2042 }
2043 2043
2044 // If we have no layer(), just treat a RepaintLayer hint as a normal Repaint . 2044 // If we have no layer(), just treat a RepaintLayer hint as a normal paint i nvalidation.
2045 if (diff.needsRepaintLayer() && !hasLayer()) { 2045 if (diff.needsRepaintLayer() && !hasLayer()) {
2046 diff.clearNeedsRepaint(); 2046 diff.clearNeedsRepaint();
2047 diff.setNeedsRepaintObject(); 2047 diff.setNeedsRepaintObject();
2048 } 2048 }
2049 2049
2050 return diff; 2050 return diff;
2051 } 2051 }
2052 2052
2053 void RenderObject::setPseudoStyle(PassRefPtr<RenderStyle> pseudoStyle) 2053 void RenderObject::setPseudoStyle(PassRefPtr<RenderStyle> pseudoStyle)
2054 { 2054 {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2136 styleDidChange(diff, oldStyle.get()); 2136 styleDidChange(diff, oldStyle.get());
2137 2137
2138 // FIXME: |this| might be destroyed here. This can currently happen for a Re nderTextFragment when 2138 // FIXME: |this| might be destroyed here. This can currently happen for a Re nderTextFragment when
2139 // its first-letter block gets an update in RenderTextFragment::styleDidChan ge. For RenderTextFragment(s), 2139 // its first-letter block gets an update in RenderTextFragment::styleDidChan ge. For RenderTextFragment(s),
2140 // we will safely bail out with the doesNotNeedLayout flag. We might want to broaden this condition 2140 // we will safely bail out with the doesNotNeedLayout flag. We might want to broaden this condition
2141 // in the future as we move renderer changes out of layout and into style ch anges. 2141 // in the future as we move renderer changes out of layout and into style ch anges.
2142 if (doesNotNeedLayout) 2142 if (doesNotNeedLayout)
2143 return; 2143 return;
2144 2144
2145 // Now that the layer (if any) has been updated, we need to adjust the diff again, 2145 // Now that the layer (if any) has been updated, we need to adjust the diff again,
2146 // check whether we should layout now, and decide if we need to repaint. 2146 // check whether we should layout now, and decide if we need to invalidate p aints.
2147 StyleDifference updatedDiff = adjustStyleDifference(diff, contextSensitivePr operties); 2147 StyleDifference updatedDiff = adjustStyleDifference(diff, contextSensitivePr operties);
2148 2148
2149 if (!diff.needsFullLayout()) { 2149 if (!diff.needsFullLayout()) {
2150 if (updatedDiff.needsFullLayout()) 2150 if (updatedDiff.needsFullLayout())
2151 setNeedsLayoutAndPrefWidthsRecalc(); 2151 setNeedsLayoutAndPrefWidthsRecalc();
2152 else if (updatedDiff.needsPositionedMovementLayout()) 2152 else if (updatedDiff.needsPositionedMovementLayout())
2153 setNeedsPositionedMovementLayout(); 2153 setNeedsPositionedMovementLayout();
2154 } 2154 }
2155 2155
2156 if (contextSensitiveProperties & ContextSensitivePropertyTransform && !needs Layout()) { 2156 if (contextSensitiveProperties & ContextSensitivePropertyTransform && !needs Layout()) {
2157 if (RenderBlock* container = containingBlock()) 2157 if (RenderBlock* container = containingBlock())
2158 container->setNeedsOverflowRecalcAfterStyleChange(); 2158 container->setNeedsOverflowRecalcAfterStyleChange();
2159 if (isBox()) 2159 if (isBox())
2160 toRenderBox(this)->updateLayerTransform(); 2160 toRenderBox(this)->updateLayerTransform();
2161 } 2161 }
2162 2162
2163 if (updatedDiff.needsRepaint()) { 2163 if (updatedDiff.needsRepaint()) {
2164 // Repaint with the new style, e.g., for example if we go from not havin g 2164 // Invalidate paints with the new style, e.g., for example if we go from not having
2165 // an outline to having an outline. 2165 // an outline to having an outline.
2166 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && needsLayout() ) 2166 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && needsLayout() )
2167 setShouldDoFullPaintInvalidationAfterLayout(true); 2167 setShouldDoFullPaintInvalidationAfterLayout(true);
2168 else if (!selfNeedsLayout()) 2168 else if (!selfNeedsLayout())
2169 paintInvalidationForWholeRenderer(); 2169 paintInvalidationForWholeRenderer();
2170 } 2170 }
2171 } 2171 }
2172 2172
2173 static inline bool rendererHasBackground(const RenderObject* renderer) 2173 static inline bool rendererHasBackground(const RenderObject* renderer)
2174 { 2174 {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
2311 2311
2312 // Ditto. 2312 // Ditto.
2313 if (needsOverflowRecalcAfterStyleChange() && oldStyle->position() != m_s tyle->position()) 2313 if (needsOverflowRecalcAfterStyleChange() && oldStyle->position() != m_s tyle->position())
2314 markContainingBlocksForOverflowRecalc(); 2314 markContainingBlocksForOverflowRecalc();
2315 2315
2316 if (diff.needsFullLayout()) 2316 if (diff.needsFullLayout())
2317 setNeedsLayoutAndPrefWidthsRecalc(); 2317 setNeedsLayoutAndPrefWidthsRecalc();
2318 } else if (diff.needsPositionedMovementLayout()) 2318 } else if (diff.needsPositionedMovementLayout())
2319 setNeedsPositionedMovementLayout(); 2319 setNeedsPositionedMovementLayout();
2320 2320
2321 // Don't check for repaint here; we need to wait until the layer has been 2321 // Don't check for paint invalidation here; we need to wait until the layer has been
2322 // updated by subclasses before we know if we have to repaint (in setStyle() ). 2322 // updated by subclasses before we know if we have to invalidate paints (in setStyle()).
2323 2323
2324 if (oldStyle && !areCursorsEqual(oldStyle, style())) { 2324 if (oldStyle && !areCursorsEqual(oldStyle, style())) {
2325 if (LocalFrame* frame = this->frame()) 2325 if (LocalFrame* frame = this->frame())
2326 frame->eventHandler().scheduleCursorUpdate(); 2326 frame->eventHandler().scheduleCursorUpdate();
2327 } 2327 }
2328 } 2328 }
2329 2329
2330 void RenderObject::propagateStyleToAnonymousChildren(bool blockChildrenOnly) 2330 void RenderObject::propagateStyleToAnonymousChildren(bool blockChildrenOnly)
2331 { 2331 {
2332 // FIXME: We could save this call when the change only affected non-inherite d properties. 2332 // FIXME: We could save this call when the change only affected non-inherite d properties.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2415 } 2415 }
2416 2416
2417 FloatQuad RenderObject::absoluteToLocalQuad(const FloatQuad& quad, MapCoordinate sFlags mode) const 2417 FloatQuad RenderObject::absoluteToLocalQuad(const FloatQuad& quad, MapCoordinate sFlags mode) const
2418 { 2418 {
2419 TransformState transformState(TransformState::UnapplyInverseTransformDirecti on, quad.boundingBox().center(), quad); 2419 TransformState transformState(TransformState::UnapplyInverseTransformDirecti on, quad.boundingBox().center(), quad);
2420 mapAbsoluteToLocalPoint(mode, transformState); 2420 mapAbsoluteToLocalPoint(mode, transformState);
2421 transformState.flatten(); 2421 transformState.flatten();
2422 return transformState.lastPlanarQuad(); 2422 return transformState.lastPlanarQuad();
2423 } 2423 }
2424 2424
2425 void RenderObject::mapLocalToContainer(const RenderLayerModelObject* repaintCont ainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const 2425 void RenderObject::mapLocalToContainer(const RenderLayerModelObject* paintInvali dationContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
2426 { 2426 {
2427 if (repaintContainer == this) 2427 if (paintInvalidationContainer == this)
2428 return; 2428 return;
2429 2429
2430 RenderObject* o = parent(); 2430 RenderObject* o = parent();
2431 if (!o) 2431 if (!o)
2432 return; 2432 return;
2433 2433
2434 // FIXME: this should call offsetFromContainer to share code, but I'm not su re it's ever called. 2434 // FIXME: this should call offsetFromContainer to share code, but I'm not su re it's ever called.
2435 LayoutPoint centerPoint = roundedLayoutPoint(transformState.mappedPoint()); 2435 LayoutPoint centerPoint = roundedLayoutPoint(transformState.mappedPoint());
2436 if (mode & ApplyContainerFlip && o->isBox()) { 2436 if (mode & ApplyContainerFlip && o->isBox()) {
2437 if (o->style()->isFlippedBlocksWritingMode()) 2437 if (o->style()->isFlippedBlocksWritingMode())
2438 transformState.move(toRenderBox(o)->flipForWritingModeIncludingColum ns(roundedLayoutPoint(transformState.mappedPoint())) - centerPoint); 2438 transformState.move(toRenderBox(o)->flipForWritingModeIncludingColum ns(roundedLayoutPoint(transformState.mappedPoint())) - centerPoint);
2439 mode &= ~ApplyContainerFlip; 2439 mode &= ~ApplyContainerFlip;
2440 } 2440 }
2441 2441
2442 transformState.move(o->columnOffset(roundedLayoutPoint(transformState.mapped Point()))); 2442 transformState.move(o->columnOffset(roundedLayoutPoint(transformState.mapped Point())));
2443 2443
2444 if (o->hasOverflowClip()) 2444 if (o->hasOverflowClip())
2445 transformState.move(-toRenderBox(o)->scrolledContentOffset()); 2445 transformState.move(-toRenderBox(o)->scrolledContentOffset());
2446 2446
2447 o->mapLocalToContainer(repaintContainer, transformState, mode, wasFixed); 2447 o->mapLocalToContainer(paintInvalidationContainer, transformState, mode, was Fixed);
2448 } 2448 }
2449 2449
2450 const RenderObject* RenderObject::pushMappingToContainer(const RenderLayerModelO bject* ancestorToStopAt, RenderGeometryMap& geometryMap) const 2450 const RenderObject* RenderObject::pushMappingToContainer(const RenderLayerModelO bject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
2451 { 2451 {
2452 ASSERT_UNUSED(ancestorToStopAt, ancestorToStopAt != this); 2452 ASSERT_UNUSED(ancestorToStopAt, ancestorToStopAt != this);
2453 2453
2454 RenderObject* container = parent(); 2454 RenderObject* container = parent();
2455 if (!container) 2455 if (!container)
2456 return 0; 2456 return 0;
2457 2457
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2497 2497
2498 TransformationMatrix perspectiveMatrix; 2498 TransformationMatrix perspectiveMatrix;
2499 perspectiveMatrix.applyPerspective(containerObject->style()->perspective ()); 2499 perspectiveMatrix.applyPerspective(containerObject->style()->perspective ());
2500 2500
2501 transform.translateRight3d(-perspectiveOrigin.x(), -perspectiveOrigin.y( ), 0); 2501 transform.translateRight3d(-perspectiveOrigin.x(), -perspectiveOrigin.y( ), 0);
2502 transform = perspectiveMatrix * transform; 2502 transform = perspectiveMatrix * transform;
2503 transform.translateRight3d(perspectiveOrigin.x(), perspectiveOrigin.y(), 0); 2503 transform.translateRight3d(perspectiveOrigin.x(), perspectiveOrigin.y(), 0);
2504 } 2504 }
2505 } 2505 }
2506 2506
2507 FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, const R enderLayerModelObject* repaintContainer, MapCoordinatesFlags mode, bool* wasFixe d) const 2507 FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, const R enderLayerModelObject* paintInvalidationContainer, MapCoordinatesFlags mode, boo l* wasFixed) const
2508 { 2508 {
2509 // Track the point at the center of the quad's bounding box. As mapLocalToCo ntainer() calls offsetFromContainer(), 2509 // Track the point at the center of the quad's bounding box. As mapLocalToCo ntainer() calls offsetFromContainer(),
2510 // it will use that point as the reference point to decide which column's tr ansform to apply in multiple-column blocks. 2510 // it will use that point as the reference point to decide which column's tr ansform to apply in multiple-column blocks.
2511 TransformState transformState(TransformState::ApplyTransformDirection, local Quad.boundingBox().center(), localQuad); 2511 TransformState transformState(TransformState::ApplyTransformDirection, local Quad.boundingBox().center(), localQuad);
2512 mapLocalToContainer(repaintContainer, transformState, mode | ApplyContainerF lip | UseTransforms, wasFixed); 2512 mapLocalToContainer(paintInvalidationContainer, transformState, mode | Apply ContainerFlip | UseTransforms, wasFixed);
2513 transformState.flatten(); 2513 transformState.flatten();
2514 2514
2515 return transformState.lastPlanarQuad(); 2515 return transformState.lastPlanarQuad();
2516 } 2516 }
2517 2517
2518 FloatPoint RenderObject::localToContainerPoint(const FloatPoint& localPoint, con st RenderLayerModelObject* repaintContainer, MapCoordinatesFlags mode, bool* was Fixed) const 2518 FloatPoint RenderObject::localToContainerPoint(const FloatPoint& localPoint, con st RenderLayerModelObject* paintInvalidationContainer, MapCoordinatesFlags mode, bool* wasFixed) const
2519 { 2519 {
2520 TransformState transformState(TransformState::ApplyTransformDirection, local Point); 2520 TransformState transformState(TransformState::ApplyTransformDirection, local Point);
2521 mapLocalToContainer(repaintContainer, transformState, mode | ApplyContainerF lip | UseTransforms, wasFixed); 2521 mapLocalToContainer(paintInvalidationContainer, transformState, mode | Apply ContainerFlip | UseTransforms, wasFixed);
2522 transformState.flatten(); 2522 transformState.flatten();
2523 2523
2524 return transformState.lastPlanarPoint(); 2524 return transformState.lastPlanarPoint();
2525 } 2525 }
2526 2526
2527 LayoutSize RenderObject::offsetFromContainer(const RenderObject* o, const Layout Point& point, bool* offsetDependsOnPoint) const 2527 LayoutSize RenderObject::offsetFromContainer(const RenderObject* o, const Layout Point& point, bool* offsetDependsOnPoint) const
2528 { 2528 {
2529 ASSERT(o == container()); 2529 ASSERT(o == container());
2530 2530
2531 LayoutSize offset = o->columnOffset(point); 2531 LayoutSize offset = o->columnOffset(point);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
2683 bool RenderObject::hasOutlineAnnotation() const 2683 bool RenderObject::hasOutlineAnnotation() const
2684 { 2684 {
2685 return node() && node()->isLink() && document().printing(); 2685 return node() && node()->isLink() && document().printing();
2686 } 2686 }
2687 2687
2688 bool RenderObject::hasEntirelyFixedBackground() const 2688 bool RenderObject::hasEntirelyFixedBackground() const
2689 { 2689 {
2690 return m_style->hasEntirelyFixedBackground(); 2690 return m_style->hasEntirelyFixedBackground();
2691 } 2691 }
2692 2692
2693 RenderObject* RenderObject::container(const RenderLayerModelObject* repaintConta iner, bool* repaintContainerSkipped) const 2693 RenderObject* RenderObject::container(const RenderLayerModelObject* paintInvalid ationContainer, bool* paintInvalidationContainerSkipped) const
2694 { 2694 {
2695 if (repaintContainerSkipped) 2695 if (paintInvalidationContainerSkipped)
2696 *repaintContainerSkipped = false; 2696 *paintInvalidationContainerSkipped = false;
2697 2697
2698 // This method is extremely similar to containingBlock(), but with a few not able 2698 // This method is extremely similar to containingBlock(), but with a few not able
2699 // exceptions. 2699 // exceptions.
2700 // (1) It can be used on orphaned subtrees, i.e., it can be called safely ev en when 2700 // (1) It can be used on orphaned subtrees, i.e., it can be called safely ev en when
2701 // the object is not part of the primary document subtree yet. 2701 // the object is not part of the primary document subtree yet.
2702 // (2) For normal flow elements, it just returns the parent. 2702 // (2) For normal flow elements, it just returns the parent.
2703 // (3) For absolute positioned elements, it will return a relative positione d inline. 2703 // (3) For absolute positioned elements, it will return a relative positione d inline.
2704 // containingBlock() simply skips relpositioned inlines and lets an enclosin g block handle 2704 // containingBlock() simply skips relpositioned inlines and lets an enclosin g block handle
2705 // the layout of the positioned object. This does mean that computePosition edLogicalWidth and 2705 // the layout of the positioned object. This does mean that computePosition edLogicalWidth and
2706 // computePositionedLogicalHeight have to use container(). 2706 // computePositionedLogicalHeight have to use container().
2707 RenderObject* o = parent(); 2707 RenderObject* o = parent();
2708 2708
2709 if (isText()) 2709 if (isText())
2710 return o; 2710 return o;
2711 2711
2712 EPosition pos = m_style->position(); 2712 EPosition pos = m_style->position();
2713 if (pos == FixedPosition) { 2713 if (pos == FixedPosition) {
2714 return containerForFixedPosition(repaintContainer, repaintContainerSkipp ed); 2714 return containerForFixedPosition(paintInvalidationContainer, paintInvali dationContainerSkipped);
2715 } else if (pos == AbsolutePosition) { 2715 } else if (pos == AbsolutePosition) {
2716 // We technically just want our containing block, but 2716 // We technically just want our containing block, but
2717 // we may not have one if we're part of an uninstalled 2717 // we may not have one if we're part of an uninstalled
2718 // subtree. We'll climb as high as we can though. 2718 // subtree. We'll climb as high as we can though.
2719 while (o) { 2719 while (o) {
2720 if (o->style()->position() != StaticPosition) 2720 if (o->style()->position() != StaticPosition)
2721 break; 2721 break;
2722 2722
2723 if (o->canContainFixedPositionObjects()) 2723 if (o->canContainFixedPositionObjects())
2724 break; 2724 break;
2725 2725
2726 if (repaintContainerSkipped && o == repaintContainer) 2726 if (paintInvalidationContainerSkipped && o == paintInvalidationConta iner)
2727 *repaintContainerSkipped = true; 2727 *paintInvalidationContainerSkipped = true;
2728 2728
2729 o = o->parent(); 2729 o = o->parent();
2730 } 2730 }
2731 } 2731 }
2732 2732
2733 return o; 2733 return o;
2734 } 2734 }
2735 2735
2736 bool RenderObject::isSelectionBorder() const 2736 bool RenderObject::isSelectionBorder() const
2737 { 2737 {
(...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after
3463 } 3463 }
3464 3464
3465 FloatRect RenderObject::strokeBoundingBox() const 3465 FloatRect RenderObject::strokeBoundingBox() const
3466 { 3466 {
3467 ASSERT_NOT_REACHED(); 3467 ASSERT_NOT_REACHED();
3468 return FloatRect(); 3468 return FloatRect();
3469 } 3469 }
3470 3470
3471 // Returns the smallest rectangle enclosing all of the painted content 3471 // Returns the smallest rectangle enclosing all of the painted content
3472 // respecting clipping, masking, filters, opacity, stroke-width and markers 3472 // respecting clipping, masking, filters, opacity, stroke-width and markers
3473 FloatRect RenderObject::repaintRectInLocalCoordinates() const 3473 FloatRect RenderObject::paintInvalidationRectInLocalCoordinates() const
3474 { 3474 {
3475 ASSERT_NOT_REACHED(); 3475 ASSERT_NOT_REACHED();
3476 return FloatRect(); 3476 return FloatRect();
3477 } 3477 }
3478 3478
3479 AffineTransform RenderObject::localTransform() const 3479 AffineTransform RenderObject::localTransform() const
3480 { 3480 {
3481 static const AffineTransform identity; 3481 static const AffineTransform identity;
3482 return identity; 3482 return identity;
3483 } 3483 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3550 { 3550 {
3551 if (object1) { 3551 if (object1) {
3552 const WebCore::RenderObject* root = object1; 3552 const WebCore::RenderObject* root = object1;
3553 while (root->parent()) 3553 while (root->parent())
3554 root = root->parent(); 3554 root = root->parent();
3555 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); 3555 root->showRenderTreeAndMark(object1, "*", object2, "-", 0);
3556 } 3556 }
3557 } 3557 }
3558 3558
3559 #endif 3559 #endif
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderObject.h ('k') | Source/core/rendering/RenderObjectChildList.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698