void SkDeferredCanvas::flushIfNeeded(const SkBitmap& bitmap) { validate(); if (fDeferredDrawing) { getDeferredDevice()->flushIfNeeded(bitmap); } }
void SkDeferredCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { if (fDeferredDrawing && isFullFrame(&rect, &paint) && isPaintOpaque(&paint)) { getDeferredDevice()->contentsCleared(); } drawingCanvas()->drawRect(rect, paint); }
void SkDeferredCanvas::clear(SkColor color) { // purge pending commands if (fDeferredDrawing) { getDeferredDevice()->contentsCleared(); } drawingCanvas()->clear(color); }
void SkDeferredCanvas::drawPaint(const SkPaint& paint) { if (fDeferredDrawing && isFullFrame(NULL, &paint) && isPaintOpaque(paint)) { getDeferredDevice()->purgePending(); } drawingCanvas()->drawPaint(paint); }
SkDeferredCanvas::DeviceContext* SkDeferredCanvas::setDeviceContext( DeviceContext* deviceContext) { DeferredDevice* deferredDevice = getDeferredDevice(); SkASSERT(deferredDevice); if (deferredDevice) { deferredDevice->setDeviceContext(deviceContext); } return deviceContext; }
void SkDeferredCanvas::setDeferredDrawing(bool val) { validate(); // Must set device before calling this method SkASSERT(drawingCanvas()->getSaveCount() == 1); if (val != fDeferredDrawing) { if (fDeferredDrawing) { // Going live. getDeferredDevice()->flushPending(); } fDeferredDrawing = val; } }
void SkDeferredCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint) { SkRect bitmapRect = SkRect::MakeXYWH(left, top, SkIntToScalar(bitmap.width()), SkIntToScalar(bitmap.height())); if (fDeferredDrawing && isFullFrame(&bitmapRect, paint) && isPaintOpaque(paint, &bitmap)) { getDeferredDevice()->contentsCleared(); } drawingCanvas()->drawBitmap(bitmap, left, top, paint); flushIfNeeded(bitmap); }
void SkDeferredCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src, const SkRect& dst, const SkPaint* paint) { if (fDeferredDrawing && isFullFrame(&dst, paint) && isPaintOpaque(paint, &bitmap)) { getDeferredDevice()->contentsCleared(); } drawingCanvas()->drawBitmapRect(bitmap, src, dst, paint); flushIfNeeded(bitmap); }
void SkDeferredCanvas::drawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint) { SkRect bitmapRect = SkRect::MakeXYWH(left, top, bitmap.width(), bitmap.height()); if (fDeferredDrawing && isFullFrame(&bitmapRect, paint) && isPaintOpaque(*paint, &bitmap)) { getDeferredDevice()->purgePending(); } drawingCanvas()->drawSprite(bitmap, left, top, paint); flushIfNeeded(bitmap); }
SkCanvas* SkDeferredCanvas::drawingCanvas() const { validate(); return fDeferredDrawing ? getDeferredDevice()->recordingCanvas() : getDeferredDevice()->immediateCanvas(); }