Index: Source/core/editing/FrameSelection.cpp |
diff --git a/Source/core/editing/FrameSelection.cpp b/Source/core/editing/FrameSelection.cpp |
index aa4a95d3d3c4f540af58cdf7384ca816c0017406..2016ea8755934df0daecf7b6380321bbcbbef607 100644 |
--- a/Source/core/editing/FrameSelection.cpp |
+++ b/Source/core/editing/FrameSelection.cpp |
@@ -1440,9 +1440,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); |
+ bool isBackgroundWhite = true; |
eseidel
2013/04/27 05:10:42
This doesn't mean "isBackgroundWhite" either. :)
|
+ RenderObject* renderer = element->renderer(); |
+ while (renderer) { |
eseidel
2013/04/27 05:10:42
I would re-write this as a helper function:
Rende
joone
2013/04/29 19:17:28
Okay, I will add this helper function.
|
+ if (renderer->style()->hasBackground()) { |
+ isBackgroundWhite = false; |
+ break; |
+ } |
+ if (!renderer->isRoot()) |
+ renderer = renderer->parent(); |
+ else |
+ break; |
+ } |
+ |
+ Color backgroundColor; |
+ if (!isBackgroundWhite) { |
+ backgroundColor = renderer->style()->visitedDependentColor(CSSPropertyBackgroundColor); |
+ if (backgroundColor.lightness() < 0.5) |
+ caretColor = Color::white; |
+ } else |
+ caretColor = Color::black; |
+ |
colorSpace = element->renderer()->style()->colorSpace(); |
} |