Index: Source/core/editing/markers/DocumentMarker.cpp |
diff --git a/Source/core/editing/markers/DocumentMarker.cpp b/Source/core/editing/markers/DocumentMarker.cpp |
index 90933b4a7a3094dd0f81d99e823266c5ff0c8a10..eb0103e2757d7844650f48759053d236d618cc45 100644 |
--- a/Source/core/editing/markers/DocumentMarker.cpp |
+++ b/Source/core/editing/markers/DocumentMarker.cpp |
@@ -68,7 +68,7 @@ inline DocumentMarkerDescription* toDocumentMarkerDescription(DocumentMarkerDeta |
class DocumentMarkerTextMatch final : public DocumentMarkerDetails { |
public: |
- static PassRefPtrWillBeRawPtr<DocumentMarkerTextMatch> instanceFor(bool); |
+ static PassRefPtrWillBeRawPtr<DocumentMarkerTextMatch> create(bool); |
bool activeMatch() const { return m_match; } |
bool isTextMatch() const override { return true; } |
@@ -82,7 +82,7 @@ private: |
bool m_match; |
}; |
-PassRefPtrWillBeRawPtr<DocumentMarkerTextMatch> DocumentMarkerTextMatch::instanceFor(bool match) |
+PassRefPtrWillBeRawPtr<DocumentMarkerTextMatch> DocumentMarkerTextMatch::create(bool match) |
{ |
DEFINE_STATIC_REF_WILL_BE_PERSISTENT(DocumentMarkerTextMatch, trueInstance, (adoptRefWillBeNoop(new DocumentMarkerTextMatch(true)))); |
DEFINE_STATIC_REF_WILL_BE_PERSISTENT(DocumentMarkerTextMatch, falseInstance, (adoptRefWillBeNoop(new DocumentMarkerTextMatch(false)))); |
@@ -96,6 +96,41 @@ inline DocumentMarkerTextMatch* toDocumentMarkerTextMatch(DocumentMarkerDetails* |
return 0; |
} |
+class TextCompositionMarkerDetails final : public DocumentMarkerDetails { |
+public: |
+ static PassRefPtrWillBeRawPtr<TextCompositionMarkerDetails> create(Color underlineColor, bool thick, Color backgroundColor); |
+ |
+ bool isComposition() const override { return true; } |
+ Color underlineColor() const { return m_underlineColor; } |
+ bool thick() const { return m_thick; } |
+ Color backgroundColor() const { return m_backgroundColor; } |
+ |
+private: |
+ TextCompositionMarkerDetails(Color underlineColor, bool thick, Color backgroundColor) |
+ : m_underlineColor(underlineColor) |
+ , m_backgroundColor(backgroundColor) |
+ , m_thick(thick) |
+ { |
+ } |
+ |
+ Color m_underlineColor; |
+ Color m_backgroundColor; |
+ bool m_thick; |
+}; |
+ |
+PassRefPtrWillBeRawPtr<TextCompositionMarkerDetails> TextCompositionMarkerDetails::create(Color underlineColor, bool thick, Color backgroundColor) |
+{ |
+ return adoptRefWillBeNoop(new TextCompositionMarkerDetails(underlineColor, thick, backgroundColor)); |
+} |
+ |
+inline TextCompositionMarkerDetails* toTextCompositionMarkerDetails(DocumentMarkerDetails* details) |
+{ |
+ if (details && details->isComposition()) |
+ return static_cast<TextCompositionMarkerDetails*>(details); |
+ return nullptr; |
+} |
+ |
+ |
DocumentMarker::DocumentMarker(MarkerType type, unsigned startOffset, unsigned endOffset, const String& description, uint32_t hash) |
: m_type(type) |
, m_startOffset(startOffset) |
@@ -109,7 +144,16 @@ DocumentMarker::DocumentMarker(unsigned startOffset, unsigned endOffset, bool ac |
: m_type(DocumentMarker::TextMatch) |
, m_startOffset(startOffset) |
, m_endOffset(endOffset) |
- , m_details(DocumentMarkerTextMatch::instanceFor(activeMatch)) |
+ , m_details(DocumentMarkerTextMatch::create(activeMatch)) |
+ , m_hash(0) |
+{ |
+} |
+ |
+DocumentMarker::DocumentMarker(unsigned startOffset, unsigned endOffset, Color underlineColor, bool thick, Color backgroundColor) |
+ : m_type(DocumentMarker::Composition) |
+ , m_startOffset(startOffset) |
+ , m_endOffset(endOffset) |
+ , m_details(TextCompositionMarkerDetails::create(underlineColor, thick, backgroundColor)) |
, m_hash(0) |
{ |
} |
@@ -131,7 +175,7 @@ void DocumentMarker::shiftOffsets(int delta) |
void DocumentMarker::setActiveMatch(bool active) |
{ |
- m_details = DocumentMarkerTextMatch::instanceFor(active); |
+ m_details = DocumentMarkerTextMatch::create(active); |
} |
const String& DocumentMarker::description() const |
@@ -148,6 +192,27 @@ bool DocumentMarker::activeMatch() const |
return false; |
} |
+Color DocumentMarker::underlineColor() const |
+{ |
+ if (TextCompositionMarkerDetails* details = toTextCompositionMarkerDetails(m_details.get())) |
+ return details->underlineColor(); |
+ return Color::transparent; |
+} |
+ |
+bool DocumentMarker::thick() const |
+{ |
+ if (TextCompositionMarkerDetails* details = toTextCompositionMarkerDetails(m_details.get())) |
+ return details->thick(); |
+ return false; |
+} |
+ |
+Color DocumentMarker::backgroundColor() const |
+{ |
+ if (TextCompositionMarkerDetails* details = toTextCompositionMarkerDetails(m_details.get())) |
+ return details->backgroundColor(); |
+ return Color::transparent; |
+} |
+ |
DEFINE_TRACE(DocumentMarker) |
{ |
visitor->trace(m_details); |