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 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 LayoutUnit y = paddingTop() + borderTop() + (verticalSpace / 2); | 781 LayoutUnit y = paddingTop() + borderTop() + (verticalSpace / 2); |
782 return currentStyle.isHorizontalWritingMode() ? LayoutRect(x, y, caretWidth,
height) : LayoutRect(y, x, height, caretWidth); | 782 return currentStyle.isHorizontalWritingMode() ? LayoutRect(x, y, caretWidth,
height) : LayoutRect(y, x, height, caretWidth); |
783 } | 783 } |
784 | 784 |
785 void LayoutBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, Tra
nsformState& transformState) const | 785 void LayoutBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, Tra
nsformState& transformState) const |
786 { | 786 { |
787 LayoutObject* o = container(); | 787 LayoutObject* o = container(); |
788 if (!o) | 788 if (!o) |
789 return; | 789 return; |
790 | 790 |
791 if (o->isLayoutFlowThread()) | |
792 transformState.move(o->columnOffset(LayoutPoint(transformState.mappedPoi
nt()))); | |
793 | |
794 o->mapAbsoluteToLocalPoint(mode, transformState); | 791 o->mapAbsoluteToLocalPoint(mode, transformState); |
795 | 792 |
796 LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint()); | 793 LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint()); |
797 | 794 |
798 if (!style()->hasOutOfFlowPosition() && o->hasColumns()) { | 795 if (o->isLayoutFlowThread()) { |
| 796 // Descending into a flow thread. Convert to the local coordinate space,
i.e. flow thread coordinates. |
| 797 const LayoutFlowThread* flowThread = toLayoutFlowThread(o); |
| 798 LayoutPoint visualPoint = LayoutPoint(transformState.mappedPoint()); |
| 799 transformState.move(visualPoint - flowThread->visualPointToFlowThreadPoi
nt(visualPoint)); |
| 800 // |containerOffset| is also in visual coordinates. Convert to flow thre
ad coordinates. |
| 801 // TODO(mstensho): Wouldn't it be better add a parameter to instruct off
setFromContainer() |
| 802 // to return flowthread coordinates in the first place? We're effectivel
y performing two |
| 803 // conversions here, when in fact none is needed. |
| 804 containerOffset = toLayoutSize(flowThread->visualPointToFlowThreadPoint(
toLayoutPoint(containerOffset))); |
| 805 } else if (!style()->hasOutOfFlowPosition() && o->hasColumns()) { |
799 LayoutBlock* block = toLayoutBlock(o); | 806 LayoutBlock* block = toLayoutBlock(o); |
800 LayoutPoint point(roundedLayoutPoint(transformState.mappedPoint())); | 807 LayoutPoint point(roundedLayoutPoint(transformState.mappedPoint())); |
801 point -= containerOffset; | 808 point -= containerOffset; |
802 block->adjustForColumnRect(containerOffset, point); | 809 block->adjustForColumnRect(containerOffset, point); |
803 } | 810 } |
804 | 811 |
805 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl
e()->preserves3D()); | 812 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl
e()->preserves3D()); |
806 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { | 813 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { |
807 TransformationMatrix t; | 814 TransformationMatrix t; |
808 getTransformFromContainer(o, containerOffset, t); | 815 getTransformFromContainer(o, containerOffset, t); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent()); | 888 ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent()); |
882 for (LayoutObject* child = startChild; child && child != endChild; ) { | 889 for (LayoutObject* child = startChild; child && child != endChild; ) { |
883 // Save our next sibling as moveChildTo will clear it. | 890 // Save our next sibling as moveChildTo will clear it. |
884 LayoutObject* nextSibling = child->nextSibling(); | 891 LayoutObject* nextSibling = child->nextSibling(); |
885 moveChildTo(toBoxModelObject, child, beforeChild, fullRemoveInsert); | 892 moveChildTo(toBoxModelObject, child, beforeChild, fullRemoveInsert); |
886 child = nextSibling; | 893 child = nextSibling; |
887 } | 894 } |
888 } | 895 } |
889 | 896 |
890 } // namespace blink | 897 } // namespace blink |
OLD | NEW |