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

Side by Side Diff: third_party/WebKit/Source/core/layout/FloatingObjects.cpp

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
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) 2007 David Smith (catfish.man@gmail.com) 4 * (C) 2007 David Smith (catfish.man@gmail.com)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 11 matching lines...) Expand all
22 */ 22 */
23 23
24 #include "core/layout/FloatingObjects.h" 24 #include "core/layout/FloatingObjects.h"
25 25
26 #include "core/layout/LayoutBlockFlow.h" 26 #include "core/layout/LayoutBlockFlow.h"
27 #include "core/layout/LayoutBox.h" 27 #include "core/layout/LayoutBox.h"
28 #include "core/layout/LayoutView.h" 28 #include "core/layout/LayoutView.h"
29 #include "core/layout/shapes/ShapeOutsideInfo.h" 29 #include "core/layout/shapes/ShapeOutsideInfo.h"
30 #include "core/paint/PaintLayer.h" 30 #include "core/paint/PaintLayer.h"
31 #include "platform/RuntimeEnabledFeatures.h" 31 #include "platform/RuntimeEnabledFeatures.h"
32 #include "wtf/PtrUtil.h" 32
33 #include <algorithm> 33 #include <algorithm>
34 #include <memory>
35 34
36 using namespace WTF; 35 using namespace WTF;
37 36
38 namespace blink { 37 namespace blink {
39 38
40 struct SameSizeAsFloatingObject { 39 struct SameSizeAsFloatingObject {
41 void* pointers[2]; 40 void* pointers[2];
42 LayoutRect rect; 41 LayoutRect rect;
43 uint32_t bitfields : 8; 42 uint32_t bitfields : 8;
44 }; 43 };
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 bool FloatingObject::shouldPaintForCompositedLayoutPart() 81 bool FloatingObject::shouldPaintForCompositedLayoutPart()
83 { 82 {
84 // HACK: only non-self-painting floats should paint. However, due to the fun damental compositing bug, some LayoutPart objects 83 // HACK: only non-self-painting floats should paint. However, due to the fun damental compositing bug, some LayoutPart objects
85 // may become self-painting due to being composited. This leads to a chicken -egg issue because layout may not depend on compositing. 84 // may become self-painting due to being composited. This leads to a chicken -egg issue because layout may not depend on compositing.
86 // If this is the case, set shouldPaint() to true even if the layer is techn ically self-painting. This lets the float which contains 85 // If this is the case, set shouldPaint() to true even if the layer is techn ically self-painting. This lets the float which contains
87 // a LayoutPart start painting as soon as it stops being composited, without having to re-layout the float. 86 // a LayoutPart start painting as soon as it stops being composited, without having to re-layout the float.
88 // This hack can be removed after SPv2. 87 // This hack can be removed after SPv2.
89 return m_layoutObject->layer() && m_layoutObject->layer()->isSelfPaintingOnl yBecauseIsCompositedPart() && !RuntimeEnabledFeatures::slimmingPaintV2Enabled(); 88 return m_layoutObject->layer() && m_layoutObject->layer()->isSelfPaintingOnl yBecauseIsCompositedPart() && !RuntimeEnabledFeatures::slimmingPaintV2Enabled();
90 } 89 }
91 90
92 std::unique_ptr<FloatingObject> FloatingObject::create(LayoutBox* layoutObject) 91 PassOwnPtr<FloatingObject> FloatingObject::create(LayoutBox* layoutObject)
93 { 92 {
94 std::unique_ptr<FloatingObject> newObj = wrapUnique(new FloatingObject(layou tObject)); 93 OwnPtr<FloatingObject> newObj = adoptPtr(new FloatingObject(layoutObject));
95 94
96 // If a layer exists, the float will paint itself. Otherwise someone else wi ll. 95 // If a layer exists, the float will paint itself. Otherwise someone else wi ll.
97 newObj->setShouldPaint(!layoutObject->hasSelfPaintingLayer() || newObj->shou ldPaintForCompositedLayoutPart()); 96 newObj->setShouldPaint(!layoutObject->hasSelfPaintingLayer() || newObj->shou ldPaintForCompositedLayoutPart());
98 97
99 newObj->setIsDescendant(true); 98 newObj->setIsDescendant(true);
100 99
101 return newObj; 100 return newObj;
102 } 101 }
103 102
104 bool FloatingObject::shouldPaint() const 103 bool FloatingObject::shouldPaint() const
105 { 104 {
106 return m_shouldPaint && !m_layoutObject->hasSelfPaintingLayer(); 105 return m_shouldPaint && !m_layoutObject->hasSelfPaintingLayer();
107 } 106 }
108 107
109 std::unique_ptr<FloatingObject> FloatingObject::copyToNewContainer(LayoutSize of fset, bool shouldPaint, bool isDescendant) const 108 PassOwnPtr<FloatingObject> FloatingObject::copyToNewContainer(LayoutSize offset, bool shouldPaint, bool isDescendant) const
110 { 109 {
111 return wrapUnique(new FloatingObject(layoutObject(), getType(), LayoutRect(f rameRect().location() - offset, frameRect().size()), shouldPaint, isDescendant, isLowestNonOverhangingFloatInChild())); 110 return adoptPtr(new FloatingObject(layoutObject(), getType(), LayoutRect(fra meRect().location() - offset, frameRect().size()), shouldPaint, isDescendant, is LowestNonOverhangingFloatInChild()));
112 } 111 }
113 112
114 std::unique_ptr<FloatingObject> FloatingObject::unsafeClone() const 113 PassOwnPtr<FloatingObject> FloatingObject::unsafeClone() const
115 { 114 {
116 std::unique_ptr<FloatingObject> cloneObject = wrapUnique(new FloatingObject( layoutObject(), getType(), m_frameRect, m_shouldPaint, m_isDescendant, false)); 115 OwnPtr<FloatingObject> cloneObject = adoptPtr(new FloatingObject(layoutObjec t(), getType(), m_frameRect, m_shouldPaint, m_isDescendant, false));
117 cloneObject->m_isPlaced = m_isPlaced; 116 cloneObject->m_isPlaced = m_isPlaced;
118 return cloneObject; 117 return cloneObject;
119 } 118 }
120 119
121 template <FloatingObject::Type FloatTypeValue> 120 template <FloatingObject::Type FloatTypeValue>
122 class ComputeFloatOffsetAdapter { 121 class ComputeFloatOffsetAdapter {
123 public: 122 public:
124 typedef FloatingObjectInterval IntervalType; 123 typedef FloatingObjectInterval IntervalType;
125 124
126 ComputeFloatOffsetAdapter(const LayoutBlockFlow* layoutObject, LayoutUnit li neTop, LayoutUnit lineBottom, LayoutUnit offset) 125 ComputeFloatOffsetAdapter(const LayoutBlockFlow* layoutObject, LayoutUnit li neTop, LayoutUnit lineBottom, LayoutUnit offset)
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 399
401 void FloatingObjects::markLowestFloatLogicalBottomCacheAsDirty() 400 void FloatingObjects::markLowestFloatLogicalBottomCacheAsDirty()
402 { 401 {
403 for (size_t i = 0; i < sizeof(m_lowestFloatBottomCache) / sizeof(FloatBottom CachedValue); ++i) 402 for (size_t i = 0; i < sizeof(m_lowestFloatBottomCache) / sizeof(FloatBottom CachedValue); ++i)
404 m_lowestFloatBottomCache[i].dirty = true; 403 m_lowestFloatBottomCache[i].dirty = true;
405 } 404 }
406 405
407 void FloatingObjects::moveAllToFloatInfoMap(LayoutBoxToFloatInfoMap& map) 406 void FloatingObjects::moveAllToFloatInfoMap(LayoutBoxToFloatInfoMap& map)
408 { 407 {
409 while (!m_set.isEmpty()) { 408 while (!m_set.isEmpty()) {
410 std::unique_ptr<FloatingObject> floatingObject = m_set.takeFirst(); 409 OwnPtr<FloatingObject> floatingObject = m_set.takeFirst();
411 LayoutBox* layoutObject = floatingObject->layoutObject(); 410 LayoutBox* layoutObject = floatingObject->layoutObject();
412 map.add(layoutObject, std::move(floatingObject)); 411 map.add(layoutObject, std::move(floatingObject));
413 } 412 }
414 clear(); 413 clear();
415 } 414 }
416 415
417 inline void FloatingObjects::increaseObjectsCount(FloatingObject::Type type) 416 inline void FloatingObjects::increaseObjectsCount(FloatingObject::Type type)
418 { 417 {
419 if (type == FloatingObject::FloatLeft) 418 if (type == FloatingObject::FloatLeft)
420 m_leftObjectsCount++; 419 m_leftObjectsCount++;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 ASSERT_UNUSED(removed, removed); 459 ASSERT_UNUSED(removed, removed);
461 } 460 }
462 461
463 floatingObject.setIsPlaced(false); 462 floatingObject.setIsPlaced(false);
464 #if ENABLE(ASSERT) 463 #if ENABLE(ASSERT)
465 floatingObject.setIsInPlacedTree(false); 464 floatingObject.setIsInPlacedTree(false);
466 #endif 465 #endif
467 markLowestFloatLogicalBottomCacheAsDirty(); 466 markLowestFloatLogicalBottomCacheAsDirty();
468 } 467 }
469 468
470 FloatingObject* FloatingObjects::add(std::unique_ptr<FloatingObject> floatingObj ect) 469 FloatingObject* FloatingObjects::add(PassOwnPtr<FloatingObject> floatingObject)
471 { 470 {
472 FloatingObject* newObject = floatingObject.release(); 471 FloatingObject* newObject = floatingObject.leakPtr();
473 increaseObjectsCount(newObject->getType()); 472 increaseObjectsCount(newObject->getType());
474 m_set.add(wrapUnique(newObject)); 473 m_set.add(adoptPtr(newObject));
475 if (newObject->isPlaced()) 474 if (newObject->isPlaced())
476 addPlacedObject(*newObject); 475 addPlacedObject(*newObject);
477 markLowestFloatLogicalBottomCacheAsDirty(); 476 markLowestFloatLogicalBottomCacheAsDirty();
478 return newObject; 477 return newObject;
479 } 478 }
480 479
481 void FloatingObjects::remove(FloatingObject* toBeRemoved) 480 void FloatingObjects::remove(FloatingObject* toBeRemoved)
482 { 481 {
483 decreaseObjectsCount(toBeRemoved->getType()); 482 decreaseObjectsCount(toBeRemoved->getType());
484 std::unique_ptr<FloatingObject> floatingObject = m_set.take(toBeRemoved); 483 OwnPtr<FloatingObject> floatingObject = m_set.take(toBeRemoved);
485 ASSERT(floatingObject->isPlaced() || !floatingObject->isInPlacedTree()); 484 ASSERT(floatingObject->isPlaced() || !floatingObject->isInPlacedTree());
486 if (floatingObject->isPlaced()) 485 if (floatingObject->isPlaced())
487 removePlacedObject(*floatingObject); 486 removePlacedObject(*floatingObject);
488 markLowestFloatLogicalBottomCacheAsDirty(); 487 markLowestFloatLogicalBottomCacheAsDirty();
489 ASSERT(!floatingObject->originatingLine()); 488 ASSERT(!floatingObject->originatingLine());
490 } 489 }
491 490
492 void FloatingObjects::computePlacedFloatsTree() 491 void FloatingObjects::computePlacedFloatsTree()
493 { 492 {
494 ASSERT(!m_placedFloatsTree.isInitialized()); 493 ASSERT(!m_placedFloatsTree.isInitialized());
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 } 638 }
640 639
641 String ValueToString<FloatingObject*>::toString(const FloatingObject* floatingOb ject) 640 String ValueToString<FloatingObject*>::toString(const FloatingObject* floatingOb ject)
642 { 641 {
643 return String::format("%p (%gx%g %gx%g)", floatingObject, floatingObject->fr ameRect().x().toFloat(), floatingObject->frameRect().y().toFloat(), floatingObje ct->frameRect().maxX().toFloat(), floatingObject->frameRect().maxY().toFloat()); 642 return String::format("%p (%gx%g %gx%g)", floatingObject, floatingObject->fr ameRect().x().toFloat(), floatingObject->frameRect().y().toFloat(), floatingObje ct->frameRect().maxX().toFloat(), floatingObject->frameRect().maxY().toFloat());
644 } 643 }
645 #endif 644 #endif
646 645
647 646
648 } // namespace blink 647 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/FloatingObjects.h ('k') | third_party/WebKit/Source/core/layout/HitTestLocation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698