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); } }
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); } }