void OpaqueRegionSkia::didDrawPoints(const GraphicsContext* context, SkCanvas::PointMode mode, int numPoints, const SkPoint points[], const SkPaint& paint) { if (!numPoints) return; SkRect rect; rect.fLeft = points[0].fX; rect.fRight = points[0].fX + 1; rect.fTop = points[0].fY; rect.fBottom = points[0].fY + 1; for (int i = 1; i < numPoints; ++i) { rect.fLeft = std::min(rect.fLeft, points[i].fX); rect.fRight = std::max(rect.fRight, points[i].fX + 1); rect.fTop = std::min(rect.fTop, points[i].fY); rect.fBottom = std::max(rect.fBottom, points[i].fY + 1); } bool fillsBounds = false; if (!paint.canComputeFastBounds()) didDrawUnbounded(context, paint, FillOrStroke); else { rect = paint.computeFastBounds(rect, &rect); didDraw(context, rect, paint, 0, fillsBounds, FillOrStroke); } }
void OpaqueRegionSkia::didDrawPoints(const PlatformContextSkia* context, const AffineTransform& transform, SkCanvas::PointMode mode, int numPoints, const SkPoint points[], const SkPaint& paint) { if (!numPoints) return; SkRect rect; rect.fLeft = points[0].fX; rect.fRight = points[0].fX + 1; rect.fTop = points[0].fY; rect.fBottom = points[0].fY + 1; for (int i = 1; i < numPoints; ++i) { rect.fLeft = std::min(rect.fLeft, points[i].fX); rect.fRight = std::max(rect.fRight, points[i].fX + 1); rect.fTop = std::min(rect.fTop, points[i].fY); rect.fBottom = std::max(rect.fBottom, points[i].fY + 1); } bool opaque = paintIsOpaque(paint); bool fillsBounds = false; if (!paint.canComputeFastBounds()) didDrawUnbounded(paint, opaque); else { rect = paint.computeFastBounds(rect, &rect); didDraw(context, transform, rect, paint, opaque, fillsBounds); } }
void OpaqueRegionSkia::didDrawBounded(const PlatformContextSkia* context, const SkRect& bounds, const SkPaint& paint) { bool fillsBounds = false; if (!paint.canComputeFastBounds()) didDrawUnbounded(paint); else { SkRect rect; rect = paint.computeFastBounds(bounds, &rect); didDraw(context, rect, paint, 0, fillsBounds, FillOrStroke); } }
void OpaqueRegionSkia::didDrawBounded(const PlatformContextSkia* context, const AffineTransform& transform, const SkRect& bounds, const SkPaint& paint) { bool opaque = paintIsOpaque(paint); bool fillsBounds = false; if (!paint.canComputeFastBounds()) didDrawUnbounded(paint, opaque); else { SkRect rect; rect = paint.computeFastBounds(bounds, &rect); didDraw(context, transform, rect, paint, opaque, fillsBounds); } }
void OpaqueRegionSkia::didDrawPath(const PlatformContextSkia* context, const SkPath& path, const SkPaint& paint) { SkRect rect; if (path.isRect(&rect)) { didDrawRect(context, rect, paint, 0); return; } bool fillsBounds = false; if (!paint.canComputeFastBounds()) didDrawUnbounded(paint); else { rect = paint.computeFastBounds(path.getBounds(), &rect); didDraw(context, rect, paint, 0, fillsBounds, FillOrStroke); } }
void OpaqueRegionSkia::didDrawPath(const PlatformContextSkia* context, const AffineTransform& transform, const SkPath& path, const SkPaint& paint) { SkRect rect; if (path.isRect(&rect)) { didDrawRect(context, transform, rect, paint, 0); return; } bool opaque = paintIsOpaque(paint); bool fillsBounds = false; if (!paint.canComputeFastBounds()) didDrawUnbounded(paint, opaque); else { rect = paint.computeFastBounds(path.getBounds(), &rect); didDraw(context, transform, rect, paint, opaque, fillsBounds); } }
void OpaqueRegionSkia::didDrawRect(const PlatformContextSkia* context, const SkRect& fillRect, const SkPaint& paint, const SkBitmap* sourceBitmap) { // Any stroking may put alpha in pixels even if the filling part does not. if (paint.getStyle() != SkPaint::kFill_Style) { bool fillsBounds = false; if (!paint.canComputeFastBounds()) didDrawUnbounded(paint); else { SkRect strokeRect; strokeRect = paint.computeFastBounds(fillRect, &strokeRect); didDraw(context, strokeRect, paint, sourceBitmap, fillsBounds, FillOrStroke); } } bool fillsBounds = paint.getStyle() != SkPaint::kStroke_Style; didDraw(context, fillRect, paint, sourceBitmap, fillsBounds, FillOnly); }
void OpaqueRegionSkia::didDrawRect(const PlatformContextSkia* context, const AffineTransform& transform, const SkRect& fillRect, const SkPaint& paint, const SkBitmap* bitmap) { // Any stroking may put alpha in pixels even if the filling part does not. if (paint.getStyle() != SkPaint::kFill_Style) { bool opaque = paintIsOpaque(paint, bitmap); bool fillsBounds = false; if (!paint.canComputeFastBounds()) didDrawUnbounded(paint, opaque); else { SkRect strokeRect; strokeRect = paint.computeFastBounds(fillRect, &strokeRect); didDraw(context, transform, strokeRect, paint, opaque, fillsBounds); } } bool checkFillOnly = true; bool opaque = paintIsOpaque(paint, bitmap, checkFillOnly); bool fillsBounds = paint.getStyle() != SkPaint::kStroke_Style; didDraw(context, transform, fillRect, paint, opaque, fillsBounds); }