| 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) 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 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 if (document().documentElement() == this) { | 391 if (document().documentElement() == this) { |
| 392 if (FrameView* view = document().view()) | 392 if (FrameView* view = document().view()) |
| 393 return view->layoutSize().height(); | 393 return view->layoutSize().height(); |
| 394 } | 394 } |
| 395 | 395 |
| 396 if (RenderBox* renderer = renderBox()) | 396 if (RenderBox* renderer = renderBox()) |
| 397 return renderer->pixelSnappedClientHeight(); | 397 return renderer->pixelSnappedClientHeight(); |
| 398 return 0; | 398 return 0; |
| 399 } | 399 } |
| 400 | 400 |
| 401 int Element::scrollLeft() | |
| 402 { | |
| 403 // FIXME(sky): Remove(scrolling) | |
| 404 return 0; | |
| 405 } | |
| 406 | |
| 407 int Element::scrollTop() | |
| 408 { | |
| 409 // FIXME(sky): Remove(scrolling) | |
| 410 return 0; | |
| 411 } | |
| 412 | |
| 413 void Element::setScrollLeft(int newLeft) | |
| 414 { | |
| 415 // FIXME(sky): Remove(scrolling) | |
| 416 } | |
| 417 | |
| 418 void Element::setScrollLeft(const Dictionary& scrollOptionsHorizontal, Exception
State& exceptionState) | |
| 419 { | |
| 420 // FIXME(sky): Remove(scrolling) | |
| 421 } | |
| 422 | |
| 423 void Element::setScrollTop(int newTop) | |
| 424 { | |
| 425 // FIXME(sky): Remove(scrolling) | |
| 426 } | |
| 427 | |
| 428 void Element::setScrollTop(const Dictionary& scrollOptionsVertical, ExceptionSta
te& exceptionState) | |
| 429 { | |
| 430 // FIXME(sky): Remove(scrolling) | |
| 431 } | |
| 432 | |
| 433 int Element::scrollWidth() | |
| 434 { | |
| 435 // FIXME(sky): Remove(scrolling) | |
| 436 return 0; | |
| 437 } | |
| 438 | |
| 439 int Element::scrollHeight() | |
| 440 { | |
| 441 // FIXME(sky): Remove(scrolling) | |
| 442 return 0; | |
| 443 } | |
| 444 | |
| 445 PassRefPtr<ClientRectList> Element::getClientRects() | 401 PassRefPtr<ClientRectList> Element::getClientRects() |
| 446 { | 402 { |
| 447 document().updateLayout(); | 403 document().updateLayout(); |
| 448 | 404 |
| 449 RenderBoxModelObject* renderBoxModelObject = this->renderBoxModelObject(); | 405 RenderBoxModelObject* renderBoxModelObject = this->renderBoxModelObject(); |
| 450 if (!renderBoxModelObject) | 406 if (!renderBoxModelObject) |
| 451 return ClientRectList::create(); | 407 return ClientRectList::create(); |
| 452 | 408 |
| 453 // FIXME: Handle SVG elements. | 409 // FIXME: Handle SVG elements. |
| 454 // FIXME: Handle table/inline-table with a caption. | 410 // FIXME: Handle table/inline-table with a caption. |
| 455 | 411 |
| 456 Vector<FloatQuad> quads; | 412 Vector<FloatQuad> quads; |
| 457 renderBoxModelObject->absoluteQuads(quads); | 413 renderBoxModelObject->absoluteQuads(quads); |
| 458 document().adjustFloatQuadsForScroll(quads); | |
| 459 return ClientRectList::create(quads); | 414 return ClientRectList::create(quads); |
| 460 } | 415 } |
| 461 | 416 |
| 462 PassRefPtr<ClientRect> Element::getBoundingClientRect() | 417 PassRefPtr<ClientRect> Element::getBoundingClientRect() |
| 463 { | 418 { |
| 464 document().updateLayout(); | 419 document().updateLayout(); |
| 465 | 420 |
| 466 Vector<FloatQuad> quads; | 421 Vector<FloatQuad> quads; |
| 467 // Get the bounding rectangle from the box model. | 422 // Get the bounding rectangle from the box model. |
| 468 if (renderBoxModelObject()) | 423 if (renderBoxModelObject()) |
| 469 renderBoxModelObject()->absoluteQuads(quads); | 424 renderBoxModelObject()->absoluteQuads(quads); |
| 470 | 425 |
| 471 if (quads.isEmpty()) | 426 if (quads.isEmpty()) |
| 472 return ClientRect::create(); | 427 return ClientRect::create(); |
| 473 | 428 |
| 474 FloatRect result = quads[0].boundingBox(); | 429 FloatRect result = quads[0].boundingBox(); |
| 475 for (size_t i = 1; i < quads.size(); ++i) | 430 for (size_t i = 1; i < quads.size(); ++i) |
| 476 result.unite(quads[i].boundingBox()); | 431 result.unite(quads[i].boundingBox()); |
| 477 | 432 |
| 478 document().adjustFloatRectForScroll(result); | |
| 479 return ClientRect::create(result); | 433 return ClientRect::create(result); |
| 480 } | 434 } |
| 481 | 435 |
| 482 void Element::setAttribute(const AtomicString& localName, const AtomicString& va
lue, ExceptionState& exceptionState) | 436 void Element::setAttribute(const AtomicString& localName, const AtomicString& va
lue, ExceptionState& exceptionState) |
| 483 { | 437 { |
| 484 if (!Document::isValidName(localName)) { | 438 if (!Document::isValidName(localName)) { |
| 485 exceptionState.throwDOMException(InvalidCharacterError, "'" + localName
+ "' is not a valid attribute name."); | 439 exceptionState.throwDOMException(InvalidCharacterError, "'" + localName
+ "' is not a valid attribute name."); |
| 486 return; | 440 return; |
| 487 } | 441 } |
| 488 | 442 |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 | 664 |
| 711 const AtomicString& idValue = getIdAttribute(); | 665 const AtomicString& idValue = getIdAttribute(); |
| 712 if (!idValue.isNull()) | 666 if (!idValue.isNull()) |
| 713 updateId(scope, nullAtom, idValue); | 667 updateId(scope, nullAtom, idValue); |
| 714 } | 668 } |
| 715 | 669 |
| 716 void Element::removedFrom(ContainerNode* insertionPoint) | 670 void Element::removedFrom(ContainerNode* insertionPoint) |
| 717 { | 671 { |
| 718 bool wasInDocument = insertionPoint->inDocument(); | 672 bool wasInDocument = insertionPoint->inDocument(); |
| 719 | 673 |
| 720 setSavedLayerScrollOffset(IntSize()); | |
| 721 | |
| 722 if (insertionPoint->isInTreeScope() && treeScope() == document()) { | 674 if (insertionPoint->isInTreeScope() && treeScope() == document()) { |
| 723 const AtomicString& idValue = getIdAttribute(); | 675 const AtomicString& idValue = getIdAttribute(); |
| 724 if (!idValue.isNull()) | 676 if (!idValue.isNull()) |
| 725 updateId(insertionPoint->treeScope(), idValue, nullAtom); | 677 updateId(insertionPoint->treeScope(), idValue, nullAtom); |
| 726 } | 678 } |
| 727 | 679 |
| 728 ContainerNode::removedFrom(insertionPoint); | 680 ContainerNode::removedFrom(insertionPoint); |
| 729 if (wasInDocument) { | 681 if (wasInDocument) { |
| 730 if (isUpgradedCustomElement()) | 682 if (isUpgradedCustomElement()) |
| 731 CustomElement::didDetach(this, insertionPoint->document()); | 683 CustomElement::didDetach(this, insertionPoint->document()); |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 // When focusing an editable element in an iframe, don't reset the selec
tion if it already contains a selection. | 1060 // When focusing an editable element in an iframe, don't reset the selec
tion if it already contains a selection. |
| 1109 if (this == frame->selection().rootEditableElement()) | 1061 if (this == frame->selection().rootEditableElement()) |
| 1110 return; | 1062 return; |
| 1111 | 1063 |
| 1112 // FIXME: We should restore the previous selection if there is one. | 1064 // FIXME: We should restore the previous selection if there is one. |
| 1113 VisibleSelection newSelection = VisibleSelection(firstPositionInOrBefore
Node(this), DOWNSTREAM); | 1065 VisibleSelection newSelection = VisibleSelection(firstPositionInOrBefore
Node(this), DOWNSTREAM); |
| 1114 // Passing DoNotSetFocus as this function is called after FocusControlle
r::setFocusedElement() | 1066 // Passing DoNotSetFocus as this function is called after FocusControlle
r::setFocusedElement() |
| 1115 // and we don't want to change the focus to a new Element. | 1067 // and we don't want to change the focus to a new Element. |
| 1116 frame->selection().setSelection(newSelection, FrameSelection::CloseTypi
ng | FrameSelection::ClearTypingStyle | FrameSelection::DoNotSetFocus); | 1068 frame->selection().setSelection(newSelection, FrameSelection::CloseTypi
ng | FrameSelection::ClearTypingStyle | FrameSelection::DoNotSetFocus); |
| 1117 frame->selection().revealSelection(); | 1069 frame->selection().revealSelection(); |
| 1118 } else if (renderer()) | 1070 } |
| 1119 renderer()->scrollRectToVisible(boundingBox()); | |
| 1120 } | 1071 } |
| 1121 | 1072 |
| 1122 void Element::blur() | 1073 void Element::blur() |
| 1123 { | 1074 { |
| 1124 if (treeScope().adjustedFocusedElement() == this) { | 1075 if (treeScope().adjustedFocusedElement() == this) { |
| 1125 Document& doc = document(); | 1076 Document& doc = document(); |
| 1126 if (doc.page()) | 1077 if (doc.page()) |
| 1127 doc.page()->focusController().setFocusedElement(0, doc.frame()); | 1078 doc.page()->focusController().setFocusedElement(0, doc.frame()); |
| 1128 else | 1079 else |
| 1129 doc.setFocusedElement(nullptr); | 1080 doc.setFocusedElement(nullptr); |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1401 } | 1352 } |
| 1402 | 1353 |
| 1403 void Element::didMoveToNewDocument(Document& oldDocument) | 1354 void Element::didMoveToNewDocument(Document& oldDocument) |
| 1404 { | 1355 { |
| 1405 Node::didMoveToNewDocument(oldDocument); | 1356 Node::didMoveToNewDocument(oldDocument); |
| 1406 | 1357 |
| 1407 if (needsURLResolutionForInlineStyle(*this, oldDocument, document())) | 1358 if (needsURLResolutionForInlineStyle(*this, oldDocument, document())) |
| 1408 reResolveURLsInInlineStyle(document(), ensureMutableInlineStyle()); | 1359 reResolveURLsInInlineStyle(document(), ensureMutableInlineStyle()); |
| 1409 } | 1360 } |
| 1410 | 1361 |
| 1411 IntSize Element::savedLayerScrollOffset() const | |
| 1412 { | |
| 1413 return hasRareData() ? elementRareData()->savedLayerScrollOffset() : IntSize
(); | |
| 1414 } | |
| 1415 | |
| 1416 void Element::setSavedLayerScrollOffset(const IntSize& size) | |
| 1417 { | |
| 1418 if (size.isZero() && !hasRareData()) | |
| 1419 return; | |
| 1420 ensureElementRareData().setSavedLayerScrollOffset(size); | |
| 1421 } | |
| 1422 | |
| 1423 void Element::cloneAttributesFromElement(const Element& other) | 1362 void Element::cloneAttributesFromElement(const Element& other) |
| 1424 { | 1363 { |
| 1425 other.synchronizeAllAttributes(); | 1364 other.synchronizeAllAttributes(); |
| 1426 if (!other.m_elementData) { | 1365 if (!other.m_elementData) { |
| 1427 m_elementData.clear(); | 1366 m_elementData.clear(); |
| 1428 return; | 1367 return; |
| 1429 } | 1368 } |
| 1430 | 1369 |
| 1431 const AtomicString& oldID = getIdAttribute(); | 1370 const AtomicString& oldID = getIdAttribute(); |
| 1432 const AtomicString& newID = other.getIdAttribute(); | 1371 const AtomicString& newID = other.getIdAttribute(); |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1648 return false; | 1587 return false; |
| 1649 if (treeScope().scopedStyleResolver().hasSelectorForId(idValue)) | 1588 if (treeScope().scopedStyleResolver().hasSelectorForId(idValue)) |
| 1650 return true; | 1589 return true; |
| 1651 // Host rules could also have effects. | 1590 // Host rules could also have effects. |
| 1652 if (ShadowRoot* shadowRoot = this->shadowRoot()) | 1591 if (ShadowRoot* shadowRoot = this->shadowRoot()) |
| 1653 return shadowRoot->scopedStyleResolver().hasSelectorForId(idValue); | 1592 return shadowRoot->scopedStyleResolver().hasSelectorForId(idValue); |
| 1654 return false; | 1593 return false; |
| 1655 } | 1594 } |
| 1656 | 1595 |
| 1657 } // namespace blink | 1596 } // namespace blink |
| OLD | NEW |