Index: Source/core/rendering/HitTestResult.cpp |
diff --git a/Source/core/rendering/HitTestResult.cpp b/Source/core/rendering/HitTestResult.cpp |
index 0feaf2437fc351ae3c6e5ce1d80e8ffdd6a20f72..685442d6644833c8b99e0e3f242964cc1672a735 100644 |
--- a/Source/core/rendering/HitTestResult.cpp |
+++ b/Source/core/rendering/HitTestResult.cpp |
@@ -43,19 +43,22 @@ |
#include "core/platform/Scrollbar.h" |
#include "core/rendering/HitTestLocation.h" |
#include "core/rendering/RenderImage.h" |
+#include "core/rendering/RenderTextFragment.h" |
namespace WebCore { |
using namespace HTMLNames; |
HitTestResult::HitTestResult() |
- : m_isOverWidget(false) |
+ : m_isFirstLetter(false) |
+ , m_isOverWidget(false) |
{ |
} |
HitTestResult::HitTestResult(const LayoutPoint& point) |
: m_hitTestLocation(point) |
, m_pointInInnerNodeFrame(point) |
+ , m_isFirstLetter(false) |
, m_isOverWidget(false) |
{ |
} |
@@ -63,6 +66,7 @@ HitTestResult::HitTestResult(const LayoutPoint& point) |
HitTestResult::HitTestResult(const LayoutPoint& centerPoint, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding) |
: m_hitTestLocation(centerPoint, topPadding, rightPadding, bottomPadding, leftPadding) |
, m_pointInInnerNodeFrame(centerPoint) |
+ , m_isFirstLetter(false) |
, m_isOverWidget(false) |
{ |
} |
@@ -70,6 +74,7 @@ HitTestResult::HitTestResult(const LayoutPoint& centerPoint, unsigned topPadding |
HitTestResult::HitTestResult(const HitTestLocation& other) |
: m_hitTestLocation(other) |
, m_pointInInnerNodeFrame(m_hitTestLocation.point()) |
+ , m_isFirstLetter(false) |
, m_isOverWidget(false) |
{ |
} |
@@ -82,6 +87,7 @@ HitTestResult::HitTestResult(const HitTestResult& other) |
, m_localPoint(other.localPoint()) |
, m_innerURLElement(other.URLElement()) |
, m_scrollbar(other.scrollbar()) |
+ , m_isFirstLetter(other.m_isFirstLetter) |
, m_isOverWidget(other.isOverWidget()) |
{ |
// Only copy the NodeSet in case of rect hit test. |
@@ -101,6 +107,7 @@ HitTestResult& HitTestResult::operator=(const HitTestResult& other) |
m_localPoint = other.localPoint(); |
m_innerURLElement = other.URLElement(); |
m_scrollbar = other.scrollbar(); |
+ m_isFirstLetter = other.m_isFirstLetter; |
m_isOverWidget = other.isOverWidget(); |
// Only copy the NodeSet in case of rect hit test. |
@@ -109,6 +116,16 @@ HitTestResult& HitTestResult::operator=(const HitTestResult& other) |
return *this; |
} |
+RenderObject* HitTestResult::renderer() const |
+{ |
+ if (!m_innerNode) |
+ return 0; |
+ RenderObject* renderer = m_innerNode->renderer(); |
+ if (!m_isFirstLetter || !renderer || !renderer->isText() || !toRenderText(renderer)->isTextFragment()) |
+ return renderer; |
+ return toRenderTextFragment(renderer)->firstRenderTextInFirstLetter(); |
+} |
+ |
void HitTestResult::setToNodesInDocumentTreeScope() |
{ |
if (Node* node = innerNode()) { |