| 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 24 matching lines...) Expand all Loading... |
| 35 #include "sky/engine/core/dom/shadow/ShadowRoot.h" | 35 #include "sky/engine/core/dom/shadow/ShadowRoot.h" |
| 36 #include "sky/engine/core/editing/EditingBoundary.h" | 36 #include "sky/engine/core/editing/EditingBoundary.h" |
| 37 #include "sky/engine/core/editing/FrameSelection.h" | 37 #include "sky/engine/core/editing/FrameSelection.h" |
| 38 #include "sky/engine/core/editing/htmlediting.h" | 38 #include "sky/engine/core/editing/htmlediting.h" |
| 39 #include "sky/engine/core/fetch/ResourceLoader.h" | 39 #include "sky/engine/core/fetch/ResourceLoader.h" |
| 40 #include "sky/engine/core/frame/FrameView.h" | 40 #include "sky/engine/core/frame/FrameView.h" |
| 41 #include "sky/engine/core/frame/LocalFrame.h" | 41 #include "sky/engine/core/frame/LocalFrame.h" |
| 42 #include "sky/engine/core/frame/Settings.h" | 42 #include "sky/engine/core/frame/Settings.h" |
| 43 #include "sky/engine/core/html/HTMLAnchorElement.h" | 43 #include "sky/engine/core/html/HTMLAnchorElement.h" |
| 44 #include "sky/engine/core/html/HTMLElement.h" | 44 #include "sky/engine/core/html/HTMLElement.h" |
| 45 #include "sky/engine/core/page/AutoscrollController.h" | |
| 46 #include "sky/engine/core/page/EventHandler.h" | 45 #include "sky/engine/core/page/EventHandler.h" |
| 47 #include "sky/engine/core/page/Page.h" | 46 #include "sky/engine/core/page/Page.h" |
| 48 #include "sky/engine/core/rendering/HitTestResult.h" | 47 #include "sky/engine/core/rendering/HitTestResult.h" |
| 49 #include "sky/engine/core/rendering/RenderFlexibleBox.h" | 48 #include "sky/engine/core/rendering/RenderFlexibleBox.h" |
| 50 #include "sky/engine/core/rendering/RenderGeometryMap.h" | 49 #include "sky/engine/core/rendering/RenderGeometryMap.h" |
| 51 #include "sky/engine/core/rendering/RenderImage.h" | 50 #include "sky/engine/core/rendering/RenderImage.h" |
| 52 #include "sky/engine/core/rendering/RenderImageResourceStyleImage.h" | 51 #include "sky/engine/core/rendering/RenderImageResourceStyleImage.h" |
| 53 #include "sky/engine/core/rendering/RenderInline.h" | 52 #include "sky/engine/core/rendering/RenderInline.h" |
| 54 #include "sky/engine/core/rendering/RenderLayer.h" | 53 #include "sky/engine/core/rendering/RenderLayer.h" |
| 55 #include "sky/engine/core/rendering/RenderObjectInlines.h" | 54 #include "sky/engine/core/rendering/RenderObjectInlines.h" |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 for (const RenderObject* current = this; current; current = current->parent(
)) { | 404 for (const RenderObject* current = this; current; current = current->parent(
)) { |
| 406 if (current->hasLayer()) | 405 if (current->hasLayer()) |
| 407 return toRenderLayerModelObject(current)->layer(); | 406 return toRenderLayerModelObject(current)->layer(); |
| 408 } | 407 } |
| 409 // FIXME: We should remove the one caller that triggers this case and make | 408 // FIXME: We should remove the one caller that triggers this case and make |
| 410 // this function return a reference. | 409 // this function return a reference. |
| 411 ASSERT(!m_parent && !isRenderView()); | 410 ASSERT(!m_parent && !isRenderView()); |
| 412 return 0; | 411 return 0; |
| 413 } | 412 } |
| 414 | 413 |
| 415 bool RenderObject::scrollRectToVisible(const LayoutRect& rect, const ScrollAlign
ment& alignX, const ScrollAlignment& alignY) | |
| 416 { | |
| 417 RenderBox* enclosingBox = this->enclosingBox(); | |
| 418 if (!enclosingBox) | |
| 419 return false; | |
| 420 | |
| 421 enclosingBox->scrollRectToVisible(rect, alignX, alignY); | |
| 422 return true; | |
| 423 } | |
| 424 | |
| 425 RenderBox* RenderObject::enclosingBox() const | 414 RenderBox* RenderObject::enclosingBox() const |
| 426 { | 415 { |
| 427 RenderObject* curr = const_cast<RenderObject*>(this); | 416 RenderObject* curr = const_cast<RenderObject*>(this); |
| 428 while (curr) { | 417 while (curr) { |
| 429 if (curr->isBox()) | 418 if (curr->isBox()) |
| 430 return toRenderBox(curr); | 419 return toRenderBox(curr); |
| 431 curr = curr->parent(); | 420 curr = curr->parent(); |
| 432 } | 421 } |
| 433 | 422 |
| 434 ASSERT_NOT_REACHED(); | 423 ASSERT_NOT_REACHED(); |
| 435 return 0; | 424 return 0; |
| 436 } | 425 } |
| 437 | 426 |
| 438 RenderBoxModelObject* RenderObject::enclosingBoxModelObject() const | 427 RenderBoxModelObject* RenderObject::enclosingBoxModelObject() const |
| 439 { | 428 { |
| 440 RenderObject* curr = const_cast<RenderObject*>(this); | 429 RenderObject* curr = const_cast<RenderObject*>(this); |
| 441 while (curr) { | 430 while (curr) { |
| 442 if (curr->isBoxModelObject()) | 431 if (curr->isBoxModelObject()) |
| 443 return toRenderBoxModelObject(curr); | 432 return toRenderBoxModelObject(curr); |
| 444 curr = curr->parent(); | 433 curr = curr->parent(); |
| 445 } | 434 } |
| 446 | 435 |
| 447 ASSERT_NOT_REACHED(); | 436 ASSERT_NOT_REACHED(); |
| 448 return 0; | 437 return 0; |
| 449 } | 438 } |
| 450 | 439 |
| 451 RenderBox* RenderObject::enclosingScrollableBox() const | |
| 452 { | |
| 453 // FIXME(sky): Remove. | |
| 454 return 0; | |
| 455 } | |
| 456 | |
| 457 bool RenderObject::skipInvalidationWhenLaidOutChildren() const | 440 bool RenderObject::skipInvalidationWhenLaidOutChildren() const |
| 458 { | 441 { |
| 459 if (!neededLayoutBecauseOfChildren()) | 442 if (!neededLayoutBecauseOfChildren()) |
| 460 return false; | 443 return false; |
| 461 | 444 |
| 462 // SVG renderers need to be invalidated when their children are laid out. | 445 // SVG renderers need to be invalidated when their children are laid out. |
| 463 // RenderBlocks with line boxes are responsible to invalidate them so we can
't ignore them. | 446 // RenderBlocks with line boxes are responsible to invalidate them so we can
't ignore them. |
| 464 if (isRenderBlockFlow() && toRenderBlockFlow(this)->firstLineBox()) | 447 if (isRenderBlockFlow() && toRenderBlockFlow(this)->firstLineBox()) |
| 465 return false; | 448 return false; |
| 466 | 449 |
| (...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1412 void RenderObject::mapLocalToContainer(const RenderLayerModelObject* paintInvali
dationContainer, TransformState& transformState, MapCoordinatesFlags mode) const | 1395 void RenderObject::mapLocalToContainer(const RenderLayerModelObject* paintInvali
dationContainer, TransformState& transformState, MapCoordinatesFlags mode) const |
| 1413 { | 1396 { |
| 1414 if (paintInvalidationContainer == this) | 1397 if (paintInvalidationContainer == this) |
| 1415 return; | 1398 return; |
| 1416 | 1399 |
| 1417 RenderObject* o = parent(); | 1400 RenderObject* o = parent(); |
| 1418 if (!o) | 1401 if (!o) |
| 1419 return; | 1402 return; |
| 1420 | 1403 |
| 1421 // FIXME: this should call offsetFromContainer to share code, but I'm not su
re it's ever called. | 1404 // FIXME: this should call offsetFromContainer to share code, but I'm not su
re it's ever called. |
| 1422 if (mode & ApplyContainerFlip && o->isBox()) { | 1405 if (mode & ApplyContainerFlip && o->isBox()) |
| 1423 mode &= ~ApplyContainerFlip; | 1406 mode &= ~ApplyContainerFlip; |
| 1424 } | |
| 1425 | |
| 1426 if (o->hasOverflowClip()) | |
| 1427 transformState.move(-toRenderBox(o)->scrolledContentOffset()); | |
| 1428 | 1407 |
| 1429 o->mapLocalToContainer(paintInvalidationContainer, transformState, mode); | 1408 o->mapLocalToContainer(paintInvalidationContainer, transformState, mode); |
| 1430 } | 1409 } |
| 1431 | 1410 |
| 1432 const RenderObject* RenderObject::pushMappingToContainer(const RenderLayerModelO
bject* ancestorToStopAt, RenderGeometryMap& geometryMap) const | 1411 const RenderObject* RenderObject::pushMappingToContainer(const RenderLayerModelO
bject* ancestorToStopAt, RenderGeometryMap& geometryMap) const |
| 1433 { | 1412 { |
| 1434 ASSERT_UNUSED(ancestorToStopAt, ancestorToStopAt != this); | 1413 ASSERT_UNUSED(ancestorToStopAt, ancestorToStopAt != this); |
| 1435 | 1414 |
| 1436 RenderObject* container = parent(); | 1415 RenderObject* container = parent(); |
| 1437 if (!container) | 1416 if (!container) |
| 1438 return 0; | 1417 return 0; |
| 1439 | 1418 // FIXME(sky): Do we need to make this call? |
| 1440 // FIXME: this should call offsetFromContainer to share code, but I'm not su
re it's ever called. | 1419 geometryMap.push(this, LayoutSize(), false); |
| 1441 LayoutSize offset; | |
| 1442 if (container->hasOverflowClip()) | |
| 1443 offset = -toRenderBox(container)->scrolledContentOffset(); | |
| 1444 | |
| 1445 geometryMap.push(this, offset, false); | |
| 1446 | |
| 1447 return container; | 1420 return container; |
| 1448 } | 1421 } |
| 1449 | 1422 |
| 1450 void RenderObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformSt
ate& transformState) const | 1423 void RenderObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformSt
ate& transformState) const |
| 1451 { | 1424 { |
| 1452 RenderObject* o = parent(); | 1425 RenderObject* o = parent(); |
| 1453 if (o) { | 1426 if (o) |
| 1454 o->mapAbsoluteToLocalPoint(mode, transformState); | 1427 o->mapAbsoluteToLocalPoint(mode, transformState); |
| 1455 if (o->hasOverflowClip()) | |
| 1456 transformState.move(toRenderBox(o)->scrolledContentOffset()); | |
| 1457 } | |
| 1458 } | 1428 } |
| 1459 | 1429 |
| 1460 bool RenderObject::shouldUseTransformFromContainer(const RenderObject* container
Object) const | 1430 bool RenderObject::shouldUseTransformFromContainer(const RenderObject* container
Object) const |
| 1461 { | 1431 { |
| 1462 // hasTransform() indicates whether the object has transform, transform-styl
e or perspective. We just care about transform, | 1432 // hasTransform() indicates whether the object has transform, transform-styl
e or perspective. We just care about transform, |
| 1463 // so check the layer's transform directly. | 1433 // so check the layer's transform directly. |
| 1464 return (hasLayer() && toRenderLayerModelObject(this)->layer()->transform())
|| (containerObject && containerObject->style()->hasPerspective()); | 1434 return (hasLayer() && toRenderLayerModelObject(this)->layer()->transform())
|| (containerObject && containerObject->style()->hasPerspective()); |
| 1465 } | 1435 } |
| 1466 | 1436 |
| 1467 void RenderObject::getTransformFromContainer(const RenderObject* containerObject
, const LayoutSize& offsetInContainer, TransformationMatrix& transform) const | 1437 void RenderObject::getTransformFromContainer(const RenderObject* containerObject
, const LayoutSize& offsetInContainer, TransformationMatrix& transform) const |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1502 TransformState transformState(TransformState::ApplyTransformDirection, local
Point); | 1472 TransformState transformState(TransformState::ApplyTransformDirection, local
Point); |
| 1503 mapLocalToContainer(paintInvalidationContainer, transformState, mode | Apply
ContainerFlip | UseTransforms); | 1473 mapLocalToContainer(paintInvalidationContainer, transformState, mode | Apply
ContainerFlip | UseTransforms); |
| 1504 transformState.flatten(); | 1474 transformState.flatten(); |
| 1505 | 1475 |
| 1506 return transformState.lastPlanarPoint(); | 1476 return transformState.lastPlanarPoint(); |
| 1507 } | 1477 } |
| 1508 | 1478 |
| 1509 LayoutSize RenderObject::offsetFromContainer(const RenderObject* o, const Layout
Point& point, bool* offsetDependsOnPoint) const | 1479 LayoutSize RenderObject::offsetFromContainer(const RenderObject* o, const Layout
Point& point, bool* offsetDependsOnPoint) const |
| 1510 { | 1480 { |
| 1511 ASSERT(o == container()); | 1481 ASSERT(o == container()); |
| 1512 | |
| 1513 LayoutSize offset; | 1482 LayoutSize offset; |
| 1514 | |
| 1515 if (o->hasOverflowClip()) | |
| 1516 offset -= toRenderBox(o)->scrolledContentOffset(); | |
| 1517 | |
| 1518 if (offsetDependsOnPoint) | 1483 if (offsetDependsOnPoint) |
| 1519 *offsetDependsOnPoint = false; | 1484 *offsetDependsOnPoint = false; |
| 1520 | |
| 1521 return offset; | 1485 return offset; |
| 1522 } | 1486 } |
| 1523 | 1487 |
| 1524 LayoutSize RenderObject::offsetFromAncestorContainer(const RenderObject* contain
er) const | 1488 LayoutSize RenderObject::offsetFromAncestorContainer(const RenderObject* contain
er) const |
| 1525 { | 1489 { |
| 1526 LayoutSize offset; | 1490 LayoutSize offset; |
| 1527 LayoutPoint referencePoint; | 1491 LayoutPoint referencePoint; |
| 1528 const RenderObject* currContainer = this; | 1492 const RenderObject* currContainer = this; |
| 1529 do { | 1493 do { |
| 1530 const RenderObject* nextContainer = currContainer->container(); | 1494 const RenderObject* nextContainer = currContainer->container(); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1634 } | 1598 } |
| 1635 } | 1599 } |
| 1636 | 1600 |
| 1637 void RenderObject::willBeDestroyed() | 1601 void RenderObject::willBeDestroyed() |
| 1638 { | 1602 { |
| 1639 // Destroy any leftover anonymous children. | 1603 // Destroy any leftover anonymous children. |
| 1640 RenderObjectChildList* children = virtualChildren(); | 1604 RenderObjectChildList* children = virtualChildren(); |
| 1641 if (children) | 1605 if (children) |
| 1642 children->destroyLeftoverChildren(); | 1606 children->destroyLeftoverChildren(); |
| 1643 | 1607 |
| 1644 // If this renderer is being autoscrolled, stop the autoscrolling. | |
| 1645 if (LocalFrame* frame = this->frame()) { | |
| 1646 if (frame->page()) | |
| 1647 frame->page()->autoscrollController().stopAutoscrollIfNeeded(this); | |
| 1648 } | |
| 1649 | |
| 1650 remove(); | 1608 remove(); |
| 1651 | |
| 1652 setAncestorLineBoxDirty(false); | 1609 setAncestorLineBoxDirty(false); |
| 1653 | |
| 1654 clearLayoutRootIfNeeded(); | 1610 clearLayoutRootIfNeeded(); |
| 1655 } | 1611 } |
| 1656 | 1612 |
| 1657 void RenderObject::insertedIntoTree() | 1613 void RenderObject::insertedIntoTree() |
| 1658 { | 1614 { |
| 1659 // FIXME: We should ASSERT(isRooted()) here but generated content makes some
out-of-order insertion. | 1615 // FIXME: We should ASSERT(isRooted()) here but generated content makes some
out-of-order insertion. |
| 1660 | 1616 |
| 1661 // Keep our layer hierarchy updated. Optimize for the common case where we d
on't have any children | 1617 // Keep our layer hierarchy updated. Optimize for the common case where we d
on't have any children |
| 1662 // and don't have a layer attached to ourselves. | 1618 // and don't have a layer attached to ourselves. |
| 1663 RenderLayer* layer = 0; | 1619 RenderLayer* layer = 0; |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2052 { | 2008 { |
| 2053 if (object1) { | 2009 if (object1) { |
| 2054 const blink::RenderObject* root = object1; | 2010 const blink::RenderObject* root = object1; |
| 2055 while (root->parent()) | 2011 while (root->parent()) |
| 2056 root = root->parent(); | 2012 root = root->parent(); |
| 2057 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); | 2013 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); |
| 2058 } | 2014 } |
| 2059 } | 2015 } |
| 2060 | 2016 |
| 2061 #endif | 2017 #endif |
| OLD | NEW |