| 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 2245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2256 mode &= ~ApplyContainerFlip; | 2256 mode &= ~ApplyContainerFlip; |
| 2257 } else if (o->isBox()) { | 2257 } else if (o->isBox()) { |
| 2258 if (o->style()->isFlippedBlocksWritingMode()) { | 2258 if (o->style()->isFlippedBlocksWritingMode()) { |
| 2259 IntPoint centerPoint = roundedIntPoint(transformState.mappedPoin
t()); | 2259 IntPoint centerPoint = roundedIntPoint(transformState.mappedPoin
t()); |
| 2260 transformState.move(toLayoutBox(o)->flipForWritingMode(LayoutPoi
nt(centerPoint)) - centerPoint); | 2260 transformState.move(toLayoutBox(o)->flipForWritingMode(LayoutPoi
nt(centerPoint)) - centerPoint); |
| 2261 } | 2261 } |
| 2262 mode &= ~ApplyContainerFlip; | 2262 mode &= ~ApplyContainerFlip; |
| 2263 } | 2263 } |
| 2264 } | 2264 } |
| 2265 | 2265 |
| 2266 LayoutSize containerOffset = offsetFromContainer(o, roundedLayoutPoint(trans
formState.mappedPoint())); | 2266 LayoutSize containerOffset = offsetFromContainer(o); |
| 2267 if (o->isLayoutFlowThread()) { |
| 2268 // So far the point has been in flow thread coordinates (i.e. as if ever
ything in |
| 2269 // the fragmentation context lived in one tall single column). Convert i
t to a |
| 2270 // visual point now. |
| 2271 LayoutPoint pointInContainer = roundedLayoutPoint(transformState.mappedP
oint()) + containerOffset; |
| 2272 containerOffset += o->columnOffset(pointInContainer); |
| 2273 } |
| 2267 | 2274 |
| 2268 // Text objects just copy their parent's computed style, so we need to ignor
e them. | 2275 // Text objects just copy their parent's computed style, so we need to ignor
e them. |
| 2269 bool preserve3D = mode & UseTransforms && ((o->style()->preserves3D() && !o-
>isText()) || (style()->preserves3D() && !isText())); | 2276 bool preserve3D = mode & UseTransforms && ((o->style()->preserves3D() && !o-
>isText()) || (style()->preserves3D() && !isText())); |
| 2270 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { | 2277 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { |
| 2271 TransformationMatrix t; | 2278 TransformationMatrix t; |
| 2272 getTransformFromContainer(o, containerOffset, t); | 2279 getTransformFromContainer(o, containerOffset, t); |
| 2273 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate
Transform : TransformState::FlattenTransform); | 2280 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate
Transform : TransformState::FlattenTransform); |
| 2274 } else { | 2281 } else { |
| 2275 transformState.move(containerOffset.width(), containerOffset.height(), p
reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo
rm); | 2282 transformState.move(containerOffset.width(), containerOffset.height(), p
reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo
rm); |
| 2276 } | 2283 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2308 mode &= ~ApplyContainerFlip; | 2315 mode &= ~ApplyContainerFlip; |
| 2309 } else if (o->isBox()) { | 2316 } else if (o->isBox()) { |
| 2310 applyContainerFlip = o->style()->isFlippedBlocksWritingMode(); | 2317 applyContainerFlip = o->style()->isFlippedBlocksWritingMode(); |
| 2311 mode &= ~ApplyContainerFlip; | 2318 mode &= ~ApplyContainerFlip; |
| 2312 } | 2319 } |
| 2313 } | 2320 } |
| 2314 | 2321 |
| 2315 if (!containerSkipped) | 2322 if (!containerSkipped) |
| 2316 o->mapAncestorToLocal(ancestor, transformState, mode); | 2323 o->mapAncestorToLocal(ancestor, transformState, mode); |
| 2317 | 2324 |
| 2318 LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint()); | 2325 LayoutSize containerOffset = offsetFromContainer(o); |
| 2319 if (o->isLayoutFlowThread()) { | 2326 if (o->isLayoutFlowThread()) { |
| 2320 // Descending into a flow thread. Convert to the local coordinate space,
i.e. flow thread coordinates. | 2327 // Descending into a flow thread. Convert to the local coordinate space,
i.e. flow thread coordinates. |
| 2321 const LayoutFlowThread* flowThread = toLayoutFlowThread(o); | |
| 2322 LayoutPoint visualPoint = LayoutPoint(transformState.mappedPoint()); | 2328 LayoutPoint visualPoint = LayoutPoint(transformState.mappedPoint()); |
| 2323 transformState.move(visualPoint - flowThread->visualPointToFlowThreadPoi
nt(visualPoint)); | 2329 transformState.move(visualPoint - toLayoutFlowThread(o)->visualPointToFl
owThreadPoint(visualPoint)); |
| 2324 // |containerOffset| is also in visual coordinates. Convert to flow thre
ad coordinates. | |
| 2325 // TODO(mstensho): Wouldn't it be better add a parameter to instruct off
setFromContainer() | |
| 2326 // to return flowthread coordinates in the first place? We're effectivel
y performing two | |
| 2327 // conversions here, when in fact none is needed. | |
| 2328 containerOffset = toLayoutSize(flowThread->visualPointToFlowThreadPoint(
toLayoutPoint(containerOffset))); | |
| 2329 } | 2330 } |
| 2330 | 2331 |
| 2331 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl
e()->preserves3D()); | 2332 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl
e()->preserves3D()); |
| 2332 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { | 2333 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { |
| 2333 TransformationMatrix t; | 2334 TransformationMatrix t; |
| 2334 getTransformFromContainer(o, containerOffset, t); | 2335 getTransformFromContainer(o, containerOffset, t); |
| 2335 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate
Transform : TransformState::FlattenTransform); | 2336 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate
Transform : TransformState::FlattenTransform); |
| 2336 } else { | 2337 } else { |
| 2337 transformState.move(containerOffset.width(), containerOffset.height(), p
reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo
rm); | 2338 transformState.move(containerOffset.width(), containerOffset.height(), p
reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo
rm); |
| 2338 } | 2339 } |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2431 | 2432 |
| 2432 // A layoutObject can have no invalidation backing if it is from a detached
frame, | 2433 // A layoutObject can have no invalidation backing if it is from a detached
frame, |
| 2433 // or when forced compositing is disabled. | 2434 // or when forced compositing is disabled. |
| 2434 if (paintInvalidationContainer.layer()->compositingState() == NotComposited) | 2435 if (paintInvalidationContainer.layer()->compositingState() == NotComposited) |
| 2435 return containerPoint; | 2436 return containerPoint; |
| 2436 | 2437 |
| 2437 PaintLayer::mapPointToPaintBackingCoordinates(&paintInvalidationContainer, c
ontainerPoint); | 2438 PaintLayer::mapPointToPaintBackingCoordinates(&paintInvalidationContainer, c
ontainerPoint); |
| 2438 return containerPoint; | 2439 return containerPoint; |
| 2439 } | 2440 } |
| 2440 | 2441 |
| 2441 LayoutSize LayoutObject::offsetFromContainer(const LayoutObject* o, const Layout
Point& point, bool* offsetDependsOnPoint) const | 2442 LayoutSize LayoutObject::offsetFromContainer(const LayoutObject* o) const |
| 2442 { | 2443 { |
| 2443 ASSERT(o == container()); | 2444 ASSERT(o == container()); |
| 2444 | 2445 return o->hasOverflowClip() ? LayoutSize(-toLayoutBox(o)->scrolledContentOff
set()) : LayoutSize(); |
| 2445 LayoutSize offset = o->columnOffset(point); | |
| 2446 | |
| 2447 if (o->hasOverflowClip()) | |
| 2448 offset -= toLayoutBox(o)->scrolledContentOffset(); | |
| 2449 | |
| 2450 if (offsetDependsOnPoint) | |
| 2451 *offsetDependsOnPoint = o->isLayoutFlowThread(); | |
| 2452 | |
| 2453 return offset; | |
| 2454 } | 2446 } |
| 2455 | 2447 |
| 2456 LayoutSize LayoutObject::offsetFromAncestorContainer(const LayoutObject* ancesto
rContainer) const | 2448 LayoutSize LayoutObject::offsetFromAncestorContainer(const LayoutObject* ancesto
rContainer) const |
| 2457 { | 2449 { |
| 2458 if (ancestorContainer == this) | 2450 if (ancestorContainer == this) |
| 2459 return LayoutSize(); | 2451 return LayoutSize(); |
| 2460 | 2452 |
| 2461 LayoutSize offset; | 2453 LayoutSize offset; |
| 2462 LayoutPoint referencePoint; | 2454 LayoutPoint referencePoint; |
| 2463 const LayoutObject* currContainer = this; | 2455 const LayoutObject* currContainer = this; |
| 2464 do { | 2456 do { |
| 2465 const LayoutObject* nextContainer = currContainer->container(); | 2457 const LayoutObject* nextContainer = currContainer->container(); |
| 2466 ASSERT(nextContainer); // This means we reached the top without finding
container. | 2458 ASSERT(nextContainer); // This means we reached the top without finding
container. |
| 2467 if (!nextContainer) | 2459 if (!nextContainer) |
| 2468 break; | 2460 break; |
| 2469 ASSERT(!currContainer->hasTransformRelatedProperty()); | 2461 ASSERT(!currContainer->hasTransformRelatedProperty()); |
| 2470 LayoutSize currentOffset = currContainer->offsetFromContainer(nextContai
ner, referencePoint); | 2462 LayoutSize currentOffset = currContainer->offsetFromContainer(nextContai
ner); |
| 2471 offset += currentOffset; | 2463 offset += currentOffset; |
| 2472 referencePoint.move(currentOffset); | 2464 referencePoint.move(currentOffset); |
| 2473 currContainer = nextContainer; | 2465 currContainer = nextContainer; |
| 2474 } while (currContainer != ancestorContainer); | 2466 } while (currContainer != ancestorContainer); |
| 2475 | 2467 |
| 2476 return offset; | 2468 return offset; |
| 2477 } | 2469 } |
| 2478 | 2470 |
| 2479 LayoutRect LayoutObject::localCaretRect(InlineBox*, int, LayoutUnit* extraWidthT
oEndOfLine) | 2471 LayoutRect LayoutObject::localCaretRect(InlineBox*, int, LayoutUnit* extraWidthT
oEndOfLine) |
| 2480 { | 2472 { |
| (...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3733 const blink::LayoutObject* root = object1; | 3725 const blink::LayoutObject* root = object1; |
| 3734 while (root->parent()) | 3726 while (root->parent()) |
| 3735 root = root->parent(); | 3727 root = root->parent(); |
| 3736 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3728 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
| 3737 } else { | 3729 } else { |
| 3738 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); | 3730 fprintf(stderr, "Cannot showLayoutTree. Root is (nil)\n"); |
| 3739 } | 3731 } |
| 3740 } | 3732 } |
| 3741 | 3733 |
| 3742 #endif | 3734 #endif |
| OLD | NEW |