void GraphicsContext::drawConvexPolygon(size_t numPoints, const FloatPoint* points, bool shouldAntialias) { if (paintingDisabled()) return; if (numPoints <= 1) return; SkPath path; path.incReserve(numPoints); path.moveTo(WebCoreFloatToSkScalar(points[0].x()), WebCoreFloatToSkScalar(points[0].y())); for (size_t i = 1; i < numPoints; i++) { path.lineTo(WebCoreFloatToSkScalar(points[i].x()), WebCoreFloatToSkScalar(points[i].y())); } if (!isPathSkiaSafe(getCTM(), path)) return; SkPaint paint; platformContext()->setupPaintForFilling(&paint); platformContext()->canvas()->drawPath(path, paint); if (strokeStyle() != NoStroke) { paint.reset(); platformContext()->setupPaintForStroking(&paint, 0, 0); platformContext()->canvas()->drawPath(path, paint); } }
void GraphicsContext::strokeArc(const IntRect& r, int startAngle, int angleSpan) { if (paintingDisabled()) return; SkPaint paint; SkRect oval = r; if (strokeStyle() == NoStroke) { // Stroke using the fill color. // TODO(brettw) is this really correct? It seems unreasonable. platformContext()->setupPaintForFilling(&paint); paint.setStyle(SkPaint::kStroke_Style); paint.setStrokeWidth(WebCoreFloatToSkScalar(strokeThickness())); } else platformContext()->setupPaintForStroking(&paint, 0, 0); // We do this before converting to scalar, so we don't overflow SkFixed. startAngle = fastMod(startAngle, 360); angleSpan = fastMod(angleSpan, 360); SkPath path; path.addArc(oval, SkIntToScalar(-startAngle), SkIntToScalar(-angleSpan)); if (!isPathSkiaSafe(getCTM(), path)) return; platformContext()->canvas()->drawPath(path, paint); }
void GraphicsContext::clipOut(const Path& p) { if (paintingDisabled()) return; const SkPath& path = *p.platformPath(); if (!isPathSkiaSafe(getCTM(), path)) return; platformContext()->canvas()->clipPath(path, SkRegion::kDifference_Op); }
void GraphicsContext::canvasClip(const Path& path) { if (paintingDisabled()) return; const SkPath& p = *path.platformPath(); if (!isPathSkiaSafe(getCTM(), p)) return; platformContext()->canvas()->clipPath(p); }
void GraphicsContext::clipPath(WindRule clipRule) { if (paintingDisabled()) return; SkPath path = platformContext()->currentPathInLocalCoordinates(); if (!isPathSkiaSafe(getCTM(), path)) return; path.setFillType(clipRule == RULE_EVENODD ? SkPath::kEvenOdd_FillType : SkPath::kWinding_FillType); platformContext()->clipPathAntiAliased(path); }
void GraphicsContext::clip(const Path& path) { if (paintingDisabled()) return; const SkPath& p = *path.platformPath(); if (!isPathSkiaSafe(getCTM(), p)) return; platformContext()->prepareForSoftwareDraw(); platformContext()->clipPathAntiAliased(p); }
void GraphicsContext::strokePath() { if (paintingDisabled()) return; SkPath path = platformContext()->currentPathInLocalCoordinates(); if (!isPathSkiaSafe(getCTM(), path)) return; SkPaint paint; platformContext()->setupPaintForStroking(&paint, 0, 0); platformContext()->canvas()->drawPath(path, paint); }
void GraphicsContext::strokePath() { if (paintingDisabled()) return; SkPath path = platformContext()->currentPathInLocalCoordinates(); if (!isPathSkiaSafe(getCTM(), path)) return; const GraphicsContextState& state = m_common->state; ColorSpace colorSpace = state.strokeColorSpace; SkPaint paint; platformContext()->setupPaintForStroking(&paint, 0, 0); platformContext()->canvas()->drawPath(path, paint); }
void GraphicsContext::fillPath() { if (paintingDisabled()) return; SkPath path = platformContext()->currentPathInLocalCoordinates(); if (!isPathSkiaSafe(getCTM(), path)) return; const GraphicsContextState& state = m_common->state; path.setFillType(state.fillRule == RULE_EVENODD ? SkPath::kEvenOdd_FillType : SkPath::kWinding_FillType); SkPaint paint; platformContext()->setupPaintForFilling(&paint); platformContext()->canvas()->drawPath(path, paint); }