TextPaintStyle computeTextSelectionPaintStyle(const TextPaintStyle& textPaintStyle, const RenderText& renderer, const RenderStyle& lineStyle, const PaintInfo& paintInfo, bool& paintSelectedTextOnly, bool& paintSelectedTextSeparately, const ShadowData*& selectionShadow) { paintSelectedTextOnly = (paintInfo.phase == PaintPhaseSelection); paintSelectedTextSeparately = false; const ShadowData* textShadow = paintInfo.forceBlackText() ? 0 : lineStyle.textShadow(); TextPaintStyle selectionPaintStyle = textPaintStyle; selectionShadow = textShadow; Color foreground = paintInfo.forceBlackText() ? Color::black : renderer.selectionForegroundColor(); if (foreground.isValid() && foreground != selectionPaintStyle.fillColor) { if (!paintSelectedTextOnly) paintSelectedTextSeparately = true; selectionPaintStyle.fillColor = foreground; } Color emphasisMarkForeground = paintInfo.forceBlackText() ? Color::black : renderer.selectionEmphasisMarkColor(); if (emphasisMarkForeground.isValid() && emphasisMarkForeground != selectionPaintStyle.emphasisMarkColor) { if (!paintSelectedTextOnly) paintSelectedTextSeparately = true; selectionPaintStyle.emphasisMarkColor = emphasisMarkForeground; } if (RenderStyle* pseudoStyle = renderer.getCachedPseudoStyle(SELECTION)) { const ShadowData* shadow = paintInfo.forceBlackText() ? 0 : pseudoStyle->textShadow(); if (shadow != selectionShadow) { if (!paintSelectedTextOnly) paintSelectedTextSeparately = true; selectionShadow = shadow; } float strokeWidth = pseudoStyle->textStrokeWidth(); if (strokeWidth != selectionPaintStyle.strokeWidth) { if (!paintSelectedTextOnly) paintSelectedTextSeparately = true; selectionPaintStyle.strokeWidth = strokeWidth; } Color stroke = paintInfo.forceBlackText() ? Color::black : pseudoStyle->visitedDependentColor(CSSPropertyWebkitTextStrokeColor); if (stroke != selectionPaintStyle.strokeColor) { if (!paintSelectedTextOnly) paintSelectedTextSeparately = true; selectionPaintStyle.strokeColor = stroke; } } return selectionPaintStyle; }