void EmbeddedObjectPainter::paintReplaced(const PaintInfo& paintInfo, const LayoutPoint& paintOffset) { if (!m_layoutEmbeddedObject.showsUnavailablePluginIndicator()) return; if (paintInfo.phase == PaintPhaseSelection) return; GraphicsContext& context = paintInfo.context; if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible( context, m_layoutEmbeddedObject, paintInfo.phase)) return; LayoutRect contentRect(m_layoutEmbeddedObject.contentBoxRect()); contentRect.moveBy(paintOffset); LayoutObjectDrawingRecorder drawingRecorder(context, m_layoutEmbeddedObject, paintInfo.phase, contentRect); GraphicsContextStateSaver stateSaver(context); context.clip(pixelSnappedIntRect(contentRect)); Font font = replacementTextFont(); const SimpleFontData* fontData = font.primaryFont(); DCHECK(fontData); if (!fontData) return; TextRun textRun(m_layoutEmbeddedObject.unavailablePluginReplacementText()); FloatSize textGeometry(font.width(textRun), fontData->getFontMetrics().height()); LayoutRect backgroundRect( 0, 0, textGeometry.width() + 2 * replacementTextRoundedRectLeftRightTextMargin, replacementTextRoundedRectHeight); backgroundRect.move(contentRect.center() - backgroundRect.center()); backgroundRect = LayoutRect(pixelSnappedIntRect(backgroundRect)); Path roundedBackgroundRect; FloatRect floatBackgroundRect(backgroundRect); roundedBackgroundRect.addRoundedRect( floatBackgroundRect, FloatSize(replacementTextRoundedRectRadius, replacementTextRoundedRectRadius)); context.setFillColor( scaleAlpha(Color::white, replacementTextRoundedRectOpacity)); context.fillPath(roundedBackgroundRect); FloatRect textRect(FloatPoint(), textGeometry); textRect.move(FloatPoint(contentRect.center()) - textRect.center()); TextRunPaintInfo runInfo(textRun); runInfo.bounds = floatBackgroundRect; context.setFillColor(scaleAlpha(Color::black, replacementTextTextOpacity)); context.drawBidiText( font, runInfo, textRect.location() + FloatSize(0, fontData->getFontMetrics().ascent())); }
void CanvasRenderingContext2DState::updateFillStyle() const { if (!m_fillStyleDirty) return; int clampedAlpha = clampedAlphaForBlending(m_globalAlpha); ASSERT(m_fillStyle); m_fillStyle->applyToPaint(m_fillPaint); m_fillPaint.setColor(scaleAlpha(m_fillStyle->paintColor(), clampedAlpha)); m_fillStyleDirty = false; }
void SVGPaintServer::applyToSkPaint(SkPaint& paint, float paintAlpha) { SkColor baseColor = m_gradient || m_pattern ? SK_ColorBLACK : m_color.rgb(); paint.setColor(scaleAlpha(baseColor, paintAlpha)); if (m_pattern) paint.setShader(m_pattern->shader()); else if (m_gradient) paint.setShader(m_gradient->shader()); else paint.setShader(nullptr); }
void CanvasRenderingContext2DState::updateStrokeStyle() const { if (!m_strokeStyleDirty) return; int clampedAlpha = clampedAlphaForBlending(m_globalAlpha); ASSERT(m_strokeStyle); m_strokePaint.setShader(m_strokeStyle->shader()); m_strokePaint.setColor(scaleAlpha(m_strokeStyle->paintColor(), clampedAlpha)); m_strokeStyleDirty = false; }
SkColor scaleAlpha(SkColor color, float alpha) { return scaleAlpha(color, clampedAlphaForBlending(alpha)); }