Ejemplo n.º 1
0
void Font::drawGlyphs(GraphicsContext* graphicsContext,
                      const SimpleFontData* font,
                      const GlyphBuffer& glyphBuffer,
                      int from,
                      int numGlyphs,
                      const FloatPoint& point) const
{
    SkColor color = graphicsContext->platformContext()->effectiveFillColor();
    unsigned char alpha = SkColorGetA(color);
    // Skip 100% transparent text; no need to draw anything.
    if (!alpha && graphicsContext->platformContext()->getStrokeStyle() == NoStroke && !graphicsContext->hasShadow())
        return;
    if (!alpha || windowsCanHandleDrawTextShadow(graphicsContext) || !windowsCanHandleTextDrawingWithoutShadow(graphicsContext)) {
        drawGlyphsWin(graphicsContext, font, glyphBuffer, from, numGlyphs, point);
        return;
    }
    // Draw in two passes: skia for the shadow, GDI for foreground text
    // pass1: shadow (will use skia)
    graphicsContext->save();
    graphicsContext->setFillColor(Color::transparent, graphicsContext->fillColorSpace());
    drawGlyphsWin(graphicsContext, font, glyphBuffer, from, numGlyphs, point);
    graphicsContext->restore();
    // pass2: foreground text (will use GDI)
    FloatSize shadowOffset;
    float shadowBlur;
    Color shadowColor;
    ColorSpace shadowColorSpace;
    graphicsContext->getShadow(shadowOffset, shadowBlur, shadowColor, shadowColorSpace);
    graphicsContext->setShadow(shadowOffset, shadowBlur, Color::transparent, shadowColorSpace);
    drawGlyphsWin(graphicsContext, font, glyphBuffer, from, numGlyphs, point);
    graphicsContext->setShadow(shadowOffset, shadowBlur, shadowColor, shadowColorSpace);
}
Ejemplo n.º 2
0
bool windowsCanHandleTextDrawing(GraphicsContext* context)
{
    if (!windowsCanHandleTextDrawingWithoutShadow(context))
        return false;

    // Check for shadow effects.
    if (!windowsCanHandleDrawTextShadow(context))
        return false;

    return true;
}