Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: Source/core/dom/Element.cpp

Issue 977113003: Rename renderer() to layoutObject(). (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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) 2001 Peter Kelly (pmk@post.com) 4 * (C) 2001 Peter Kelly (pmk@post.com)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * (C) 2007 David Smith (catfish.man@gmail.com) 6 * (C) 2007 David Smith (catfish.man@gmail.com)
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved.
8 * (C) 2007 Eric Seidel (eric@webkit.org) 8 * (C) 2007 Eric Seidel (eric@webkit.org)
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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 return hasRareData() ? elementRareData()->tabIndex() : 0; 229 return hasRareData() ? elementRareData()->tabIndex() : 0;
230 } 230 }
231 231
232 bool Element::layoutObjectIsFocusable() const 232 bool Element::layoutObjectIsFocusable() const
233 { 233 {
234 // Elements in canvas fallback content are not rendered, but they are allowe d to be 234 // Elements in canvas fallback content are not rendered, but they are allowe d to be
235 // focusable as long as their canvas is displayed and visible. 235 // focusable as long as their canvas is displayed and visible.
236 if (isInCanvasSubtree()) { 236 if (isInCanvasSubtree()) {
237 const HTMLCanvasElement* canvas = Traversal<HTMLCanvasElement>::firstAnc estorOrSelf(*this); 237 const HTMLCanvasElement* canvas = Traversal<HTMLCanvasElement>::firstAnc estorOrSelf(*this);
238 ASSERT(canvas); 238 ASSERT(canvas);
239 return canvas->renderer() && canvas->renderer()->style()->visibility() = = VISIBLE; 239 return canvas->layoutObject() && canvas->layoutObject()->style()->visibi lity() == VISIBLE;
240 } 240 }
241 241
242 // FIXME: These asserts should be in Node::isFocusable, but there are some 242 // FIXME: These asserts should be in Node::isFocusable, but there are some
243 // callsites like Document::setFocusedElement that would currently fail on 243 // callsites like Document::setFocusedElement that would currently fail on
244 // them. See crbug.com/251163 244 // them. See crbug.com/251163
245 if (!renderer()) { 245 if (!layoutObject()) {
246 // We can't just use needsStyleRecalc() because if the node is in a 246 // We can't just use needsStyleRecalc() because if the node is in a
247 // display:none tree it might say it needs style recalc but the whole 247 // display:none tree it might say it needs style recalc but the whole
248 // document is actually up to date. 248 // document is actually up to date.
249 // In addition, style cannot be cleared out for non-active documents, 249 // In addition, style cannot be cleared out for non-active documents,
250 // so in that case the childNeedsStyleRecalc check is invalid. 250 // so in that case the childNeedsStyleRecalc check is invalid.
251 ASSERT(!document().isActive() || !document().childNeedsStyleRecalc()); 251 ASSERT(!document().isActive() || !document().childNeedsStyleRecalc());
252 } 252 }
253 253
254 // FIXME: Even if we are not visible, we might have a child that is visible. 254 // FIXME: Even if we are not visible, we might have a child that is visible.
255 // Hyatt wants to fix that some day with a "has visible content" flag or the like. 255 // Hyatt wants to fix that some day with a "has visible content" flag or the like.
256 if (!renderer() || renderer()->style()->visibility() != VISIBLE) 256 if (!layoutObject() || layoutObject()->style()->visibility() != VISIBLE)
257 return false; 257 return false;
258 258
259 return true; 259 return true;
260 } 260 }
261 261
262 PassRefPtrWillBeRawPtr<Node> Element::cloneNode(bool deep) 262 PassRefPtrWillBeRawPtr<Node> Element::cloneNode(bool deep)
263 { 263 {
264 return deep ? cloneElementWithChildren() : cloneElementWithoutChildren(); 264 return deep ? cloneElementWithChildren() : cloneElementWithoutChildren();
265 } 265 }
266 266
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 449
450 bool Element::shouldIgnoreAttributeCase() const 450 bool Element::shouldIgnoreAttributeCase() const
451 { 451 {
452 return isHTMLElement() && document().isHTMLDocument(); 452 return isHTMLElement() && document().isHTMLDocument();
453 } 453 }
454 454
455 void Element::scrollIntoView(bool alignToTop) 455 void Element::scrollIntoView(bool alignToTop)
456 { 456 {
457 document().updateLayoutIgnorePendingStylesheets(); 457 document().updateLayoutIgnorePendingStylesheets();
458 458
459 if (!renderer()) 459 if (!layoutObject())
460 return; 460 return;
461 461
462 LayoutRect bounds = boundingBox(); 462 LayoutRect bounds = boundingBox();
463 // Align to the top / bottom and to the closest edge. 463 // Align to the top / bottom and to the closest edge.
464 if (alignToTop) 464 if (alignToTop)
465 renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdgeIfNe eded, ScrollAlignment::alignTopAlways); 465 layoutObject()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdge IfNeeded, ScrollAlignment::alignTopAlways);
466 else 466 else
467 renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdgeIfNe eded, ScrollAlignment::alignBottomAlways); 467 layoutObject()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdge IfNeeded, ScrollAlignment::alignBottomAlways);
468 } 468 }
469 469
470 void Element::scrollIntoViewIfNeeded(bool centerIfNeeded) 470 void Element::scrollIntoViewIfNeeded(bool centerIfNeeded)
471 { 471 {
472 document().updateLayoutIgnorePendingStylesheets(); 472 document().updateLayoutIgnorePendingStylesheets();
473 473
474 if (!renderer()) 474 if (!layoutObject())
475 return; 475 return;
476 476
477 LayoutRect bounds = boundingBox(); 477 LayoutRect bounds = boundingBox();
478 if (centerIfNeeded) 478 if (centerIfNeeded)
479 renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignCenterIfNe eded, ScrollAlignment::alignCenterIfNeeded); 479 layoutObject()->scrollRectToVisible(bounds, ScrollAlignment::alignCenter IfNeeded, ScrollAlignment::alignCenterIfNeeded);
480 else 480 else
481 renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdgeIfNe eded, ScrollAlignment::alignToEdgeIfNeeded); 481 layoutObject()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdge IfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
482 } 482 }
483 483
484 static float localZoomForRenderer(LayoutObject& renderer) 484 static float localZoomForRenderer(LayoutObject& renderer)
485 { 485 {
486 // FIXME: This does the wrong thing if two opposing zooms are in effect and canceled each 486 // FIXME: This does the wrong thing if two opposing zooms are in effect and canceled each
487 // other out, but the alternative is that we'd have to crawl up the whole re nder tree every 487 // other out, but the alternative is that we'd have to crawl up the whole re nder tree every
488 // time (or store an additional bit in the LayoutStyle to indicate that a zo om was specified). 488 // time (or store an additional bit in the LayoutStyle to indicate that a zo om was specified).
489 float zoomFactor = 1; 489 float zoomFactor = 1;
490 if (renderer.style()->effectiveZoom() != 1) { 490 if (renderer.style()->effectiveZoom() != 1) {
491 // Need to find the nearest enclosing LayoutObject that set up 491 // Need to find the nearest enclosing LayoutObject that set up
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 { 548 {
549 Element* element = offsetParent(); 549 Element* element = offsetParent();
550 if (!element || !element->isInShadowTree()) 550 if (!element || !element->isInShadowTree())
551 return element; 551 return element;
552 return element->containingShadowRoot()->shouldExposeToBindings() ? element : nullptr; 552 return element->containingShadowRoot()->shouldExposeToBindings() ? element : nullptr;
553 } 553 }
554 554
555 Element* Element::offsetParent() 555 Element* Element::offsetParent()
556 { 556 {
557 document().updateLayoutIgnorePendingStylesheets(); 557 document().updateLayoutIgnorePendingStylesheets();
558 if (LayoutObject* renderer = this->renderer()) 558 if (LayoutObject* renderer = this->layoutObject())
559 return renderer->offsetParent(); 559 return renderer->offsetParent();
560 return nullptr; 560 return nullptr;
561 } 561 }
562 562
563 int Element::clientLeft() 563 int Element::clientLeft()
564 { 564 {
565 document().updateLayoutIgnorePendingStylesheets(); 565 document().updateLayoutIgnorePendingStylesheets();
566 566
567 if (LayoutBox* renderer = layoutBox()) 567 if (LayoutBox* renderer = layoutBox())
568 return adjustLayoutUnitForAbsoluteZoom(roundToInt(renderer->clientLeft() ), *renderer); 568 return adjustLayoutUnitForAbsoluteZoom(roundToInt(renderer->clientLeft() ), *renderer);
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 869
870 IntRect Element::boundsInViewportSpace() 870 IntRect Element::boundsInViewportSpace()
871 { 871 {
872 document().updateLayoutIgnorePendingStylesheets(); 872 document().updateLayoutIgnorePendingStylesheets();
873 873
874 FrameView* view = document().view(); 874 FrameView* view = document().view();
875 if (!view) 875 if (!view)
876 return IntRect(); 876 return IntRect();
877 877
878 Vector<FloatQuad> quads; 878 Vector<FloatQuad> quads;
879 if (isSVGElement() && renderer()) { 879 if (isSVGElement() && layoutObject()) {
880 // Get the bounding rectangle from the SVG model. 880 // Get the bounding rectangle from the SVG model.
881 SVGElement* svgElement = toSVGElement(this); 881 SVGElement* svgElement = toSVGElement(this);
882 FloatRect localRect; 882 FloatRect localRect;
883 if (svgElement->getBoundingBox(localRect)) 883 if (svgElement->getBoundingBox(localRect))
884 quads.append(renderer()->localToAbsoluteQuad(localRect)); 884 quads.append(layoutObject()->localToAbsoluteQuad(localRect));
885 } else { 885 } else {
886 // Get the bounding rectangle from the box model. 886 // Get the bounding rectangle from the box model.
887 if (layoutBoxModelObject()) 887 if (layoutBoxModelObject())
888 layoutBoxModelObject()->absoluteQuads(quads); 888 layoutBoxModelObject()->absoluteQuads(quads);
889 } 889 }
890 890
891 if (quads.isEmpty()) 891 if (quads.isEmpty())
892 return IntRect(); 892 return IntRect();
893 893
894 IntRect result = quads[0].enclosingBoundingBox(); 894 IntRect result = quads[0].enclosingBoundingBox();
895 for (size_t i = 1; i < quads.size(); ++i) 895 for (size_t i = 1; i < quads.size(); ++i)
896 result.unite(quads[i].enclosingBoundingBox()); 896 result.unite(quads[i].enclosingBoundingBox());
897 897
898 result = view->contentsToWindow(result); 898 result = view->contentsToWindow(result);
899 899
900 // FIXME: Cleanup pinch viewport coordinate translations. crbug.com/371902. 900 // FIXME: Cleanup pinch viewport coordinate translations. crbug.com/371902.
901 PinchViewport& pinchViewport = document().page()->frameHost().pinchViewport( ); 901 PinchViewport& pinchViewport = document().page()->frameHost().pinchViewport( );
902 result = enclosingIntRect(pinchViewport.mainViewToViewportCSSPixels(result)) ; 902 result = enclosingIntRect(pinchViewport.mainViewToViewportCSSPixels(result)) ;
903 903
904 return result; 904 return result;
905 } 905 }
906 906
907 PassRefPtrWillBeRawPtr<ClientRectList> Element::getClientRects() 907 PassRefPtrWillBeRawPtr<ClientRectList> Element::getClientRects()
908 { 908 {
909 document().updateLayoutIgnorePendingStylesheets(); 909 document().updateLayoutIgnorePendingStylesheets();
910 910
911 LayoutObject* elementRenderer = renderer(); 911 LayoutObject* elementRenderer = layoutObject();
912 if (!elementRenderer || (!elementRenderer->isBoxModelObject() && !elementRen derer->isBR())) 912 if (!elementRenderer || (!elementRenderer->isBoxModelObject() && !elementRen derer->isBR()))
913 return ClientRectList::create(); 913 return ClientRectList::create();
914 914
915 // FIXME: Handle SVG elements. 915 // FIXME: Handle SVG elements.
916 // FIXME: Handle table/inline-table with a caption. 916 // FIXME: Handle table/inline-table with a caption.
917 917
918 Vector<FloatQuad> quads; 918 Vector<FloatQuad> quads;
919 elementRenderer->absoluteQuads(quads); 919 elementRenderer->absoluteQuads(quads);
920 document().adjustFloatQuadsForScrollAndAbsoluteZoom(quads, *elementRenderer) ; 920 document().adjustFloatQuadsForScrollAndAbsoluteZoom(quads, *elementRenderer) ;
921 return ClientRectList::create(quads); 921 return ClientRectList::create(quads);
922 } 922 }
923 923
924 PassRefPtrWillBeRawPtr<ClientRect> Element::getBoundingClientRect() 924 PassRefPtrWillBeRawPtr<ClientRect> Element::getBoundingClientRect()
925 { 925 {
926 document().updateLayoutIgnorePendingStylesheets(); 926 document().updateLayoutIgnorePendingStylesheets();
927 927
928 Vector<FloatQuad> quads; 928 Vector<FloatQuad> quads;
929 LayoutObject* elementRenderer = renderer(); 929 LayoutObject* elementRenderer = layoutObject();
930 if (elementRenderer) { 930 if (elementRenderer) {
931 if (isSVGElement() && !elementRenderer->isSVGRoot()) { 931 if (isSVGElement() && !elementRenderer->isSVGRoot()) {
932 // Get the bounding rectangle from the SVG model. 932 // Get the bounding rectangle from the SVG model.
933 SVGElement* svgElement = toSVGElement(this); 933 SVGElement* svgElement = toSVGElement(this);
934 FloatRect localRect; 934 FloatRect localRect;
935 if (svgElement->getBoundingBox(localRect)) 935 if (svgElement->getBoundingBox(localRect))
936 quads.append(elementRenderer->localToAbsoluteQuad(localRect)); 936 quads.append(elementRenderer->localToAbsoluteQuad(localRect));
937 } else if (elementRenderer->isBoxModelObject() || elementRenderer->isBR( )) { 937 } else if (elementRenderer->isBoxModelObject() || elementRenderer->isBR( )) {
938 elementRenderer->absoluteQuads(quads); 938 elementRenderer->absoluteQuads(quads);
939 } 939 }
940 } 940 }
941 941
942 if (quads.isEmpty()) 942 if (quads.isEmpty())
943 return ClientRect::create(); 943 return ClientRect::create();
944 944
945 FloatRect result = quads[0].boundingBox(); 945 FloatRect result = quads[0].boundingBox();
946 for (size_t i = 1; i < quads.size(); ++i) 946 for (size_t i = 1; i < quads.size(); ++i)
947 result.unite(quads[i].boundingBox()); 947 result.unite(quads[i].boundingBox());
948 948
949 ASSERT(elementRenderer); 949 ASSERT(elementRenderer);
950 document().adjustFloatRectForScrollAndAbsoluteZoom(result, *elementRenderer) ; 950 document().adjustFloatRectForScrollAndAbsoluteZoom(result, *elementRenderer) ;
951 return ClientRect::create(result); 951 return ClientRect::create(result);
952 } 952 }
953 953
954 IntRect Element::screenRect() const 954 IntRect Element::screenRect() const
955 { 955 {
956 if (!renderer()) 956 if (!layoutObject())
957 return IntRect(); 957 return IntRect();
958 // FIXME: this should probably respect transforms 958 // FIXME: this should probably respect transforms
959 return document().view()->contentsToScreen(renderer()->absoluteBoundingBoxRe ctIgnoringTransforms()); 959 return document().view()->contentsToScreen(layoutObject()->absoluteBoundingB oxRectIgnoringTransforms());
960 } 960 }
961 961
962 const AtomicString& Element::computedRole() 962 const AtomicString& Element::computedRole()
963 { 963 {
964 document().updateLayoutIgnorePendingStylesheets(); 964 document().updateLayoutIgnorePendingStylesheets();
965 ScopedAXObjectCache cache(document()); 965 ScopedAXObjectCache cache(document());
966 return cache->computedRoleForNode(this); 966 return cache->computedRoleForNode(this);
967 } 967 }
968 968
969 String Element::computedName() 969 String Element::computedName()
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 ContainerNode::attach(context); 1446 ContainerNode::attach(context);
1447 1447
1448 createPseudoElementIfNeeded(AFTER); 1448 createPseudoElementIfNeeded(AFTER);
1449 createPseudoElementIfNeeded(BACKDROP); 1449 createPseudoElementIfNeeded(BACKDROP);
1450 1450
1451 // We create the first-letter element after the :before, :after and 1451 // We create the first-letter element after the :before, :after and
1452 // children are attached because the first letter text could come 1452 // children are attached because the first letter text could come
1453 // from any of them. 1453 // from any of them.
1454 createPseudoElementIfNeeded(FIRST_LETTER); 1454 createPseudoElementIfNeeded(FIRST_LETTER);
1455 1455
1456 if (hasRareData() && !renderer()) { 1456 if (hasRareData() && !layoutObject()) {
1457 if (ElementAnimations* elementAnimations = elementRareData()->elementAni mations()) { 1457 if (ElementAnimations* elementAnimations = elementRareData()->elementAni mations()) {
1458 elementAnimations->cssAnimations().cancel(); 1458 elementAnimations->cssAnimations().cancel();
1459 elementAnimations->setAnimationStyleChange(false); 1459 elementAnimations->setAnimationStyleChange(false);
1460 } 1460 }
1461 } 1461 }
1462 } 1462 }
1463 1463
1464 void Element::detach(const AttachContext& context) 1464 void Element::detach(const AttachContext& context)
1465 { 1465 {
1466 HTMLFrameOwnerElement::UpdateSuspendScope suspendWidgetHierarchyUpdates; 1466 HTMLFrameOwnerElement::UpdateSuspendScope suspendWidgetHierarchyUpdates;
(...skipping 29 matching lines...) Expand all
1496 ContainerNode::detach(context); 1496 ContainerNode::detach(context);
1497 1497
1498 ASSERT(needsAttach()); 1498 ASSERT(needsAttach());
1499 if (svgFilterNeedsLayerUpdate()) 1499 if (svgFilterNeedsLayerUpdate())
1500 document().unscheduleSVGFilterLayerUpdateHack(*this); 1500 document().unscheduleSVGFilterLayerUpdateHack(*this);
1501 } 1501 }
1502 1502
1503 bool Element::pseudoStyleCacheIsInvalid(const LayoutStyle* currentStyle, LayoutS tyle* newStyle) 1503 bool Element::pseudoStyleCacheIsInvalid(const LayoutStyle* currentStyle, LayoutS tyle* newStyle)
1504 { 1504 {
1505 ASSERT(currentStyle == layoutStyle()); 1505 ASSERT(currentStyle == layoutStyle());
1506 ASSERT(renderer()); 1506 ASSERT(layoutObject());
1507 1507
1508 if (!currentStyle) 1508 if (!currentStyle)
1509 return false; 1509 return false;
1510 1510
1511 const PseudoStyleCache* pseudoStyleCache = currentStyle->cachedPseudoStyles( ); 1511 const PseudoStyleCache* pseudoStyleCache = currentStyle->cachedPseudoStyles( );
1512 if (!pseudoStyleCache) 1512 if (!pseudoStyleCache)
1513 return false; 1513 return false;
1514 1514
1515 size_t cacheSize = pseudoStyleCache->size(); 1515 size_t cacheSize = pseudoStyleCache->size();
1516 for (size_t i = 0; i < cacheSize; ++i) { 1516 for (size_t i = 0; i < cacheSize; ++i) {
1517 RefPtr<LayoutStyle> newPseudoStyle; 1517 RefPtr<LayoutStyle> newPseudoStyle;
1518 PseudoId pseudoId = pseudoStyleCache->at(i)->styleType(); 1518 PseudoId pseudoId = pseudoStyleCache->at(i)->styleType();
1519 if (pseudoId == FIRST_LINE || pseudoId == FIRST_LINE_INHERITED) 1519 if (pseudoId == FIRST_LINE || pseudoId == FIRST_LINE_INHERITED)
1520 newPseudoStyle = renderer()->uncachedFirstLineStyle(newStyle); 1520 newPseudoStyle = layoutObject()->uncachedFirstLineStyle(newStyle);
1521 else 1521 else
1522 newPseudoStyle = renderer()->getUncachedPseudoStyle(PseudoStyleReque st(pseudoId), newStyle, newStyle); 1522 newPseudoStyle = layoutObject()->getUncachedPseudoStyle(PseudoStyleR equest(pseudoId), newStyle, newStyle);
1523 if (!newPseudoStyle) 1523 if (!newPseudoStyle)
1524 return true; 1524 return true;
1525 if (*newPseudoStyle != *pseudoStyleCache->at(i)) { 1525 if (*newPseudoStyle != *pseudoStyleCache->at(i)) {
1526 if (pseudoId < FIRST_INTERNAL_PSEUDOID) 1526 if (pseudoId < FIRST_INTERNAL_PSEUDOID)
1527 newStyle->setHasPseudoStyle(pseudoId); 1527 newStyle->setHasPseudoStyle(pseudoId);
1528 newStyle->addCachedPseudoStyle(newPseudoStyle); 1528 newStyle->addCachedPseudoStyle(newPseudoStyle);
1529 if (pseudoId == FIRST_LINE || pseudoId == FIRST_LINE_INHERITED) { 1529 if (pseudoId == FIRST_LINE || pseudoId == FIRST_LINE_INHERITED) {
1530 // FIXME: We should do an actual diff to determine whether a rep aint vs. layout 1530 // FIXME: We should do an actual diff to determine whether a rep aint vs. layout
1531 // is needed, but for now just assume a layout will be required. The diff code 1531 // is needed, but for now just assume a layout will be required. The diff code
1532 // in LayoutObject::setStyle would need to be factored out so th at it could be reused. 1532 // in LayoutObject::setStyle would need to be factored out so th at it could be reused.
1533 renderer()->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalid ation(); 1533 layoutObject()->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInv alidation();
1534 } 1534 }
1535 return true; 1535 return true;
1536 } 1536 }
1537 } 1537 }
1538 return false; 1538 return false;
1539 } 1539 }
1540 1540
1541 PassRefPtr<LayoutStyle> Element::styleForRenderer() 1541 PassRefPtr<LayoutStyle> Element::styleForRenderer()
1542 { 1542 {
1543 ASSERT(document().inStyleRecalc()); 1543 ASSERT(document().inStyleRecalc());
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1642 1642
1643 RefPtr<LayoutStyle> oldStyle = layoutStyle(); 1643 RefPtr<LayoutStyle> oldStyle = layoutStyle();
1644 RefPtr<LayoutStyle> newStyle = styleForRenderer(); 1644 RefPtr<LayoutStyle> newStyle = styleForRenderer();
1645 StyleRecalcChange localChange = LayoutStyle::stylePropagationDiff(oldStyle.g et(), newStyle.get()); 1645 StyleRecalcChange localChange = LayoutStyle::stylePropagationDiff(oldStyle.g et(), newStyle.get());
1646 1646
1647 ASSERT(newStyle); 1647 ASSERT(newStyle);
1648 1648
1649 if (localChange == Reattach) { 1649 if (localChange == Reattach) {
1650 AttachContext reattachContext; 1650 AttachContext reattachContext;
1651 reattachContext.resolvedStyle = newStyle.get(); 1651 reattachContext.resolvedStyle = newStyle.get();
1652 bool rendererWillChange = needsAttach() || renderer(); 1652 bool rendererWillChange = needsAttach() || layoutObject();
1653 reattach(reattachContext); 1653 reattach(reattachContext);
1654 if (rendererWillChange || renderer()) 1654 if (rendererWillChange || layoutObject())
1655 return Reattach; 1655 return Reattach;
1656 return ReattachNoLayoutObject; 1656 return ReattachNoLayoutObject;
1657 } 1657 }
1658 1658
1659 ASSERT(oldStyle); 1659 ASSERT(oldStyle);
1660 1660
1661 if (localChange != NoChange) 1661 if (localChange != NoChange)
1662 updateCallbackSelectors(oldStyle.get(), newStyle.get()); 1662 updateCallbackSelectors(oldStyle.get(), newStyle.get());
1663 1663
1664 if (LayoutObject* renderer = this->renderer()) { 1664 if (LayoutObject* renderer = this->layoutObject()) {
1665 if (localChange != NoChange || pseudoStyleCacheIsInvalid(oldStyle.get(), newStyle.get()) || svgFilterNeedsLayerUpdate()) { 1665 if (localChange != NoChange || pseudoStyleCacheIsInvalid(oldStyle.get(), newStyle.get()) || svgFilterNeedsLayerUpdate()) {
1666 renderer->setStyle(newStyle.get()); 1666 renderer->setStyle(newStyle.get());
1667 } else { 1667 } else {
1668 // Although no change occurred, we use the new style so that the cou sin style sharing code won't get 1668 // Although no change occurred, we use the new style so that the cou sin style sharing code won't get
1669 // fooled into believing this style is the same. 1669 // fooled into believing this style is the same.
1670 // FIXME: We may be able to remove this hack, see discussion in 1670 // FIXME: We may be able to remove this hack, see discussion in
1671 // https://codereview.chromium.org/30453002/ 1671 // https://codereview.chromium.org/30453002/
1672 renderer->setStyleInternal(newStyle.get()); 1672 renderer->setStyleInternal(newStyle.get());
1673 } 1673 }
1674 } 1674 }
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
2176 // When focusing an editable element in an iframe, don't reset the selec tion if it already contains a selection. 2176 // When focusing an editable element in an iframe, don't reset the selec tion if it already contains a selection.
2177 if (this == frame->selection().rootEditableElement()) 2177 if (this == frame->selection().rootEditableElement())
2178 return; 2178 return;
2179 2179
2180 // FIXME: We should restore the previous selection if there is one. 2180 // FIXME: We should restore the previous selection if there is one.
2181 VisibleSelection newSelection = VisibleSelection(firstPositionInOrBefore Node(this), DOWNSTREAM); 2181 VisibleSelection newSelection = VisibleSelection(firstPositionInOrBefore Node(this), DOWNSTREAM);
2182 // Passing DoNotSetFocus as this function is called after FocusControlle r::setFocusedElement() 2182 // Passing DoNotSetFocus as this function is called after FocusControlle r::setFocusedElement()
2183 // and we don't want to change the focus to a new Element. 2183 // and we don't want to change the focus to a new Element.
2184 frame->selection().setSelection(newSelection, FrameSelection::CloseTypi ng | FrameSelection::ClearTypingStyle | FrameSelection::DoNotSetFocus); 2184 frame->selection().setSelection(newSelection, FrameSelection::CloseTypi ng | FrameSelection::ClearTypingStyle | FrameSelection::DoNotSetFocus);
2185 frame->selection().revealSelection(); 2185 frame->selection().revealSelection();
2186 } else if (renderer() && !renderer()->isLayoutPart()) 2186 } else if (layoutObject() && !layoutObject()->isLayoutPart()) {
2187 renderer()->scrollRectToVisible(boundingBox()); 2187 layoutObject()->scrollRectToVisible(boundingBox());
2188 }
2188 } 2189 }
2189 2190
2190 void Element::blur() 2191 void Element::blur()
2191 { 2192 {
2192 cancelFocusAppearanceUpdate(); 2193 cancelFocusAppearanceUpdate();
2193 if (treeScope().adjustedFocusedElement() == this) { 2194 if (treeScope().adjustedFocusedElement() == this) {
2194 Document& doc = document(); 2195 Document& doc = document();
2195 if (doc.page()) 2196 if (doc.page())
2196 doc.page()->focusController().setFocusedElement(0, doc.frame()); 2197 doc.page()->focusController().setFocusedElement(0, doc.frame());
2197 else 2198 else
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
2405 if (!fragment) 2406 if (!fragment)
2406 return; 2407 return;
2407 insertAdjacent(where, fragment.get(), exceptionState); 2408 insertAdjacent(where, fragment.get(), exceptionState);
2408 } 2409 }
2409 2410
2410 String Element::innerText() 2411 String Element::innerText()
2411 { 2412 {
2412 // We need to update layout, since plainText uses line boxes in the render t ree. 2413 // We need to update layout, since plainText uses line boxes in the render t ree.
2413 document().updateLayoutIgnorePendingStylesheets(); 2414 document().updateLayoutIgnorePendingStylesheets();
2414 2415
2415 if (!renderer()) 2416 if (!layoutObject())
2416 return textContent(true); 2417 return textContent(true);
2417 2418
2418 return plainText(rangeOfContents(const_cast<Element*>(this)).get()); 2419 return plainText(rangeOfContents(const_cast<Element*>(this)).get());
2419 } 2420 }
2420 2421
2421 String Element::outerText() 2422 String Element::outerText()
2422 { 2423 {
2423 // Getting outerText is the same as getting innerText, only 2424 // Getting outerText is the same as getting innerText, only
2424 // setting is different. You would think this should get the plain 2425 // setting is different. You would think this should get the plain
2425 // text for the outer range, but this is wrong, <br> for instance 2426 // text for the outer range, but this is wrong, <br> for instance
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
2600 ASSERT(!needsStyleRecalc()); 2601 ASSERT(!needsStyleRecalc());
2601 PseudoElement* element = pseudoElement(pseudoId); 2602 PseudoElement* element = pseudoElement(pseudoId);
2602 2603
2603 if (element && (change == UpdatePseudoElements || element->shouldCallRecalcS tyle(change))) { 2604 if (element && (change == UpdatePseudoElements || element->shouldCallRecalcS tyle(change))) {
2604 if (pseudoId == FIRST_LETTER && updateFirstLetter(element)) 2605 if (pseudoId == FIRST_LETTER && updateFirstLetter(element))
2605 return; 2606 return;
2606 2607
2607 // Need to clear the cached style if the PseudoElement wants a recalc so it 2608 // Need to clear the cached style if the PseudoElement wants a recalc so it
2608 // computes a new style. 2609 // computes a new style.
2609 if (element->needsStyleRecalc()) 2610 if (element->needsStyleRecalc())
2610 renderer()->style()->removeCachedPseudoStyle(pseudoId); 2611 layoutObject()->style()->removeCachedPseudoStyle(pseudoId);
2611 2612
2612 // PseudoElement styles hang off their parent element's style so if we n eeded 2613 // PseudoElement styles hang off their parent element's style so if we n eeded
2613 // a style recalc we should Force one on the pseudo. 2614 // a style recalc we should Force one on the pseudo.
2614 // FIXME: We should figure out the right text sibling to pass. 2615 // FIXME: We should figure out the right text sibling to pass.
2615 element->recalcStyle(change == UpdatePseudoElements ? Force : change); 2616 element->recalcStyle(change == UpdatePseudoElements ? Force : change);
2616 2617
2617 // Wait until our parent is not displayed or pseudoElementRendererIsNeed ed 2618 // Wait until our parent is not displayed or pseudoElementRendererIsNeed ed
2618 // is false, otherwise we could continuously create and destroy PseudoEl ements 2619 // is false, otherwise we could continuously create and destroy PseudoEl ements
2619 // when LayoutObject::isChildAllowed on our parent returns false for the 2620 // when LayoutObject::isChildAllowed on our parent returns false for the
2620 // PseudoElement's renderer for each style recalc. 2621 // PseudoElement's renderer for each style recalc.
2621 if (!renderer() || !pseudoElementRendererIsNeeded(renderer()->getCachedP seudoStyle(pseudoId))) 2622 if (!layoutObject() || !pseudoElementRendererIsNeeded(layoutObject()->ge tCachedPseudoStyle(pseudoId)))
2622 elementRareData()->setPseudoElement(pseudoId, nullptr); 2623 elementRareData()->setPseudoElement(pseudoId, nullptr);
2623 } else if (pseudoId == FIRST_LETTER && element && change >= UpdatePseudoElem ents && !FirstLetterPseudoElement::firstLetterTextRenderer(*element)) { 2624 } else if (pseudoId == FIRST_LETTER && element && change >= UpdatePseudoElem ents && !FirstLetterPseudoElement::firstLetterTextRenderer(*element)) {
2624 // This can happen if we change to a float, for example. We need to clea nup the 2625 // This can happen if we change to a float, for example. We need to clea nup the
2625 // first-letter pseudoElement and then fix the text of the original rema ining 2626 // first-letter pseudoElement and then fix the text of the original rema ining
2626 // text renderer. 2627 // text renderer.
2627 // This can be seen in Test 7 of fast/css/first-letter-removed-added.htm l 2628 // This can be seen in Test 7 of fast/css/first-letter-removed-added.htm l
2628 elementRareData()->setPseudoElement(pseudoId, nullptr); 2629 elementRareData()->setPseudoElement(pseudoId, nullptr);
2629 } else if (change >= UpdatePseudoElements) { 2630 } else if (change >= UpdatePseudoElements) {
2630 createPseudoElementIfNeeded(pseudoId); 2631 createPseudoElementIfNeeded(pseudoId);
2631 } 2632 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2672 } 2673 }
2673 2674
2674 PseudoElement* Element::pseudoElement(PseudoId pseudoId) const 2675 PseudoElement* Element::pseudoElement(PseudoId pseudoId) const
2675 { 2676 {
2676 return hasRareData() ? elementRareData()->pseudoElement(pseudoId) : nullptr; 2677 return hasRareData() ? elementRareData()->pseudoElement(pseudoId) : nullptr;
2677 } 2678 }
2678 2679
2679 LayoutObject* Element::pseudoElementRenderer(PseudoId pseudoId) const 2680 LayoutObject* Element::pseudoElementRenderer(PseudoId pseudoId) const
2680 { 2681 {
2681 if (PseudoElement* element = pseudoElement(pseudoId)) 2682 if (PseudoElement* element = pseudoElement(pseudoId))
2682 return element->renderer(); 2683 return element->layoutObject();
2683 return nullptr; 2684 return nullptr;
2684 } 2685 }
2685 2686
2686 bool Element::matches(const String& selectors, ExceptionState& exceptionState) 2687 bool Element::matches(const String& selectors, ExceptionState& exceptionState)
2687 { 2688 {
2688 SelectorQuery* selectorQuery = document().selectorQueryCache().add(AtomicStr ing(selectors), document(), exceptionState); 2689 SelectorQuery* selectorQuery = document().selectorQueryCache().add(AtomicStr ing(selectors), document(), exceptionState);
2689 if (!selectorQuery) 2690 if (!selectorQuery)
2690 return false; 2691 return false;
2691 return selectorQuery->matches(*this); 2692 return selectorQuery->matches(*this);
2692 } 2693 }
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
3371 { 3372 {
3372 #if ENABLE(OILPAN) 3373 #if ENABLE(OILPAN)
3373 if (hasRareData()) 3374 if (hasRareData())
3374 visitor->trace(elementRareData()); 3375 visitor->trace(elementRareData());
3375 visitor->trace(m_elementData); 3376 visitor->trace(m_elementData);
3376 #endif 3377 #endif
3377 ContainerNode::trace(visitor); 3378 ContainerNode::trace(visitor);
3378 } 3379 }
3379 3380
3380 } // namespace blink 3381 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/dom/DocumentMarkerController.cpp ('k') | Source/core/dom/FirstLetterPseudoElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698