diff options
Diffstat (limited to 'src/core/SkRecordDraw.cpp')
-rw-r--r-- | src/core/SkRecordDraw.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp index 0117adeefa..f7f02997df 100644 --- a/src/core/SkRecordDraw.cpp +++ b/src/core/SkRecordDraw.cpp @@ -35,15 +35,29 @@ void SkRecordDraw(const SkRecord& record, } } else { // Draw all ops. - for (SkRecords::Draw draw(canvas); draw.index() < record.count(); draw.next()) { + SkRecords::Draw draw(canvas); + for (unsigned i = 0; i < record.count(); i++) { if (NULL != callback && callback->abortDrawing()) { return; } - record.visit<void>(draw.index(), draw); + record.visit<void>(i, draw); } } } +void SkRecordPartialDraw(const SkRecord& record, + SkCanvas* canvas, + const SkRect& clearRect, + unsigned start, unsigned stop) { + SkAutoCanvasRestore saveRestore(canvas, true /*save now, restore at exit*/); + + stop = SkTMin(stop, record.count()); + SkRecords::PartialDraw draw(canvas, clearRect); + for (unsigned i = start; i < stop; i++) { + record.visit<void>(i, draw); + } +} + namespace SkRecords { // FIXME: SkBitmaps are stateful, so we need to copy them to play back in multiple threads. |