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

Side by Side Diff: third_party/WebKit/Source/core/editing/VisibleUnits.cpp

Issue 2181953004: Changed ComputedStyle's EVisibility to be an enum class and fixed naming (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@_move_computedstyle_around
Patch Set: Rebase Created 4 years, 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after
1551 if (!prevousNodeIterator || !prevousNodeIterator->isDescendantOf(hig hestRoot)) 1551 if (!prevousNodeIterator || !prevousNodeIterator->isDescendantOf(hig hestRoot))
1552 break; 1552 break;
1553 } 1553 }
1554 1554
1555 const LayoutItem layoutItem = LayoutItem(prevousNodeIterator->layoutObje ct()); 1555 const LayoutItem layoutItem = LayoutItem(prevousNodeIterator->layoutObje ct());
1556 if (layoutItem.isNull()) { 1556 if (layoutItem.isNull()) {
1557 prevousNodeIterator = Strategy::previousPostOrder(*prevousNodeIterat or, startBlock); 1557 prevousNodeIterator = Strategy::previousPostOrder(*prevousNodeIterat or, startBlock);
1558 continue; 1558 continue;
1559 } 1559 }
1560 const ComputedStyle& style = layoutItem.styleRef(); 1560 const ComputedStyle& style = layoutItem.styleRef();
1561 if (style.visibility() != VISIBLE) { 1561 if (style.visibility() != EVisibility::Visible) {
1562 prevousNodeIterator = Strategy::previousPostOrder(*prevousNodeIterat or, startBlock); 1562 prevousNodeIterator = Strategy::previousPostOrder(*prevousNodeIterat or, startBlock);
1563 continue; 1563 continue;
1564 } 1564 }
1565 1565
1566 if (layoutItem.isBR() || isEnclosingBlock(prevousNodeIterator)) 1566 if (layoutItem.isBR() || isEnclosingBlock(prevousNodeIterator))
1567 break; 1567 break;
1568 1568
1569 if (layoutItem.isText() && toLayoutText(prevousNodeIterator->layoutObjec t())->resolvedTextLength()) { 1569 if (layoutItem.isText() && toLayoutText(prevousNodeIterator->layoutObjec t())->resolvedTextLength()) {
1570 SECURITY_DCHECK(prevousNodeIterator->isTextNode()); 1570 SECURITY_DCHECK(prevousNodeIterator->isTextNode());
1571 if (style.preserveNewline()) { 1571 if (style.preserveNewline()) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1642 if (!nextNodeItreator || !nextNodeItreator->isDescendantOf(highestRo ot)) 1642 if (!nextNodeItreator || !nextNodeItreator->isDescendantOf(highestRo ot))
1643 break; 1643 break;
1644 } 1644 }
1645 1645
1646 LayoutObject* const layoutObject = nextNodeItreator->layoutObject(); 1646 LayoutObject* const layoutObject = nextNodeItreator->layoutObject();
1647 if (!layoutObject) { 1647 if (!layoutObject) {
1648 nextNodeItreator = Strategy::next(*nextNodeItreator, startBlock); 1648 nextNodeItreator = Strategy::next(*nextNodeItreator, startBlock);
1649 continue; 1649 continue;
1650 } 1650 }
1651 const ComputedStyle& style = layoutObject->styleRef(); 1651 const ComputedStyle& style = layoutObject->styleRef();
1652 if (style.visibility() != VISIBLE) { 1652 if (style.visibility() != EVisibility::Visible) {
1653 nextNodeItreator = Strategy::next(*nextNodeItreator, startBlock); 1653 nextNodeItreator = Strategy::next(*nextNodeItreator, startBlock);
1654 continue; 1654 continue;
1655 } 1655 }
1656 1656
1657 if (layoutObject->isBR() || isEnclosingBlock(nextNodeItreator)) 1657 if (layoutObject->isBR() || isEnclosingBlock(nextNodeItreator))
1658 break; 1658 break;
1659 1659
1660 // FIXME: We avoid returning a position where the layoutObject can't acc ept the caret. 1660 // FIXME: We avoid returning a position where the layoutObject can't acc ept the caret.
1661 if (layoutObject->isText() && toLayoutText(layoutObject)->resolvedTextLe ngth()) { 1661 if (layoutObject->isText() && toLayoutText(layoutObject)->resolvedTextLe ngth()) {
1662 SECURITY_DCHECK(nextNodeItreator->isTextNode()); 1662 SECURITY_DCHECK(nextNodeItreator->isTextNode());
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
2450 lastNode = currentNode; 2450 lastNode = currentNode;
2451 } 2451 }
2452 2452
2453 // If we've moved to a position that is visually distinct, return the la st saved position. There 2453 // If we've moved to a position that is visually distinct, return the la st saved position. There
2454 // is code below that terminates early if we're *about* to move to a vis ually distinct position. 2454 // is code below that terminates early if we're *about* to move to a vis ually distinct position.
2455 if (endsOfNodeAreVisuallyDistinctPositions(currentNode) && currentNode ! = boundary) 2455 if (endsOfNodeAreVisuallyDistinctPositions(currentNode) && currentNode ! = boundary)
2456 return lastVisible.deprecatedComputePosition(); 2456 return lastVisible.deprecatedComputePosition();
2457 2457
2458 // skip position in non-laid out or invisible node 2458 // skip position in non-laid out or invisible node
2459 LayoutObject* layoutObject = associatedLayoutObjectOf(*currentNode, curr entPos.offsetInLeafNode()); 2459 LayoutObject* layoutObject = associatedLayoutObjectOf(*currentNode, curr entPos.offsetInLeafNode());
2460 if (!layoutObject || layoutObject->style()->visibility() != VISIBLE) 2460 if (!layoutObject || layoutObject->style()->visibility() != EVisibility: :Visible)
2461 continue; 2461 continue;
2462 2462
2463 if (rule == CanCrossEditingBoundary && boundaryCrossed) { 2463 if (rule == CanCrossEditingBoundary && boundaryCrossed) {
2464 lastVisible = currentPos; 2464 lastVisible = currentPos;
2465 break; 2465 break;
2466 } 2466 }
2467 2467
2468 // track last visible streamer position 2468 // track last visible streamer position
2469 if (isStreamer<Strategy>(currentPos)) 2469 if (isStreamer<Strategy>(currentPos))
2470 lastVisible = currentPos; 2470 lastVisible = currentPos;
(...skipping 27 matching lines...) Expand all
2498 DCHECK_GE(currentPos.offsetInLeafNode(), static_cast<int>(textStartO ffset)); 2498 DCHECK_GE(currentPos.offsetInLeafNode(), static_cast<int>(textStartO ffset));
2499 const unsigned textOffset = currentPos.offsetInLeafNode() - textStar tOffset; 2499 const unsigned textOffset = currentPos.offsetInLeafNode() - textStar tOffset;
2500 InlineTextBox* lastTextBox = textLayoutObject->lastTextBox(); 2500 InlineTextBox* lastTextBox = textLayoutObject->lastTextBox();
2501 for (InlineTextBox* box = textLayoutObject->firstTextBox(); box; box = box->nextTextBox()) { 2501 for (InlineTextBox* box = textLayoutObject->firstTextBox(); box; box = box->nextTextBox()) {
2502 if (textOffset == box->start()) { 2502 if (textOffset == box->start()) {
2503 if (textLayoutObject->isTextFragment() && toLayoutTextFragme nt(layoutObject)->isRemainingTextLayoutObject()) { 2503 if (textLayoutObject->isTextFragment() && toLayoutTextFragme nt(layoutObject)->isRemainingTextLayoutObject()) {
2504 // |currentPos| is at start of remaining text of 2504 // |currentPos| is at start of remaining text of
2505 // |Text| node with :first-letter. 2505 // |Text| node with :first-letter.
2506 DCHECK_GE(currentPos.offsetInLeafNode(), 1); 2506 DCHECK_GE(currentPos.offsetInLeafNode(), 1);
2507 LayoutObject* firstLetterLayoutObject = toLayoutTextFrag ment(layoutObject)->firstLetterPseudoElement()->layoutObject(); 2507 LayoutObject* firstLetterLayoutObject = toLayoutTextFrag ment(layoutObject)->firstLetterPseudoElement()->layoutObject();
2508 if (firstLetterLayoutObject && firstLetterLayoutObject-> style()->visibility() == VISIBLE) 2508 if (firstLetterLayoutObject && firstLetterLayoutObject-> style()->visibility() == EVisibility::Visible)
2509 return currentPos.computePosition(); 2509 return currentPos.computePosition();
2510 } 2510 }
2511 continue; 2511 continue;
2512 } 2512 }
2513 if (textOffset <= box->start() + box->len()) { 2513 if (textOffset <= box->start() + box->len()) {
2514 if (textOffset > box->start()) 2514 if (textOffset > box->start())
2515 return currentPos.computePosition(); 2515 return currentPos.computePosition();
2516 continue; 2516 continue;
2517 } 2517 }
2518 2518
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2601 if (endsOfNodeAreVisuallyDistinctPositions(currentNode) && currentNode ! = boundary) 2601 if (endsOfNodeAreVisuallyDistinctPositions(currentNode) && currentNode ! = boundary)
2602 return lastVisible.deprecatedComputePosition(); 2602 return lastVisible.deprecatedComputePosition();
2603 // Do not move past a visually disinct position. 2603 // Do not move past a visually disinct position.
2604 // Note: The first position after the last in a node whose ends are visu ally distinct 2604 // Note: The first position after the last in a node whose ends are visu ally distinct
2605 // positions will be [boundary->parentNode(), originalBlock->nodeIndex() + 1]. 2605 // positions will be [boundary->parentNode(), originalBlock->nodeIndex() + 1].
2606 if (boundary && Strategy::parent(*boundary) == currentNode) 2606 if (boundary && Strategy::parent(*boundary) == currentNode)
2607 return lastVisible.deprecatedComputePosition(); 2607 return lastVisible.deprecatedComputePosition();
2608 2608
2609 // skip position in non-laid out or invisible node 2609 // skip position in non-laid out or invisible node
2610 LayoutObject* layoutObject = associatedLayoutObjectOf(*currentNode, curr entPos.offsetInLeafNode()); 2610 LayoutObject* layoutObject = associatedLayoutObjectOf(*currentNode, curr entPos.offsetInLeafNode());
2611 if (!layoutObject || layoutObject->style()->visibility() != VISIBLE) 2611 if (!layoutObject || layoutObject->style()->visibility() != EVisibility: :Visible)
2612 continue; 2612 continue;
2613 2613
2614 if (rule == CanCrossEditingBoundary && boundaryCrossed) { 2614 if (rule == CanCrossEditingBoundary && boundaryCrossed) {
2615 lastVisible = currentPos; 2615 lastVisible = currentPos;
2616 break; 2616 break;
2617 } 2617 }
2618 2618
2619 // track last visible streamer position 2619 // track last visible streamer position
2620 if (isStreamer<Strategy>(currentPos)) 2620 if (isStreamer<Strategy>(currentPos))
2621 lastVisible = currentPos; 2621 lastVisible = currentPos;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
2719 static bool isVisuallyEquivalentCandidateAlgorithm(const PositionTemplate<Strate gy>& position) 2719 static bool isVisuallyEquivalentCandidateAlgorithm(const PositionTemplate<Strate gy>& position)
2720 { 2720 {
2721 Node* const anchorNode = position.anchorNode(); 2721 Node* const anchorNode = position.anchorNode();
2722 if (!anchorNode) 2722 if (!anchorNode)
2723 return false; 2723 return false;
2724 2724
2725 LayoutObject* layoutObject = anchorNode->layoutObject(); 2725 LayoutObject* layoutObject = anchorNode->layoutObject();
2726 if (!layoutObject) 2726 if (!layoutObject)
2727 return false; 2727 return false;
2728 2728
2729 if (layoutObject->style()->visibility() != VISIBLE) 2729 if (layoutObject->style()->visibility() != EVisibility::Visible)
2730 return false; 2730 return false;
2731 2731
2732 if (layoutObject->isBR()) { 2732 if (layoutObject->isBR()) {
2733 // TODO(leviw) The condition should be 2733 // TODO(leviw) The condition should be
2734 // m_anchorType == PositionAnchorType::BeforeAnchor, but for now we 2734 // m_anchorType == PositionAnchorType::BeforeAnchor, but for now we
2735 // still need to support legacy positions. 2735 // still need to support legacy positions.
2736 if (position.isAfterAnchor()) 2736 if (position.isAfterAnchor())
2737 return false; 2737 return false;
2738 if (position.computeEditingOffset()) 2738 if (position.computeEditingOffset())
2739 return false; 2739 return false;
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
3320 { 3320 {
3321 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); 3321 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule);
3322 } 3322 }
3323 3323
3324 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi siblePosition, EditingBoundaryCrossingRule rule) 3324 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi siblePosition, EditingBoundaryCrossingRule rule)
3325 { 3325 {
3326 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n, rule); 3326 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n, rule);
3327 } 3327 }
3328 3328
3329 } // namespace blink 3329 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698