Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) | 3 * (C) 2000 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) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All r ights reserved. | 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All r ights reserved. |
| 7 * Copyright (C) 2009 Google Inc. All rights reserved. | 7 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 196 // Convenience function for getting to the nearest enclosing box of a Layout Object. | 196 // Convenience function for getting to the nearest enclosing box of a Layout Object. |
| 197 LayoutBox* enclosingBox() const; | 197 LayoutBox* enclosingBox() const; |
| 198 LayoutBoxModelObject* enclosingBoxModelObject() const; | 198 LayoutBoxModelObject* enclosingBoxModelObject() const; |
| 199 | 199 |
| 200 LayoutBox* enclosingScrollableBox() const; | 200 LayoutBox* enclosingScrollableBox() const; |
| 201 | 201 |
| 202 // Function to return our enclosing flow thread if we are contained inside o ne. This | 202 // Function to return our enclosing flow thread if we are contained inside o ne. This |
| 203 // function follows the containing block chain. | 203 // function follows the containing block chain. |
| 204 LayoutFlowThread* flowThreadContainingBlock() const | 204 LayoutFlowThread* flowThreadContainingBlock() const |
| 205 { | 205 { |
| 206 if (flowThreadState() == NotInsideFlowThread) | 206 if (!isInsideFlowThread()) |
| 207 return 0; | 207 return 0; |
| 208 return locateFlowThreadContainingBlock(); | 208 return locateFlowThreadContainingBlock(); |
| 209 } | 209 } |
| 210 | 210 |
| 211 #if ENABLE(ASSERT) | 211 #if ENABLE(ASSERT) |
| 212 void setHasAXObject(bool flag) { m_hasAXObject = flag; } | 212 void setHasAXObject(bool flag) { m_hasAXObject = flag; } |
| 213 bool hasAXObject() const { return m_hasAXObject; } | 213 bool hasAXObject() const { return m_hasAXObject; } |
| 214 | 214 |
| 215 // Helper class forbidding calls to setNeedsLayout() during its lifetime. | 215 // Helper class forbidding calls to setNeedsLayout() during its lifetime. |
| 216 class SetLayoutNeededForbiddenScope { | 216 class SetLayoutNeededForbiddenScope { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 280 // Helper functions. Dangerous to use! | 280 // Helper functions. Dangerous to use! |
| 281 void setPreviousSibling(LayoutObject* previous) { m_previous = previous; } | 281 void setPreviousSibling(LayoutObject* previous) { m_previous = previous; } |
| 282 void setNextSibling(LayoutObject* next) { m_next = next; } | 282 void setNextSibling(LayoutObject* next) { m_next = next; } |
| 283 void setParent(LayoutObject* parent) | 283 void setParent(LayoutObject* parent) |
| 284 { | 284 { |
| 285 m_parent = parent; | 285 m_parent = parent; |
| 286 | 286 |
| 287 // Only update if our flow thread state is different from our new parent and if we're not a LayoutFlowThread. | 287 // Only update if our flow thread state is different from our new parent and if we're not a LayoutFlowThread. |
| 288 // A LayoutFlowThread is always considered to be inside itself, so it ne ver has to change its state | 288 // A LayoutFlowThread is always considered to be inside itself, so it ne ver has to change its state |
| 289 // in response to parent changes. | 289 // in response to parent changes. |
| 290 FlowThreadState newState = parent ? parent->flowThreadState() : NotInsid eFlowThread; | 290 bool insideFlowThread = parent && parent->isInsideFlowThread(); |
| 291 if (newState != flowThreadState() && !isLayoutFlowThread()) | 291 if (insideFlowThread != isInsideFlowThread() && !isLayoutFlowThread()) |
| 292 setFlowThreadStateIncludingDescendants(newState); | 292 setIsInsideFlowThreadIncludingDescendants(insideFlowThread); |
| 293 } | 293 } |
| 294 | 294 |
| 295 ////////////////////////////////////////// | 295 ////////////////////////////////////////// |
| 296 private: | 296 private: |
| 297 #if ENABLE(ASSERT) | 297 #if ENABLE(ASSERT) |
| 298 bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; } | 298 bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; } |
| 299 void setNeedsLayoutIsForbidden(bool flag) { m_setNeedsLayoutForbidden = flag ; } | 299 void setNeedsLayoutIsForbidden(bool flag) { m_setNeedsLayoutForbidden = flag ; } |
| 300 #endif | 300 #endif |
| 301 | 301 |
| 302 void addAbsoluteRectForLayer(IntRect& result); | 302 void addAbsoluteRectForLayer(IntRect& result); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 423 } | 423 } |
| 424 | 424 |
| 425 bool ancestorLineBoxDirty() const { return m_bitfields.ancestorLineBoxDirty( ); } | 425 bool ancestorLineBoxDirty() const { return m_bitfields.ancestorLineBoxDirty( ); } |
| 426 void setAncestorLineBoxDirty(bool value = true) | 426 void setAncestorLineBoxDirty(bool value = true) |
| 427 { | 427 { |
| 428 m_bitfields.setAncestorLineBoxDirty(value); | 428 m_bitfields.setAncestorLineBoxDirty(value); |
| 429 if (value) | 429 if (value) |
| 430 setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidationReason::Lin eBoxesChanged); | 430 setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidationReason::Lin eBoxesChanged); |
| 431 } | 431 } |
| 432 | 432 |
| 433 enum FlowThreadState { | 433 void setIsInsideFlowThreadIncludingDescendants(bool); |
| 434 NotInsideFlowThread = 0, | |
| 435 InsideOutOfFlowThread = 1, | |
| 436 InsideInFlowThread = 2, | |
| 437 }; | |
| 438 | 434 |
| 439 void setFlowThreadStateIncludingDescendants(FlowThreadState); | 435 bool isInsideFlowThread() const { return m_bitfields.isInsideFlowThread(); } |
| 440 | 436 void setIsInsideFlowThread(bool insideFlowThread) { m_bitfields.setIsInsideF lowThread(insideFlowThread); } |
| 441 FlowThreadState flowThreadState() const { return m_bitfields.flowThreadState (); } | |
| 442 void setFlowThreadState(FlowThreadState state) { m_bitfields.setFlowThreadSt ate(state); } | |
| 443 | 437 |
| 444 // FIXME: Until all SVG layoutObjects can be subclasses of LayoutSVGModelObj ect we have | 438 // FIXME: Until all SVG layoutObjects can be subclasses of LayoutSVGModelObj ect we have |
| 445 // to add SVG layoutObject methods to LayoutObject with an ASSERT_NOT_REACHE D() default implementation. | 439 // to add SVG layoutObject methods to LayoutObject with an ASSERT_NOT_REACHE D() default implementation. |
| 446 bool isSVG() const { return isOfType(LayoutObjectSVG); } | 440 bool isSVG() const { return isOfType(LayoutObjectSVG); } |
| 447 bool isSVGRoot() const { return isOfType(LayoutObjectSVGRoot); } | 441 bool isSVGRoot() const { return isOfType(LayoutObjectSVGRoot); } |
| 448 bool isSVGContainer() const { return isOfType(LayoutObjectSVGContainer); } | 442 bool isSVGContainer() const { return isOfType(LayoutObjectSVGContainer); } |
| 449 bool isSVGTransformableContainer() const { return isOfType(LayoutObjectSVGTr ansformableContainer); } | 443 bool isSVGTransformableContainer() const { return isOfType(LayoutObjectSVGTr ansformableContainer); } |
| 450 bool isSVGViewportContainer() const { return isOfType(LayoutObjectSVGViewpor tContainer); } | 444 bool isSVGViewportContainer() const { return isOfType(LayoutObjectSVGViewpor tContainer); } |
| 451 bool isSVGGradientStop() const { return isOfType(LayoutObjectSVGGradientStop ); } | 445 bool isSVGGradientStop() const { return isOfType(LayoutObjectSVGGradientStop ); } |
| 452 bool isSVGHiddenContainer() const { return isOfType(LayoutObjectSVGHiddenCon tainer); } | 446 bool isSVGHiddenContainer() const { return isOfType(LayoutObjectSVGHiddenCon tainer); } |
| (...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1300 , m_isDragging(false) | 1294 , m_isDragging(false) |
| 1301 , m_hasLayer(false) | 1295 , m_hasLayer(false) |
| 1302 , m_hasOverflowClip(false) | 1296 , m_hasOverflowClip(false) |
| 1303 , m_hasTransformRelatedProperty(false) | 1297 , m_hasTransformRelatedProperty(false) |
| 1304 , m_hasReflection(false) | 1298 , m_hasReflection(false) |
| 1305 , m_hasCounterNodeMap(false) | 1299 , m_hasCounterNodeMap(false) |
| 1306 , m_everHadLayout(false) | 1300 , m_everHadLayout(false) |
| 1307 , m_ancestorLineBoxDirty(false) | 1301 , m_ancestorLineBoxDirty(false) |
| 1308 , m_layoutDidGetCalledSinceLastFrame(false) | 1302 , m_layoutDidGetCalledSinceLastFrame(false) |
| 1309 , m_hasPendingResourceUpdate(false) | 1303 , m_hasPendingResourceUpdate(false) |
| 1304 , m_isInsideFlowThread(false) | |
| 1310 , m_childrenInline(false) | 1305 , m_childrenInline(false) |
| 1311 , m_hasColumns(false) | 1306 , m_hasColumns(false) |
| 1312 , m_alwaysCreateLineBoxesForLayoutInline(false) | 1307 , m_alwaysCreateLineBoxesForLayoutInline(false) |
| 1313 , m_lastBoxDecorationBackgroundObscured(false) | 1308 , m_lastBoxDecorationBackgroundObscured(false) |
| 1314 , m_positionedState(IsStaticallyPositioned) | 1309 , m_positionedState(IsStaticallyPositioned) |
| 1315 , m_selectionState(SelectionNone) | 1310 , m_selectionState(SelectionNone) |
| 1316 , m_flowThreadState(NotInsideFlowThread) | |
| 1317 , m_boxDecorationBackgroundState(NoBoxDecorationBackground) | 1311 , m_boxDecorationBackgroundState(NoBoxDecorationBackground) |
| 1318 , m_fullPaintInvalidationReason(PaintInvalidationNone) | 1312 , m_fullPaintInvalidationReason(PaintInvalidationNone) |
| 1319 { | 1313 { |
| 1320 } | 1314 } |
| 1321 | 1315 |
| 1322 // 32 bits have been used in the first word, and 14 in the second. | 1316 // 32 bits have been used in the first word, and 14 in the second. |
|
mstensho (USE GERRIT)
2015/05/05 19:09:09
Note: I counted the bits over and over again, and
| |
| 1323 ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout); | 1317 ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout); |
| 1324 ADD_BOOLEAN_BITFIELD(shouldInvalidateOverflowForPaint, ShouldInvalidateO verflowForPaint); | 1318 ADD_BOOLEAN_BITFIELD(shouldInvalidateOverflowForPaint, ShouldInvalidateO verflowForPaint); |
| 1325 ADD_BOOLEAN_BITFIELD(mayNeedPaintInvalidation, MayNeedPaintInvalidation) ; | 1319 ADD_BOOLEAN_BITFIELD(mayNeedPaintInvalidation, MayNeedPaintInvalidation) ; |
| 1326 ADD_BOOLEAN_BITFIELD(shouldInvalidateSelection, ShouldInvalidateSelectio n); | 1320 ADD_BOOLEAN_BITFIELD(shouldInvalidateSelection, ShouldInvalidateSelectio n); |
| 1327 ADD_BOOLEAN_BITFIELD(neededLayoutBecauseOfChildren, NeededLayoutBecauseO fChildren); | 1321 ADD_BOOLEAN_BITFIELD(neededLayoutBecauseOfChildren, NeededLayoutBecauseO fChildren); |
| 1328 ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovem entLayout); | 1322 ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovem entLayout); |
| 1329 ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout); | 1323 ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout); |
| 1330 ADD_BOOLEAN_BITFIELD(posChildNeedsLayout, PosChildNeedsLayout); | 1324 ADD_BOOLEAN_BITFIELD(posChildNeedsLayout, PosChildNeedsLayout); |
| 1331 ADD_BOOLEAN_BITFIELD(needsSimplifiedNormalFlowLayout, NeedsSimplifiedNor malFlowLayout); | 1325 ADD_BOOLEAN_BITFIELD(needsSimplifiedNormalFlowLayout, NeedsSimplifiedNor malFlowLayout); |
| 1332 ADD_BOOLEAN_BITFIELD(preferredLogicalWidthsDirty, PreferredLogicalWidths Dirty); | 1326 ADD_BOOLEAN_BITFIELD(preferredLogicalWidthsDirty, PreferredLogicalWidths Dirty); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 1348 ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection); | 1342 ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection); |
| 1349 | 1343 |
| 1350 ADD_BOOLEAN_BITFIELD(hasCounterNodeMap, HasCounterNodeMap); | 1344 ADD_BOOLEAN_BITFIELD(hasCounterNodeMap, HasCounterNodeMap); |
| 1351 ADD_BOOLEAN_BITFIELD(everHadLayout, EverHadLayout); | 1345 ADD_BOOLEAN_BITFIELD(everHadLayout, EverHadLayout); |
| 1352 ADD_BOOLEAN_BITFIELD(ancestorLineBoxDirty, AncestorLineBoxDirty); | 1346 ADD_BOOLEAN_BITFIELD(ancestorLineBoxDirty, AncestorLineBoxDirty); |
| 1353 | 1347 |
| 1354 ADD_BOOLEAN_BITFIELD(layoutDidGetCalledSinceLastFrame, LayoutDidGetCalle dSinceLastFrame); | 1348 ADD_BOOLEAN_BITFIELD(layoutDidGetCalledSinceLastFrame, LayoutDidGetCalle dSinceLastFrame); |
| 1355 | 1349 |
| 1356 ADD_BOOLEAN_BITFIELD(hasPendingResourceUpdate, HasPendingResourceUpdate) ; | 1350 ADD_BOOLEAN_BITFIELD(hasPendingResourceUpdate, HasPendingResourceUpdate) ; |
| 1357 | 1351 |
| 1352 ADD_BOOLEAN_BITFIELD(isInsideFlowThread, IsInsideFlowThread); | |
| 1353 | |
| 1358 // from LayoutBlock | 1354 // from LayoutBlock |
| 1359 ADD_BOOLEAN_BITFIELD(childrenInline, ChildrenInline); | 1355 ADD_BOOLEAN_BITFIELD(childrenInline, ChildrenInline); |
| 1360 ADD_BOOLEAN_BITFIELD(hasColumns, HasColumns); | 1356 ADD_BOOLEAN_BITFIELD(hasColumns, HasColumns); |
| 1361 | 1357 |
| 1362 // from LayoutInline | 1358 // from LayoutInline |
| 1363 ADD_BOOLEAN_BITFIELD(alwaysCreateLineBoxesForLayoutInline, AlwaysCreateL ineBoxesForLayoutInline); | 1359 ADD_BOOLEAN_BITFIELD(alwaysCreateLineBoxesForLayoutInline, AlwaysCreateL ineBoxesForLayoutInline); |
| 1364 | 1360 |
| 1365 // For slimming-paint. | 1361 // For slimming-paint. |
| 1366 ADD_BOOLEAN_BITFIELD(lastBoxDecorationBackgroundObscured, LastBoxDecorat ionBackgroundObscured); | 1362 ADD_BOOLEAN_BITFIELD(lastBoxDecorationBackgroundObscured, LastBoxDecorat ionBackgroundObscured); |
| 1367 | 1363 |
| 1368 private: | 1364 private: |
| 1369 unsigned m_positionedState : 2; // PositionedState | 1365 unsigned m_positionedState : 2; // PositionedState |
| 1370 unsigned m_selectionState : 3; // SelectionState | 1366 unsigned m_selectionState : 3; // SelectionState |
| 1371 unsigned m_flowThreadState : 2; // FlowThreadState | |
| 1372 unsigned m_boxDecorationBackgroundState : 2; // BoxDecorationBackgroundS tate | 1367 unsigned m_boxDecorationBackgroundState : 2; // BoxDecorationBackgroundS tate |
| 1373 unsigned m_fullPaintInvalidationReason : 5; // PaintInvalidationReason | 1368 unsigned m_fullPaintInvalidationReason : 5; // PaintInvalidationReason |
| 1374 | 1369 |
| 1375 public: | 1370 public: |
| 1376 bool isOutOfFlowPositioned() const { return m_positionedState == IsOutOf FlowPositioned; } | 1371 bool isOutOfFlowPositioned() const { return m_positionedState == IsOutOf FlowPositioned; } |
| 1377 bool isRelPositioned() const { return m_positionedState == IsRelativelyP ositioned; } | 1372 bool isRelPositioned() const { return m_positionedState == IsRelativelyP ositioned; } |
| 1378 bool isPositioned() const { return m_positionedState != IsStaticallyPosi tioned; } | 1373 bool isPositioned() const { return m_positionedState != IsStaticallyPosi tioned; } |
| 1379 | 1374 |
| 1380 void setPositionedState(int positionState) | 1375 void setPositionedState(int positionState) |
| 1381 { | 1376 { |
| 1382 // This mask maps FixedPosition and AbsolutePosition to IsOutOfFlowP ositioned, saving one bit. | 1377 // This mask maps FixedPosition and AbsolutePosition to IsOutOfFlowP ositioned, saving one bit. |
| 1383 m_positionedState = static_cast<PositionedState>(positionState & 0x3 ); | 1378 m_positionedState = static_cast<PositionedState>(positionState & 0x3 ); |
| 1384 } | 1379 } |
| 1385 void clearPositionedState() { m_positionedState = StaticPosition; } | 1380 void clearPositionedState() { m_positionedState = StaticPosition; } |
| 1386 | 1381 |
| 1387 ALWAYS_INLINE SelectionState selectionState() const { return static_cast <SelectionState>(m_selectionState); } | 1382 ALWAYS_INLINE SelectionState selectionState() const { return static_cast <SelectionState>(m_selectionState); } |
| 1388 ALWAYS_INLINE void setSelectionState(SelectionState selectionState) { m_ selectionState = selectionState; } | 1383 ALWAYS_INLINE void setSelectionState(SelectionState selectionState) { m_ selectionState = selectionState; } |
| 1389 | 1384 |
| 1390 ALWAYS_INLINE FlowThreadState flowThreadState() const { return static_ca st<FlowThreadState>(m_flowThreadState); } | |
| 1391 ALWAYS_INLINE void setFlowThreadState(FlowThreadState flowThreadState) { m_flowThreadState = flowThreadState; } | |
| 1392 | |
| 1393 ALWAYS_INLINE BoxDecorationBackgroundState boxDecorationBackgroundState( ) const { return static_cast<BoxDecorationBackgroundState>(m_boxDecorationBackgr oundState); } | 1385 ALWAYS_INLINE BoxDecorationBackgroundState boxDecorationBackgroundState( ) const { return static_cast<BoxDecorationBackgroundState>(m_boxDecorationBackgr oundState); } |
| 1394 ALWAYS_INLINE void setBoxDecorationBackgroundState(BoxDecorationBackgrou ndState s) { m_boxDecorationBackgroundState = s; } | 1386 ALWAYS_INLINE void setBoxDecorationBackgroundState(BoxDecorationBackgrou ndState s) { m_boxDecorationBackgroundState = s; } |
| 1395 | 1387 |
| 1396 PaintInvalidationReason fullPaintInvalidationReason() const { return sta tic_cast<PaintInvalidationReason>(m_fullPaintInvalidationReason); } | 1388 PaintInvalidationReason fullPaintInvalidationReason() const { return sta tic_cast<PaintInvalidationReason>(m_fullPaintInvalidationReason); } |
| 1397 void setFullPaintInvalidationReason(PaintInvalidationReason reason) { m_ fullPaintInvalidationReason = reason; } | 1389 void setFullPaintInvalidationReason(PaintInvalidationReason reason) { m_ fullPaintInvalidationReason = reason; } |
| 1398 }; | 1390 }; |
| 1399 | 1391 |
| 1400 #undef ADD_BOOLEAN_BITFIELD | 1392 #undef ADD_BOOLEAN_BITFIELD |
| 1401 | 1393 |
| 1402 LayoutObjectBitfields m_bitfields; | 1394 LayoutObjectBitfields m_bitfields; |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1649 void showTree(const blink::LayoutObject*); | 1641 void showTree(const blink::LayoutObject*); |
| 1650 void showLineTree(const blink::LayoutObject*); | 1642 void showLineTree(const blink::LayoutObject*); |
| 1651 void showLayoutTree(const blink::LayoutObject* object1); | 1643 void showLayoutTree(const blink::LayoutObject* object1); |
| 1652 // We don't make object2 an optional parameter so that showLayoutTree | 1644 // We don't make object2 an optional parameter so that showLayoutTree |
| 1653 // can be called from gdb easily. | 1645 // can be called from gdb easily. |
| 1654 void showLayoutTree(const blink::LayoutObject* object1, const blink::LayoutObjec t* object2); | 1646 void showLayoutTree(const blink::LayoutObject* object1, const blink::LayoutObjec t* object2); |
| 1655 | 1647 |
| 1656 #endif | 1648 #endif |
| 1657 | 1649 |
| 1658 #endif // LayoutObject_h | 1650 #endif // LayoutObject_h |
| OLD | NEW |