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, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 7 * Copyright (C) 2013 Adobe Systems Incorporated. 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 1854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1865 mode |= IsFixed; | 1865 mode |= IsFixed; |
1866 | 1866 |
1867 RenderBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState); | 1867 RenderBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState); |
1868 } | 1868 } |
1869 | 1869 |
1870 LayoutSize RenderBox::offsetFromContainer(const RenderObject* o, const LayoutPoi
nt& point, bool* offsetDependsOnPoint) const | 1870 LayoutSize RenderBox::offsetFromContainer(const RenderObject* o, const LayoutPoi
nt& point, bool* offsetDependsOnPoint) const |
1871 { | 1871 { |
1872 ASSERT(o == container()); | 1872 ASSERT(o == container()); |
1873 | 1873 |
1874 LayoutSize offset; | 1874 LayoutSize offset; |
1875 if (isInFlowPositioned()) | 1875 if (isRelPositioned()) |
1876 offset += offsetForInFlowPosition(); | 1876 offset += offsetForInFlowPosition(); |
1877 | 1877 |
1878 if (!isInline() || isReplaced()) { | 1878 if (!isInline() || isReplaced()) { |
1879 if (!style()->hasOutOfFlowPosition() && o->hasColumns()) { | 1879 if (!style()->hasOutOfFlowPosition() && o->hasColumns()) { |
1880 const RenderBlock* block = toRenderBlock(o); | 1880 const RenderBlock* block = toRenderBlock(o); |
1881 LayoutRect columnRect(frameRect()); | 1881 LayoutRect columnRect(frameRect()); |
1882 block->adjustStartEdgeForWritingModeIncludingColumns(columnRect); | 1882 block->adjustStartEdgeForWritingModeIncludingColumns(columnRect); |
1883 offset += toSize(columnRect.location()); | 1883 offset += toSize(columnRect.location()); |
1884 LayoutPoint columnPoint = block->flipForWritingModeIncludingColumns(
point + offset); | 1884 LayoutPoint columnPoint = block->flipForWritingModeIncludingColumns(
point + offset); |
1885 offset = toLayoutSize(block->flipForWritingModeIncludingColumns(toLa
youtPoint(offset))); | 1885 offset = toLayoutSize(block->flipForWritingModeIncludingColumns(toLa
youtPoint(offset))); |
(...skipping 12 matching lines...) Expand all Loading... |
1898 offset += o->columnOffset(pointInContainer); | 1898 offset += o->columnOffset(pointInContainer); |
1899 if (offsetDependsOnPoint) | 1899 if (offsetDependsOnPoint) |
1900 *offsetDependsOnPoint = true; | 1900 *offsetDependsOnPoint = true; |
1901 } | 1901 } |
1902 } | 1902 } |
1903 } | 1903 } |
1904 | 1904 |
1905 if (o->hasOverflowClip()) | 1905 if (o->hasOverflowClip()) |
1906 offset -= toRenderBox(o)->scrolledContentOffset(); | 1906 offset -= toRenderBox(o)->scrolledContentOffset(); |
1907 | 1907 |
1908 if (style()->position() == AbsolutePosition && o->isInFlowPositioned() && o-
>isRenderInline()) | 1908 if (style()->position() == AbsolutePosition && o->isRelPositioned() && o->is
RenderInline()) |
1909 offset += toRenderInline(o)->offsetForInFlowPositionedInline(*this); | 1909 offset += toRenderInline(o)->offsetForInFlowPositionedInline(*this); |
1910 | 1910 |
1911 return offset; | 1911 return offset; |
1912 } | 1912 } |
1913 | 1913 |
1914 InlineBox* RenderBox::createInlineBox() | 1914 InlineBox* RenderBox::createInlineBox() |
1915 { | 1915 { |
1916 return new InlineBox(*this); | 1916 return new InlineBox(*this); |
1917 } | 1917 } |
1918 | 1918 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2038 // We are now in our parent container's coordinate space. Apply our transfo
rm to obtain a bounding box | 2038 // We are now in our parent container's coordinate space. Apply our transfo
rm to obtain a bounding box |
2039 // in the parent's coordinate space that encloses us. | 2039 // in the parent's coordinate space that encloses us. |
2040 if (hasLayer() && layer()->transform()) { | 2040 if (hasLayer() && layer()->transform()) { |
2041 fixed = position == FixedPosition; | 2041 fixed = position == FixedPosition; |
2042 rect = layer()->transform()->mapRect(pixelSnappedIntRect(rect)); | 2042 rect = layer()->transform()->mapRect(pixelSnappedIntRect(rect)); |
2043 topLeft = rect.location(); | 2043 topLeft = rect.location(); |
2044 topLeft.move(locationOffset()); | 2044 topLeft.move(locationOffset()); |
2045 } else if (position == FixedPosition) | 2045 } else if (position == FixedPosition) |
2046 fixed = true; | 2046 fixed = true; |
2047 | 2047 |
2048 if (position == AbsolutePosition && o->isInFlowPositioned() && o->isRenderIn
line()) { | 2048 if (position == AbsolutePosition && o->isRelPositioned() && o->isRenderInlin
e()) { |
2049 topLeft += toRenderInline(o)->offsetForInFlowPositionedInline(*this); | 2049 topLeft += toRenderInline(o)->offsetForInFlowPositionedInline(*this); |
2050 } else if (styleToUse->hasInFlowPosition() && layer()) { | 2050 } else if (styleToUse->hasInFlowPosition() && layer()) { |
2051 // Apply the relative position offset when invalidating a rectangle. Th
e layer | 2051 // Apply the relative position offset when invalidating a rectangle. Th
e layer |
2052 // is translated, but the render box isn't, so we need to do this to get
the | 2052 // is translated, but the render box isn't, so we need to do this to get
the |
2053 // right dirty rect. Since this is called from RenderObject::setStyle,
the relative position | 2053 // right dirty rect. Since this is called from RenderObject::setStyle,
the relative position |
2054 // flag on the RenderObject has been cleared, so use the one on the styl
e(). | 2054 // flag on the RenderObject has been cleared, so use the one on the styl
e(). |
2055 topLeft += layer()->offsetForInFlowPosition(); | 2055 topLeft += layer()->offsetForInFlowPosition(); |
2056 } | 2056 } |
2057 | 2057 |
2058 if (position != AbsolutePosition && position != FixedPosition && o->hasColum
ns() && o->isRenderBlockFlow()) { | 2058 if (position != AbsolutePosition && position != FixedPosition && o->hasColum
ns() && o->isRenderBlockFlow()) { |
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2899 const RenderView* view = toRenderView(containingBlock); | 2899 const RenderView* view = toRenderView(containingBlock); |
2900 if (FrameView* frameView = view->frameView()) { | 2900 if (FrameView* frameView = view->frameView()) { |
2901 LayoutRect viewportRect = frameView->viewportConstrainedVisibleConte
ntRect(); | 2901 LayoutRect viewportRect = frameView->viewportConstrainedVisibleConte
ntRect(); |
2902 return containingBlock->isHorizontalWritingMode() ? viewportRect.wid
th() : viewportRect.height(); | 2902 return containingBlock->isHorizontalWritingMode() ? viewportRect.wid
th() : viewportRect.height(); |
2903 } | 2903 } |
2904 } | 2904 } |
2905 | 2905 |
2906 if (containingBlock->isBox()) | 2906 if (containingBlock->isBox()) |
2907 return toRenderBox(containingBlock)->clientLogicalWidth(); | 2907 return toRenderBox(containingBlock)->clientLogicalWidth(); |
2908 | 2908 |
2909 ASSERT(containingBlock->isRenderInline() && containingBlock->isInFlowPositio
ned()); | 2909 ASSERT(containingBlock->isRenderInline() && containingBlock->isRelPositioned
()); |
2910 | 2910 |
2911 const RenderInline* flow = toRenderInline(containingBlock); | 2911 const RenderInline* flow = toRenderInline(containingBlock); |
2912 InlineFlowBox* first = flow->firstLineBox(); | 2912 InlineFlowBox* first = flow->firstLineBox(); |
2913 InlineFlowBox* last = flow->lastLineBox(); | 2913 InlineFlowBox* last = flow->lastLineBox(); |
2914 | 2914 |
2915 // If the containing block is empty, return a width of 0. | 2915 // If the containing block is empty, return a width of 0. |
2916 if (!first || !last) | 2916 if (!first || !last) |
2917 return 0; | 2917 return 0; |
2918 | 2918 |
2919 LayoutUnit fromLeft; | 2919 LayoutUnit fromLeft; |
(...skipping 22 matching lines...) Expand all Loading... |
2942 return containingBlock->isHorizontalWritingMode() ? viewportRect.hei
ght() : viewportRect.width(); | 2942 return containingBlock->isHorizontalWritingMode() ? viewportRect.hei
ght() : viewportRect.width(); |
2943 } | 2943 } |
2944 } | 2944 } |
2945 | 2945 |
2946 if (containingBlock->isBox()) { | 2946 if (containingBlock->isBox()) { |
2947 const RenderBlock* cb = containingBlock->isRenderBlock() ? | 2947 const RenderBlock* cb = containingBlock->isRenderBlock() ? |
2948 toRenderBlock(containingBlock) : containingBlock->containingBlock(); | 2948 toRenderBlock(containingBlock) : containingBlock->containingBlock(); |
2949 return cb->clientLogicalHeight(); | 2949 return cb->clientLogicalHeight(); |
2950 } | 2950 } |
2951 | 2951 |
2952 ASSERT(containingBlock->isRenderInline() && containingBlock->isInFlowPositio
ned()); | 2952 ASSERT(containingBlock->isRenderInline() && containingBlock->isRelPositioned
()); |
2953 | 2953 |
2954 const RenderInline* flow = toRenderInline(containingBlock); | 2954 const RenderInline* flow = toRenderInline(containingBlock); |
2955 InlineFlowBox* first = flow->firstLineBox(); | 2955 InlineFlowBox* first = flow->firstLineBox(); |
2956 InlineFlowBox* last = flow->lastLineBox(); | 2956 InlineFlowBox* last = flow->lastLineBox(); |
2957 | 2957 |
2958 // If the containing block is empty, return a height of 0. | 2958 // If the containing block is empty, return a height of 0. |
2959 if (!first || !last) | 2959 if (!first || !last) |
2960 return 0; | 2960 return 0; |
2961 | 2961 |
2962 LayoutUnit heightResult; | 2962 LayoutUnit heightResult; |
(...skipping 1470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4433 LayoutRect rect = borderBoxRect(); | 4433 LayoutRect rect = borderBoxRect(); |
4434 // We want to include the margin, but only when it adds height. Quirky margi
ns don't contribute height | 4434 // We want to include the margin, but only when it adds height. Quirky margi
ns don't contribute height |
4435 // nor do the margins of self-collapsing blocks. | 4435 // nor do the margins of self-collapsing blocks. |
4436 if (!style()->hasMarginAfterQuirk() && !isSelfCollapsingBlock()) | 4436 if (!style()->hasMarginAfterQuirk() && !isSelfCollapsingBlock()) |
4437 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA
fter()) : LayoutSize(marginAfter(), LayoutUnit())); | 4437 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA
fter()) : LayoutSize(marginAfter(), LayoutUnit())); |
4438 | 4438 |
4439 if (!hasOverflowClip()) | 4439 if (!hasOverflowClip()) |
4440 rect.unite(layoutOverflowRect()); | 4440 rect.unite(layoutOverflowRect()); |
4441 | 4441 |
4442 bool hasTransform = hasLayer() && layer()->transform(); | 4442 bool hasTransform = hasLayer() && layer()->transform(); |
4443 if (isInFlowPositioned() || hasTransform) { | 4443 if (isRelPositioned() || hasTransform) { |
4444 // If we are relatively positioned or if we have a transform, then we ha
ve to convert | 4444 // If we are relatively positioned or if we have a transform, then we ha
ve to convert |
4445 // this rectangle into physical coordinates, apply relative positioning
and transforms | 4445 // this rectangle into physical coordinates, apply relative positioning
and transforms |
4446 // to it, and then convert it back. | 4446 // to it, and then convert it back. |
4447 flipForWritingMode(rect); | 4447 flipForWritingMode(rect); |
4448 | 4448 |
4449 if (hasTransform) | 4449 if (hasTransform) |
4450 rect = layer()->currentTransform().mapRect(rect); | 4450 rect = layer()->currentTransform().mapRect(rect); |
4451 | 4451 |
4452 if (isInFlowPositioned()) | 4452 if (isRelPositioned()) |
4453 rect.move(offsetForInFlowPosition()); | 4453 rect.move(offsetForInFlowPosition()); |
4454 | 4454 |
4455 // Now we need to flip back. | 4455 // Now we need to flip back. |
4456 flipForWritingMode(rect); | 4456 flipForWritingMode(rect); |
4457 } | 4457 } |
4458 | 4458 |
4459 // If the writing modes of the child and parent match, then we don't have to | 4459 // If the writing modes of the child and parent match, then we don't have to |
4460 // do anything fancy. Just return the result. | 4460 // do anything fancy. Just return the result. |
4461 if (parentStyle->writingMode() == style()->writingMode()) | 4461 if (parentStyle->writingMode() == style()->writingMode()) |
4462 return rect; | 4462 return rect; |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4677 return 0; | 4677 return 0; |
4678 | 4678 |
4679 if (!layoutState && !flowThreadContainingBlock()) | 4679 if (!layoutState && !flowThreadContainingBlock()) |
4680 return 0; | 4680 return 0; |
4681 | 4681 |
4682 RenderBlock* containerBlock = containingBlock(); | 4682 RenderBlock* containerBlock = containingBlock(); |
4683 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop(); | 4683 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop(); |
4684 } | 4684 } |
4685 | 4685 |
4686 } // namespace WebCore | 4686 } // namespace WebCore |
OLD | NEW |