Expose caret color for clients
authormegan_gardner@apple.com <megan_gardner@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Feb 2020 23:16:30 +0000 (23:16 +0000)
committermegan_gardner@apple.com <megan_gardner@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Feb 2020 23:16:30 +0000 (23:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=207963
<rdar://problem/57383170>

Reviewed by Daniel Bates.

Expose caret color for clients to use.

* WebView/WebFrame.mm:
(-[WebFrame textInsertionColor]):
* WebView/WebFramePrivate.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257097 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKitLegacy/mac/ChangeLog
Source/WebKitLegacy/mac/WebView/WebFrame.mm
Source/WebKitLegacy/mac/WebView/WebFramePrivate.h

index bb6d67c..75d94f6 100644 (file)
@@ -1,3 +1,17 @@
+2020-02-20  Megan Gardner  <megan_gardner@apple.com>
+
+        Expose caret color for clients
+        https://bugs.webkit.org/show_bug.cgi?id=207963
+        <rdar://problem/57383170>
+
+        Reviewed by Daniel Bates.
+
+        Expose caret color for clients to use.
+
+        * WebView/WebFrame.mm:
+        (-[WebFrame textInsertionColor]):
+        * WebView/WebFramePrivate.h:
+
 2020-02-19  Daniel Bates  <dabates@apple.com>
 
         [iOS][LegacyWebKit] Override EditorClient::shouldRevealCurrentSelectionAfterInsertion()
index 2fecbb5..3d8c0d1 100644 (file)
@@ -79,6 +79,7 @@
 #import <WebCore/FrameLoadRequest.h>
 #import <WebCore/FrameLoader.h>
 #import <WebCore/FrameLoaderStateMachine.h>
+#import <WebCore/FrameSelection.h>
 #import <WebCore/FrameTree.h>
 #import <WebCore/GraphicsContext.h>
 #import <WebCore/HTMLFrameOwnerElement.h>
@@ -1431,6 +1432,24 @@ static WebFrameLoadType toWebFrameLoadType(WebCore::FrameLoadType frameLoadType)
     frame->selection().setCaretColor(qColor);
 }
 
+- (CGColorRef)caretColor
+{
+    auto* frame = core(self);
+    if (!frame)
+        return nil;
+    auto* document = frame->document();
+    if (!document)
+        return nil;
+    auto* focusedElement = document->focusedElement();
+    if (!focusedElement)
+        return nil;
+    auto* renderer = focusedElement->renderer();
+    if (!renderer)
+        return nil;
+    auto color = WebCore::CaretBase::computeCaretColor(renderer->style(), renderer->element());
+    return color.isValid() ? cachedCGColor(color) : nil;
+}
+
 - (NSView *)documentView
 {
     WebCore::Frame *frame = core(self);
index a211a0f..8290838 100644 (file)
@@ -142,7 +142,7 @@ typedef enum {
 - (void)setSelectionChangeCallbacksDisabled:(BOOL)flag;
 - (NSRect)caretRect;
 - (NSRect)rectForScrollToVisible; // return caretRect if selection is caret, selectionRect otherwise
-- (void)setCaretColor:(CGColorRef)color;
+@property (nonatomic, readwrite) CGColorRef caretColor;
 - (NSView *)documentView;
 - (int)layoutCount;
 - (BOOL)isTelephoneNumberParsingAllowed;