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::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); }
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 ImageBufferSurface::clear() { // Clear the background transparent or opaque, as required. It would be nice // if this wasn't required, but the canvas is currently filled with the magic // transparency color. Can we have another way to manage this? if (isValid()) { if (m_opacityMode == Opaque) { canvas()->clear(SK_ColorBLACK); } else { canvas()->clear(SK_ColorTRANSPARENT); } didDraw(FloatRect(FloatPoint(0, 0), FloatSize(size()))); } }
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 CanvasRenderingContext2D::drawFocusRing(const Path& path) { m_usageCounters.numDrawFocusCalls++; if (!drawingCanvas()) return; SkColor color = LayoutTheme::theme().focusRingColor().rgb(); const int focusRingWidth = 5; drawPlatformFocusRing(path.getSkPath(), drawingCanvas(), color, focusRingWidth); // We need to add focusRingWidth to dirtyRect. StrokeData strokeData; strokeData.setThickness(focusRingWidth); SkIRect dirtyRect; if (!computeDirtyRect(path.strokeBoundingRect(strokeData), &dirtyRect)) return; didDraw(dirtyRect); }