SVGResourceClipperCairo.cpp [plain text]
#include "config.h"
#if ENABLE(SVG)
#include "SVGResourceClipper.h"
#include "AffineTransform.h"
#include "GraphicsContext.h"
#include <cairo.h>
namespace WebCore {
void SVGResourceClipper::applyClip(GraphicsContext* context, const FloatRect& boundingBox) const
{
Vector<ClipData> data = m_clipData.clipData();
unsigned int count = data.size();
if (!count)
return;
cairo_t* cr = context->platformContext();
cairo_reset_clip(cr);
for (unsigned int x = 0; x < count; x++) {
Path path = data[x].path;
if (path.isEmpty())
continue;
path.closeSubpath();
if (data[x].bboxUnits) {
AffineTransform transform;
transform.translate(boundingBox.x(), boundingBox.y());
transform.scale(boundingBox.width(), boundingBox.height());
path.transform(transform);
}
cairo_set_fill_rule(cr, data[x].windRule == RULE_EVENODD ? CAIRO_FILL_RULE_EVEN_ODD : CAIRO_FILL_RULE_WINDING);
context->clip(path);
}
}
}
#endif