OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. |
7 * Copyright (C) 2009 Google Inc. All rights reserved. | 7 * Copyright (C) 2009 Google Inc. All rights reserved. |
8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) | 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) |
9 * | 9 * |
10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
858 LayoutObject* ancestor = parent(); | 858 LayoutObject* ancestor = parent(); |
859 for (; ancestor && !ancestor->canContainFixedPositionObjects(); ancestor = a ncestor->parent()) { | 859 for (; ancestor && !ancestor->canContainFixedPositionObjects(); ancestor = a ncestor->parent()) { |
860 if (paintInvalidationContainerSkipped && ancestor == paintInvalidationCo ntainer) | 860 if (paintInvalidationContainerSkipped && ancestor == paintInvalidationCo ntainer) |
861 *paintInvalidationContainerSkipped = true; | 861 *paintInvalidationContainerSkipped = true; |
862 } | 862 } |
863 | 863 |
864 ASSERT(!ancestor || !ancestor->isAnonymousBlock()); | 864 ASSERT(!ancestor || !ancestor->isAnonymousBlock()); |
865 return toLayoutBlock(ancestor); | 865 return toLayoutBlock(ancestor); |
866 } | 866 } |
867 | 867 |
868 LayoutBlock* LayoutObject::containerForAbsolutePosition() const | |
869 { | |
870 LayoutObject* o = parent(); | |
871 while (o) { | |
872 if (o->style()->position() != StaticPosition && (!o->isInline() || o->is Replaced())) | |
873 break; | |
874 | |
875 if (o->canContainFixedPositionObjects()) | |
876 break; | |
877 | |
878 o = o->parent(); | |
879 } | |
880 | |
881 if (o && !o->isLayoutBlock()) | |
882 o = o->containingBlock(); | |
883 | |
884 while (o && o->isAnonymousBlock()) | |
885 o = o->containingBlock(); | |
886 | |
887 if (!o || !o->isLayoutBlock()) | |
888 return nullptr; // This can still happen in case of an orphaned tree | |
889 | |
890 return toLayoutBlock(o); | |
891 } | |
892 | |
868 LayoutBlock* LayoutObject::containingBlock() const | 893 LayoutBlock* LayoutObject::containingBlock() const |
869 { | 894 { |
870 LayoutObject* o = parent(); | 895 LayoutObject* o = parent(); |
871 if (!o && isLayoutScrollbarPart()) | 896 if (!o && isLayoutScrollbarPart()) |
872 o = toLayoutScrollbarPart(this)->layoutObjectOwningScrollbar(); | 897 o = toLayoutScrollbarPart(this)->layoutObjectOwningScrollbar(); |
873 if (!isTextOrSVGChild() && m_style->position() == FixedPosition) | 898 if (!isTextOrSVGChild() && m_style->position() == FixedPosition) |
874 return containerForFixedPosition(); | 899 return containerForFixedPosition(); |
875 if (!isTextOrSVGChild() && m_style->position() == AbsolutePosition) { | 900 if (!isTextOrSVGChild() && m_style->position() == AbsolutePosition) |
mstensho (USE GERRIT)
2015/07/06 09:46:24
Kind of silly to call isTextOrSVGChild() all day l
kojii
2015/07/07 08:40:38
Done.
| |
876 while (o) { | 901 return containerForAbsolutePosition(); |
mstensho (USE GERRIT)
2015/07/06 09:46:24
containingBlockForAbsolutePosition() is a better n
kojii
2015/07/07 08:40:38
Done.
| |
877 if (o->style()->position() != StaticPosition && (!o->isInline() || o ->isReplaced())) | 902 if (isColumnSpanAll()) { |
878 break; | |
879 | |
880 if (o->canContainFixedPositionObjects()) | |
881 break; | |
882 | |
883 o = o->parent(); | |
884 } | |
885 | |
886 if (o && !o->isLayoutBlock()) | |
887 o = o->containingBlock(); | |
888 | |
889 while (o && o->isAnonymousBlock()) | |
890 o = o->containingBlock(); | |
891 } else if (isColumnSpanAll()) { | |
892 o = spannerPlaceholder()->containingBlock(); | 903 o = spannerPlaceholder()->containingBlock(); |
893 } else { | 904 } else { |
894 while (o && ((o->isInline() && !o->isReplaced()) || !o->isLayoutBlock()) ) | 905 while (o && ((o->isInline() && !o->isReplaced()) || !o->isLayoutBlock()) ) |
895 o = o->parent(); | 906 o = o->parent(); |
896 } | 907 } |
897 | 908 |
898 if (!o || !o->isLayoutBlock()) | 909 if (!o || !o->isLayoutBlock()) |
899 return nullptr; // This can still happen in case of an orphaned tree | 910 return nullptr; // This can still happen in case of an orphaned tree |
900 | 911 |
901 return toLayoutBlock(o); | 912 return toLayoutBlock(o); |
(...skipping 2374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3276 const blink::LayoutObject* root = object1; | 3287 const blink::LayoutObject* root = object1; |
3277 while (root->parent()) | 3288 while (root->parent()) |
3278 root = root->parent(); | 3289 root = root->parent(); |
3279 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3290 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
3280 } else { | 3291 } else { |
3281 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); | 3292 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); |
3282 } | 3293 } |
3283 } | 3294 } |
3284 | 3295 |
3285 #endif | 3296 #endif |
OLD | NEW |