Index: Source/WebCore/editing/FrameSelection.cpp |
diff --git a/Source/WebCore/editing/FrameSelection.cpp b/Source/WebCore/editing/FrameSelection.cpp |
index 059f0352a4f433829554256c1a3144d608947837..32c0eaf58e5ad33f80e246acca03a27c83e691c7 100644 |
--- a/Source/WebCore/editing/FrameSelection.cpp |
+++ b/Source/WebCore/editing/FrameSelection.cpp |
@@ -1444,9 +1444,29 @@ void CaretBase::paintCaret(Node* node, GraphicsContext* context, const LayoutPoi |
Color caretColor = Color::black; |
ColorSpace colorSpace = ColorSpaceDeviceRGB; |
- Element* element = node->rootEditableElement(); |
+ Element* element = static_cast<Element *>(node); |
if (element && element->renderer()) { |
- caretColor = element->renderer()->style()->visitedDependentColor(CSSPropertyColor); |
eseidel
2013/04/18 16:03:16
I'm confused. This is clearly not always black, a
joone
2013/04/19 00:25:22
Yes, the caret color is not always black. I misund
|
+ bool isTransparentPage = true; |
+ RenderObject* renderer = element->renderer(); |
+ while (renderer) { |
+ if (renderer->style()->hasBackground()) { |
eseidel
2013/04/18 16:03:16
I'm not sure what it means to be a transparent pag
joone
2013/04/19 00:25:22
Yes, RenderView paints the background with FrameVi
joone
2013/04/26 19:12:55
How about isBackgroundWhite instead of isTranspare
|
+ isTransparentPage = false; |
+ break; |
+ } |
+ if (!renderer->isRoot()) |
+ renderer = renderer->parent(); |
+ else |
+ break; |
+ } |
+ |
+ Color backgroundColor; |
+ if (!isTransparentPage) { |
+ backgroundColor = renderer->style()->visitedDependentColor(CSSPropertyBackgroundColor); |
+ if (backgroundColor.lightness() < 0.5) |
+ caretColor = Color::white; |
+ } else |
+ caretColor = Color::black; |
+ |
colorSpace = element->renderer()->style()->colorSpace(); |
} |