Index: third_party/WebKit/Source/core/editing/EphemeralRange.cpp |
diff --git a/third_party/WebKit/Source/core/editing/EphemeralRange.cpp b/third_party/WebKit/Source/core/editing/EphemeralRange.cpp |
index a578146ae9e2cb48ea7aad6e06331b761e872981..7cc6901290b29b8928672926562965432e4b7f12 100644 |
--- a/third_party/WebKit/Source/core/editing/EphemeralRange.cpp |
+++ b/third_party/WebKit/Source/core/editing/EphemeralRange.cpp |
@@ -9,6 +9,8 @@ |
#include "core/dom/Element.h" |
#include "core/dom/Range.h" |
#include "core/dom/Text.h" |
+#include "core/editing/EditingUtilities.h" |
+#include "core/layout/LayoutText.h" |
namespace blink { |
@@ -123,6 +125,29 @@ EphemeralRangeTemplate<Strategy> EphemeralRangeTemplate<Strategy>::rangeOfConten |
return EphemeralRangeTemplate<Strategy>(PositionTemplate<Strategy>::firstPositionInNode(&const_cast<Node&>(node)), PositionTemplate<Strategy>::lastPositionInNode(&const_cast<Node&>(node))); |
} |
+static IntRect uniteRects(const Vector<IntRect>& rects) |
+{ |
+ IntRect result; |
+ for (const auto& rect : rects) |
+ result.unite(rect); |
+ return result; |
+} |
+ |
+template <typename Strategy> |
+IntRect EphemeralRangeTemplate<Strategy>::textBoundingBox() const |
+{ |
+ if (isCollapsed()) |
+ return IntRect(); |
+ |
+ Vector<IntRect> rects; |
+ collectTextBoundsInRange( |
+ m_startPosition, m_endPosition, |
+ m_startPosition.nodeAsRangeFirstNode(), m_endPosition.nodeAsRangePastLastNode(), |
+ rects); |
+ |
+ return uniteRects(rects); |
+} |
+ |
#if ENABLE(ASSERT) |
template <typename Strategy> |
bool EphemeralRangeTemplate<Strategy>::isValid() const |