Chromium Code Reviews| 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. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. |
| 7 * All rights reserved. | 7 * All rights reserved. |
| 8 * Copyright (C) 2009 Google Inc. All rights reserved. | 8 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. | 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. |
| 10 * (http://www.torchmobile.com/) | 10 * (http://www.torchmobile.com/) |
| (...skipping 1259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1270 | 1270 |
| 1271 LayoutRect LayoutObject::localVisualRect() const { | 1271 LayoutRect LayoutObject::localVisualRect() const { |
| 1272 NOTREACHED(); | 1272 NOTREACHED(); |
| 1273 return LayoutRect(); | 1273 return LayoutRect(); |
| 1274 } | 1274 } |
| 1275 | 1275 |
| 1276 bool LayoutObject::mapToVisualRectInAncestorSpace( | 1276 bool LayoutObject::mapToVisualRectInAncestorSpace( |
| 1277 const LayoutBoxModelObject* ancestor, | 1277 const LayoutBoxModelObject* ancestor, |
| 1278 LayoutRect& rect, | 1278 LayoutRect& rect, |
| 1279 VisualRectFlags visualRectFlags) const { | 1279 VisualRectFlags visualRectFlags) const { |
| 1280 TransformState transformState(TransformState::ApplyTransformDirection, | |
| 1281 FloatQuad(FloatRect(rect))); | |
| 1282 bool retval = mapToVisualRectInAncestorSpaceInternal(ancestor, transformState, | |
| 1283 visualRectFlags); | |
| 1284 transformState.flatten(); | |
| 1285 rect = LayoutRect(transformState.lastPlanarQuad().boundingBox()); | |
| 1286 return retval; | |
| 1287 } | |
| 1288 | |
| 1289 bool LayoutObject::mapToVisualRectInAncestorSpaceInternal( | |
| 1290 const LayoutBoxModelObject* ancestor, | |
| 1291 TransformState& transformState, | |
| 1292 VisualRectFlags visualRectFlags) const { | |
| 1280 // For any layout object that doesn't override this method (the main example | 1293 // For any layout object that doesn't override this method (the main example |
| 1281 // is LayoutText), the rect is assumed to be in the parent's coordinate space, | 1294 // is LayoutText), the rect is assumed to be in the parent's coordinate space, |
| 1282 // except for container flip. | 1295 // except for container flip. |
| 1283 | 1296 |
| 1284 if (ancestor == this) | 1297 if (ancestor == this) |
| 1285 return true; | 1298 return true; |
| 1286 | 1299 |
| 1287 if (LayoutObject* parent = this->parent()) { | 1300 if (LayoutObject* parent = this->parent()) { |
| 1288 if (parent->isBox()) { | 1301 if (parent->isBox()) { |
| 1289 LayoutBox* parentBox = toLayoutBox(parent); | 1302 LayoutBox* parentBox = toLayoutBox(parent); |
| 1290 | 1303 |
| 1291 // Never flip for SVG as it handles writing modes itself. | 1304 // Never flip for SVG as it handles writing modes itself. |
| 1292 if (!isSVG()) | 1305 if (!isSVG()) { |
| 1306 transformState.flatten(); | |
| 1307 LayoutRect rect(transformState.lastPlanarQuad().boundingBox()); | |
| 1293 parentBox->flipForWritingMode(rect); | 1308 parentBox->flipForWritingMode(rect); |
| 1309 transformState.setQuad(FloatQuad(FloatRect(rect))); | |
| 1310 } | |
| 1311 | |
| 1312 bool preserve3D = (parent->style()->preserves3D() && !parent->isText()) || | |
|
Xianzhu
2017/03/03 01:24:42
Ditto about !parent->isText().
chrishtr
2017/03/03 02:45:11
I copied this conditional from:
https://cs.chromi
| |
| 1313 (style()->preserves3D() && !isText()); | |
| 1314 | |
| 1315 TransformState::TransformAccumulation accumulation = | |
| 1316 preserve3D ? TransformState::AccumulateTransform | |
| 1317 : TransformState::FlattenTransform; | |
| 1294 | 1318 |
| 1295 if (parent != ancestor && | 1319 if (parent != ancestor && |
| 1296 !parentBox->mapScrollingContentsRectToBoxSpace(rect, visualRectFlags)) | 1320 !parentBox->mapScrollingContentsRectToBoxSpace( |
| 1321 transformState, accumulation, visualRectFlags)) | |
| 1297 return false; | 1322 return false; |
| 1298 } | 1323 } |
| 1299 return parent->mapToVisualRectInAncestorSpace(ancestor, rect, | 1324 return parent->mapToVisualRectInAncestorSpaceInternal( |
| 1300 visualRectFlags); | 1325 ancestor, transformState, visualRectFlags); |
| 1301 } | 1326 } |
| 1302 return true; | 1327 return true; |
| 1303 } | 1328 } |
| 1304 | 1329 |
| 1305 void LayoutObject::dirtyLinesFromChangedChild(LayoutObject*, MarkingBehavior) {} | 1330 void LayoutObject::dirtyLinesFromChangedChild(LayoutObject*, MarkingBehavior) {} |
| 1306 | 1331 |
| 1307 #ifndef NDEBUG | 1332 #ifndef NDEBUG |
| 1308 | 1333 |
| 1309 void LayoutObject::showTreeForThis() const { | 1334 void LayoutObject::showTreeForThis() const { |
| 1310 if (node()) | 1335 if (node()) |
| (...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2262 } | 2287 } |
| 2263 | 2288 |
| 2264 FloatQuad LayoutObject::localToAncestorQuadInternal( | 2289 FloatQuad LayoutObject::localToAncestorQuadInternal( |
| 2265 const FloatQuad& localQuad, | 2290 const FloatQuad& localQuad, |
| 2266 const LayoutBoxModelObject* ancestor, | 2291 const LayoutBoxModelObject* ancestor, |
| 2267 MapCoordinatesFlags mode) const { | 2292 MapCoordinatesFlags mode) const { |
| 2268 // Track the point at the center of the quad's bounding box. As | 2293 // Track the point at the center of the quad's bounding box. As |
| 2269 // mapLocalToAncestor() calls offsetFromContainer(), it will use that point | 2294 // mapLocalToAncestor() calls offsetFromContainer(), it will use that point |
| 2270 // as the reference point to decide which column's transform to apply in | 2295 // as the reference point to decide which column's transform to apply in |
| 2271 // multiple-column blocks. | 2296 // multiple-column blocks. |
| 2297 // TODO(chrishtr): the second argument to this constructor is unnecessary, | |
| 2298 // since we never call lastPlanarPoint(). | |
| 2272 TransformState transformState(TransformState::ApplyTransformDirection, | 2299 TransformState transformState(TransformState::ApplyTransformDirection, |
| 2273 localQuad.boundingBox().center(), localQuad); | 2300 localQuad.boundingBox().center(), localQuad); |
| 2274 mapLocalToAncestor(ancestor, transformState, mode | ApplyContainerFlip); | 2301 mapLocalToAncestor(ancestor, transformState, mode | ApplyContainerFlip); |
| 2275 transformState.flatten(); | 2302 transformState.flatten(); |
| 2276 | 2303 |
| 2277 return transformState.lastPlanarQuad(); | 2304 return transformState.lastPlanarQuad(); |
| 2278 } | 2305 } |
| 2279 | 2306 |
| 2280 FloatPoint LayoutObject::localToAncestorPoint( | 2307 FloatPoint LayoutObject::localToAncestorPoint( |
| 2281 const FloatPoint& localPoint, | 2308 const FloatPoint& localPoint, |
| (...skipping 1247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3529 const blink::LayoutObject* root = object1; | 3556 const blink::LayoutObject* root = object1; |
| 3530 while (root->parent()) | 3557 while (root->parent()) |
| 3531 root = root->parent(); | 3558 root = root->parent(); |
| 3532 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); | 3559 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); |
| 3533 } else { | 3560 } else { |
| 3534 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)"); | 3561 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)"); |
| 3535 } | 3562 } |
| 3536 } | 3563 } |
| 3537 | 3564 |
| 3538 #endif | 3565 #endif |
| OLD | NEW |