Exemplo n.º 1
0
static void prepareCairoContextSource(cairo_t* cr, Pattern* pattern, Gradient* gradient, const Color& color, float globalAlpha)
{
    if (pattern) {
        RefPtr<cairo_pattern_t> cairoPattern(adoptRef(pattern->createPlatformPattern(AffineTransform())));
        cairo_set_source(cr, cairoPattern.get());
        reduceSourceByAlpha(cr, globalAlpha);
    } else if (gradient) {
        cairo_set_source(cr, gradient->platformGradient());

        // FIXME: It would be faster to simply recreate the Cairo gradient and multiply the
        // color stops by the global alpha.
        reduceSourceByAlpha(cr, globalAlpha);
    } else { // Solid color source.
        if (globalAlpha < 1)
            setSourceRGBAFromColor(cr, colorWithOverrideAlpha(color.rgb(), color.alpha() / 255.f * globalAlpha));
        else
            setSourceRGBAFromColor(cr, color);
    }
}
static void prepareCairoContextSource(cairo_t* cr, Pattern* pattern, Gradient* gradient, const Color& color, float globalAlpha)
{
    if (pattern) {
        RefPtr<cairo_pattern_t> cairoPattern(adoptRef(pattern->createPlatformPattern(AffineTransform())));
        cairo_set_source(cr, cairoPattern.get());
        reduceSourceByAlpha(cr, globalAlpha);
    } else if (gradient)
        cairo_set_source(cr, gradient->platformGradient(globalAlpha));
    else { // Solid color source.
        if (globalAlpha < 1)
            setSourceRGBAFromColor(cr, colorWithOverrideAlpha(color.rgb(), color.alpha() / 255.f * globalAlpha));
        else
            setSourceRGBAFromColor(cr, color);
    }
}