1/* 2 * Copyright (C) 2010 Igalia S.L. 3 * Copyright (C) 2011 ProFUSION embedded systems 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#ifndef CairoUtilities_h 28#define CairoUtilities_h 29 30#include "GraphicsTypes.h" 31#include "IntSize.h" 32#include <cairo.h> 33 34// This function was added pretty much simultaneous to when 1.13 was branched. 35#define HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE CAIRO_VERSION_MAJOR > 1 || (CAIRO_VERSION_MAJOR == 1 && CAIRO_VERSION_MINOR >= 13) 36 37namespace WebCore { 38class AffineTransform; 39class Color; 40class FloatRect; 41class FloatPoint; 42class IntSize; 43class IntRect; 44class Path; 45 46void copyContextProperties(cairo_t* srcCr, cairo_t* dstCr); 47void setSourceRGBAFromColor(cairo_t*, const Color&); 48void appendPathToCairoContext(cairo_t* to, cairo_t* from); 49void setPathOnCairoContext(cairo_t* to, cairo_t* from); 50void appendWebCorePathToCairoContext(cairo_t* context, const Path& path); 51void appendRegionToCairoContext(cairo_t*, const cairo_region_t*); 52cairo_operator_t toCairoOperator(CompositeOperator op); 53cairo_operator_t toCairoOperator(BlendMode blendOp); 54void drawPatternToCairoContext(cairo_t* cr, cairo_surface_t* image, const IntSize& imageSize, const FloatRect& tileRect, 55 const AffineTransform& patternTransform, const FloatPoint& phase, cairo_operator_t op, const FloatRect& destRect); 56PassRefPtr<cairo_surface_t> copyCairoImageSurface(cairo_surface_t*); 57 58void copyRectFromCairoSurfaceToContext(cairo_surface_t* from, cairo_t* to, const IntSize& offset, const IntRect&); 59void copyRectFromOneSurfaceToAnother(cairo_surface_t* from, cairo_surface_t* to, const IntSize& offset, const IntRect&, const IntSize& = IntSize(), cairo_operator_t = CAIRO_OPERATOR_OVER); 60 61IntSize cairoSurfaceSize(cairo_surface_t*); 62void flipImageSurfaceVertically(cairo_surface_t*); 63void cairoSurfaceSetDeviceScale(cairo_surface_t*, double xScale, double yScale); 64 65} // namespace WebCore 66 67#endif // CairoUtilities_h 68