TextDecorationPainter::TextDecorationPainter(GraphicsContext& context, TextDecoration decoration, const RenderText& renderer, bool isFirstLine) : m_context(context) , m_decoration(decoration) , m_wavyOffset(wavyOffsetFromDecoration()) , m_isPrinting(renderer.document().printing()) , m_styles(stylesForRenderer(renderer, m_decoration, isFirstLine)) , m_lineStyle(isFirstLine ? renderer.firstLineStyle() : renderer.style()) { }
TextPaintStyle computeTextPaintStyle(const RenderText& renderer, const RenderStyle& lineStyle, const PaintInfo& paintInfo) { TextPaintStyle paintStyle(lineStyle.colorSpace()); paintStyle.strokeWidth = lineStyle.textStrokeWidth(); if (paintInfo.forceBlackText()) { paintStyle.fillColor = Color::black; paintStyle.strokeColor = Color::black; paintStyle.emphasisMarkColor = Color::black; return paintStyle; } paintStyle.fillColor = lineStyle.visitedDependentColor(CSSPropertyWebkitTextFillColor); bool forceBackgroundToWhite = false; if (renderer.document().printing()) { if (lineStyle.printColorAdjust() == PrintColorAdjustEconomy) forceBackgroundToWhite = true; if (renderer.frame().settings().shouldPrintBackgrounds()) forceBackgroundToWhite = false; } // Make the text fill color legible against a white background if (forceBackgroundToWhite) paintStyle.fillColor = adjustColorForVisibilityOnBackground(paintStyle.fillColor, Color::white); paintStyle.strokeColor = lineStyle.visitedDependentColor(CSSPropertyWebkitTextStrokeColor); // Make the text stroke color legible against a white background if (forceBackgroundToWhite) paintStyle.strokeColor = adjustColorForVisibilityOnBackground(paintStyle.strokeColor, Color::white); paintStyle.emphasisMarkColor = lineStyle.visitedDependentColor(CSSPropertyWebkitTextEmphasisColor); // Make the text stroke color legible against a white background if (forceBackgroundToWhite) paintStyle.emphasisMarkColor = adjustColorForVisibilityOnBackground(paintStyle.emphasisMarkColor, Color::white); return paintStyle; }