OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. |
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
46 #include "core/frame/UseCounter.h" | 46 #include "core/frame/UseCounter.h" |
47 #include "core/html/HTMLBRElement.h" | 47 #include "core/html/HTMLBRElement.h" |
48 #include "core/html/HTMLDivElement.h" | 48 #include "core/html/HTMLDivElement.h" |
49 #include "core/html/HTMLLIElement.h" | 49 #include "core/html/HTMLLIElement.h" |
50 #include "core/html/HTMLParagraphElement.h" | 50 #include "core/html/HTMLParagraphElement.h" |
51 #include "core/html/HTMLSpanElement.h" | 51 #include "core/html/HTMLSpanElement.h" |
52 #include "core/html/HTMLTableCellElement.h" | 52 #include "core/html/HTMLTableCellElement.h" |
53 #include "core/html/HTMLUListElement.h" | 53 #include "core/html/HTMLUListElement.h" |
54 #include "core/layout/LayoutObject.h" | 54 #include "core/layout/LayoutObject.h" |
55 #include "core/layout/LayoutTableCell.h" | 55 #include "core/layout/LayoutTableCell.h" |
56 #include "core/layout/LayoutText.h" | |
56 #include "wtf/Assertions.h" | 57 #include "wtf/Assertions.h" |
57 #include "wtf/StdLibExtras.h" | 58 #include "wtf/StdLibExtras.h" |
58 #include "wtf/text/StringBuilder.h" | 59 #include "wtf/text/StringBuilder.h" |
59 | 60 |
60 namespace blink { | 61 namespace blink { |
61 | 62 |
62 using namespace HTMLNames; | 63 using namespace HTMLNames; |
63 | 64 |
64 // Atomic means that the node has no children, or has children which are ignored for the | 65 // Atomic means that the node has no children, or has children which are ignored for the |
65 // purposes of editing. | 66 // purposes of editing. |
(...skipping 1607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1673 | 1674 |
1674 // if the selection starts just before a paragraph break, skip over it | 1675 // if the selection starts just before a paragraph break, skip over it |
1675 if (isEndOfParagraph(visiblePosition)) | 1676 if (isEndOfParagraph(visiblePosition)) |
1676 return mostForwardCaretPosition(nextPositionOf(visiblePosition).deepEqui valent()); | 1677 return mostForwardCaretPosition(nextPositionOf(visiblePosition).deepEqui valent()); |
1677 | 1678 |
1678 // otherwise, make sure to be at the start of the first selected node, | 1679 // otherwise, make sure to be at the start of the first selected node, |
1679 // instead of possibly at the end of the last node before the selection | 1680 // instead of possibly at the end of the last node before the selection |
1680 return mostForwardCaretPosition(visiblePosition.deepEquivalent()); | 1681 return mostForwardCaretPosition(visiblePosition.deepEquivalent()); |
1681 } | 1682 } |
1682 | 1683 |
1684 static void absoluteTextBoundsForRange(LayoutText* layoutText, Vector<IntRect>& rects, unsigned startOffset, unsigned endOffset, bool useSelectionHeight, bool* wasFixed) | |
1685 { | |
1686 layoutText->absoluteRectsForRange(rects, startOffset, endOffset, useSelectio nHeight, wasFixed); | |
1687 } | |
1688 | |
1689 static void absoluteTextBoundsForRange(LayoutText* layoutText, Vector<FloatQuad> & quads, unsigned startOffset, unsigned endOffset, bool useSelectionHeight, bool * wasFixed) | |
1690 { | |
1691 layoutText->absoluteQuadsForRange(quads, startOffset, endOffset, useSelectio nHeight, wasFixed); | |
1692 } | |
1693 | |
1694 template <typename BoundsType> | |
1695 void collectTextBoundsInRangeAlgorithm( | |
yosin_UTC9
2015/11/04 07:11:06
nit: Please add |static|, just in case.
| |
1696 Node* start, int startOffset, Node* end, int endOffset, Node* firstNode, Nod e* stopNode, Node* (*next)(const Node&), | |
1697 Vector<BoundsType>& textBounds, bool useSelectionHeight, bool* allFixed, boo l* someFixed) | |
1698 { | |
1699 ASSERT(start); | |
1700 ASSERT(end); | |
1701 ASSERT(next); | |
1702 | |
1703 bool allFixedLocal = true; | |
1704 bool someFixedLocal = false; | |
1705 for (Node* node = firstNode; node != stopNode; node = next(*node)) { | |
1706 LayoutObject* layoutObject = node->layoutObject(); | |
1707 if (!layoutObject || !layoutObject->isText()) | |
1708 continue; | |
1709 | |
1710 int textStartOffset = node == start ? startOffset : 0; | |
1711 int textEndOffset = node == end ? endOffset : std::numeric_limits<int>:: max(); | |
1712 bool isFixed = false; | |
1713 absoluteTextBoundsForRange(toLayoutText(layoutObject), textBounds, textS tartOffset, textEndOffset, useSelectionHeight, &isFixed); | |
1714 allFixedLocal &= isFixed; | |
1715 someFixedLocal |= isFixed; | |
1716 } | |
1717 | |
1718 if (allFixed) | |
1719 *allFixed = allFixedLocal; | |
1720 | |
1721 if (someFixed) | |
1722 *someFixed = someFixedLocal; | |
1723 } | |
1724 | |
1725 void collectTextBoundsInRange( | |
1726 Node* start, int startOffset, Node* end, int endOffset, Node* firstNode, Nod e* stopNode, Node* (*next)(const Node&), | |
1727 Vector<IntRect>& rects, bool useSelectionHeight, bool* allFixed, bool* someF ixed) | |
1728 { | |
1729 collectTextBoundsInRangeAlgorithm(start, startOffset, end, endOffset, firstN ode, stopNode, next, rects, useSelectionHeight, allFixed, someFixed); | |
1730 } | |
1731 | |
1732 void collectTextBoundsInRange( | |
1733 Node* start, int startOffset, Node* end, int endOffset, Node* firstNode, Nod e* stopNode, Node* (*next)(const Node&), | |
1734 Vector<FloatQuad>& quads, bool useSelectionHeight, bool* allFixed, bool* som eFixed) | |
1735 { | |
1736 collectTextBoundsInRangeAlgorithm(start, startOffset, end, endOffset, firstN ode, stopNode, next, quads, useSelectionHeight, allFixed, someFixed); | |
1737 } | |
1738 | |
1683 } // namespace blink | 1739 } // namespace blink |
OLD | NEW |