| 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) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
| 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 7 * Copyright (C) 2010 Google Inc. All rights reserved. | 7 * Copyright (C) 2010 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 759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 770 } | 770 } |
| 771 | 771 |
| 772 LayoutPoint LayoutBoxModelObject::adjustedPositionRelativeTo(const LayoutPoint&
startPoint, const Element* element) const | 772 LayoutPoint LayoutBoxModelObject::adjustedPositionRelativeTo(const LayoutPoint&
startPoint, const Element* element) const |
| 773 { | 773 { |
| 774 // If the element is the HTML body element or doesn't have a parent | 774 // If the element is the HTML body element or doesn't have a parent |
| 775 // return 0 and stop this algorithm. | 775 // return 0 and stop this algorithm. |
| 776 if (isBody() || !parent()) | 776 if (isBody() || !parent()) |
| 777 return LayoutPoint(); | 777 return LayoutPoint(); |
| 778 | 778 |
| 779 LayoutPoint referencePoint = startPoint; | 779 LayoutPoint referencePoint = startPoint; |
| 780 referencePoint.move(parent()->columnOffset(referencePoint)); | |
| 781 | 780 |
| 782 // If the base element is null, return the distance between the canvas origi
n and | 781 // If the base element is null, return the distance between the canvas origi
n and |
| 783 // the left border edge of the element and stop this algorithm. | 782 // the left border edge of the element and stop this algorithm. |
| 784 if (!element) | 783 if (!element) |
| 785 return referencePoint; | 784 return referencePoint; |
| 786 | 785 |
| 787 if (const LayoutBoxModelObject* offsetParent = element->layoutBoxModelObject
()) { | 786 if (const LayoutBoxModelObject* offsetParent = element->layoutBoxModelObject
()) { |
| 788 if (offsetParent->isBox() && !offsetParent->isBody()) | 787 if (!isOutOfFlowPositioned()) { |
| 789 referencePoint.move(-toLayoutBox(offsetParent)->borderLeft(), -toLay
outBox(offsetParent)->borderTop()); | |
| 790 if (!isOutOfFlowPositioned() || flowThreadContainingBlock()) { | |
| 791 if (isInFlowPositioned()) | 788 if (isInFlowPositioned()) |
| 792 referencePoint.move(offsetForInFlowPosition()); | 789 referencePoint.move(offsetForInFlowPosition()); |
| 793 | 790 |
| 794 LayoutObject* current; | 791 // Note that we may fail to find |offsetParent| while walking the co
ntainer chain, if |
| 795 for (current = parent(); current != offsetParent && current->parent(
); current = current->parent()) { | 792 // |offsetParent| is an inline split into continuations. |
| 793 // <body style="display:inline;" id="offsetParent"><div></div><span
id="this"> |
| 794 // This is why we have to do a nullptr check here. |
| 795 // offset(Left|Top) is generally broken when offsetParent is inline. |
| 796 for (const LayoutObject* current = container(); current && current !
= offsetParent; current = current->container()) { |
| 796 // FIXME: What are we supposed to do inside SVG content? | 797 // FIXME: What are we supposed to do inside SVG content? |
| 797 if (!isOutOfFlowPositioned()) { | 798 referencePoint.move(current->columnOffset(referencePoint)); |
| 798 if (current->isBox() && !current->isTableRow()) | 799 if (current->isBox() && !current->isTableRow()) |
| 799 referencePoint.moveBy(toLayoutBox(current)->topLeftLocat
ion()); | 800 referencePoint.moveBy(toLayoutBox(current)->topLeftLocation(
)); |
| 800 referencePoint.move(current->parent()->columnOffset(referenc
ePoint)); | |
| 801 } | |
| 802 } | 801 } |
| 803 | 802 |
| 804 if (offsetParent->isBox() && offsetParent->isBody() && !offsetParent
->isPositioned()) | 803 if (offsetParent->isBox() && offsetParent->isBody() && !offsetParent
->isPositioned()) |
| 805 referencePoint.moveBy(toLayoutBox(offsetParent)->topLeftLocation
()); | 804 referencePoint.moveBy(toLayoutBox(offsetParent)->topLeftLocation
()); |
| 806 } | 805 } |
| 806 if (offsetParent->isBox() && !offsetParent->isBody()) |
| 807 referencePoint.move(-toLayoutBox(offsetParent)->borderLeft(), -toLay
outBox(offsetParent)->borderTop()); |
| 807 } | 808 } |
| 808 | 809 |
| 809 return referencePoint; | 810 return referencePoint; |
| 810 } | 811 } |
| 811 | 812 |
| 812 LayoutSize LayoutBoxModelObject::offsetForInFlowPosition() const | 813 LayoutSize LayoutBoxModelObject::offsetForInFlowPosition() const |
| 813 { | 814 { |
| 814 if (isRelPositioned()) | 815 if (isRelPositioned()) |
| 815 return relativePositionOffset(); | 816 return relativePositionOffset(); |
| 816 | 817 |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1135 if (rootElementStyle->hasBackground()) | 1136 if (rootElementStyle->hasBackground()) |
| 1136 return false; | 1137 return false; |
| 1137 | 1138 |
| 1138 if (node() != document().firstBodyElement()) | 1139 if (node() != document().firstBodyElement()) |
| 1139 return false; | 1140 return false; |
| 1140 | 1141 |
| 1141 return true; | 1142 return true; |
| 1142 } | 1143 } |
| 1143 | 1144 |
| 1144 } // namespace blink | 1145 } // namespace blink |
| OLD | NEW |