| OLD | NEW | 
|     1  |     1  | 
|     2 /* |     2 /* | 
|     3  * Copyright 2013 Google Inc. |     3  * Copyright 2013 Google Inc. | 
|     4  * |     4  * | 
|     5  * Use of this source code is governed by a BSD-style license that can be |     5  * Use of this source code is governed by a BSD-style license that can be | 
|     6  * found in the LICENSE file. |     6  * found in the LICENSE file. | 
|     7  */ |     7  */ | 
|     8  |     8  | 
|     9 #include "SkDeferredCanvas.h" |     9 #include "SkDeferredCanvas.h" | 
|    10  |    10  | 
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   784     this->recordedDrawCommand(); |   784     this->recordedDrawCommand(); | 
|   785 } |   785 } | 
|   786  |   786  | 
|   787 void SkDeferredCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) 
      { |   787 void SkDeferredCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) 
      { | 
|   788     this->drawingCanvas()->clipRegion(deviceRgn, op); |   788     this->drawingCanvas()->clipRegion(deviceRgn, op); | 
|   789     this->INHERITED::onClipRegion(deviceRgn, op); |   789     this->INHERITED::onClipRegion(deviceRgn, op); | 
|   790     this->recordedDrawCommand(); |   790     this->recordedDrawCommand(); | 
|   791 } |   791 } | 
|   792  |   792  | 
|   793 void SkDeferredCanvas::onDrawPaint(const SkPaint& paint) { |   793 void SkDeferredCanvas::onDrawPaint(const SkPaint& paint) { | 
|   794     if (fDeferredDrawing && this->isFullFrame(NULL, &paint) && |   794     if (fDeferredDrawing && this->isFullFrame(NULL, &paint) && SkPaintPriv::Over
      writes(paint)) { | 
|   795         isPaintOpaque(&paint)) { |  | 
|   796         this->getDeferredDevice()->skipPendingCommands(); |   795         this->getDeferredDevice()->skipPendingCommands(); | 
|   797     } |   796     } | 
|   798     AutoImmediateDrawIfNeeded autoDraw(*this, &paint); |   797     AutoImmediateDrawIfNeeded autoDraw(*this, &paint); | 
|   799     this->drawingCanvas()->drawPaint(paint); |   798     this->drawingCanvas()->drawPaint(paint); | 
|   800     this->recordedDrawCommand(); |   799     this->recordedDrawCommand(); | 
|   801 } |   800 } | 
|   802  |   801  | 
|   803 void SkDeferredCanvas::onDrawPoints(PointMode mode, size_t count, |   802 void SkDeferredCanvas::onDrawPoints(PointMode mode, size_t count, | 
|   804                                     const SkPoint pts[], const SkPaint& paint) { |   803                                     const SkPoint pts[], const SkPaint& paint) { | 
|   805     AutoImmediateDrawIfNeeded autoDraw(*this, &paint); |   804     AutoImmediateDrawIfNeeded autoDraw(*this, &paint); | 
|   806     this->drawingCanvas()->drawPoints(mode, count, pts, paint); |   805     this->drawingCanvas()->drawPoints(mode, count, pts, paint); | 
|   807     this->recordedDrawCommand(); |   806     this->recordedDrawCommand(); | 
|   808 } |   807 } | 
|   809  |   808  | 
|   810 void SkDeferredCanvas::onDrawOval(const SkRect& rect, const SkPaint& paint) { |   809 void SkDeferredCanvas::onDrawOval(const SkRect& rect, const SkPaint& paint) { | 
|   811     AutoImmediateDrawIfNeeded autoDraw(*this, &paint); |   810     AutoImmediateDrawIfNeeded autoDraw(*this, &paint); | 
|   812     this->drawingCanvas()->drawOval(rect, paint); |   811     this->drawingCanvas()->drawOval(rect, paint); | 
|   813     this->recordedDrawCommand(); |   812     this->recordedDrawCommand(); | 
|   814 } |   813 } | 
|   815  |   814  | 
|   816 void SkDeferredCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) { |   815 void SkDeferredCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) { | 
|   817     if (fDeferredDrawing && this->isFullFrame(&rect, &paint) && |   816     if (fDeferredDrawing && this->isFullFrame(&rect, &paint) && SkPaintPriv::Ove
      rwrites(paint)) { | 
|   818         isPaintOpaque(&paint)) { |  | 
|   819         this->getDeferredDevice()->skipPendingCommands(); |   817         this->getDeferredDevice()->skipPendingCommands(); | 
|   820     } |   818     } | 
|   821  |   819  | 
|   822     AutoImmediateDrawIfNeeded autoDraw(*this, &paint); |   820     AutoImmediateDrawIfNeeded autoDraw(*this, &paint); | 
|   823     this->drawingCanvas()->drawRect(rect, paint); |   821     this->drawingCanvas()->drawRect(rect, paint); | 
|   824     this->recordedDrawCommand(); |   822     this->recordedDrawCommand(); | 
|   825 } |   823 } | 
|   826  |   824  | 
|   827 void SkDeferredCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) { |   825 void SkDeferredCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) { | 
|   828     if (rrect.isRect()) { |   826     if (rrect.isRect()) { | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
|   848     this->drawingCanvas()->drawPath(path, paint); |   846     this->drawingCanvas()->drawPath(path, paint); | 
|   849     this->recordedDrawCommand(); |   847     this->recordedDrawCommand(); | 
|   850 } |   848 } | 
|   851  |   849  | 
|   852 void SkDeferredCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar left, |   850 void SkDeferredCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar left, | 
|   853                                     SkScalar top, const SkPaint* paint) { |   851                                     SkScalar top, const SkPaint* paint) { | 
|   854     SkRect bitmapRect = SkRect::MakeXYWH(left, top, |   852     SkRect bitmapRect = SkRect::MakeXYWH(left, top, | 
|   855         SkIntToScalar(bitmap.width()), SkIntToScalar(bitmap.height())); |   853         SkIntToScalar(bitmap.width()), SkIntToScalar(bitmap.height())); | 
|   856     if (fDeferredDrawing && |   854     if (fDeferredDrawing && | 
|   857         this->isFullFrame(&bitmapRect, paint) && |   855         this->isFullFrame(&bitmapRect, paint) && | 
|   858         isPaintOpaque(paint, &bitmap)) { |   856         SkPaintPriv::Overwrites(bitmap, paint)) { | 
|   859         this->getDeferredDevice()->skipPendingCommands(); |   857         this->getDeferredDevice()->skipPendingCommands(); | 
|   860     } |   858     } | 
|   861  |   859  | 
|   862     AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint); |   860     AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint); | 
|   863     this->drawingCanvas()->drawBitmap(bitmap, left, top, paint); |   861     this->drawingCanvas()->drawBitmap(bitmap, left, top, paint); | 
|   864     this->recordedDrawCommand(); |   862     this->recordedDrawCommand(); | 
|   865 } |   863 } | 
|   866  |   864  | 
|   867 void SkDeferredCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* sr
      c, |   865 void SkDeferredCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* sr
      c, | 
|   868                                         const SkRect& dst, const SkPaint* paint, |   866                                         const SkRect& dst, const SkPaint* paint, | 
|   869                                         SK_VIRTUAL_CONSTRAINT_TYPE constraint) { |   867                                         SK_VIRTUAL_CONSTRAINT_TYPE constraint) { | 
|   870     if (fDeferredDrawing && |   868     if (fDeferredDrawing && | 
|   871         this->isFullFrame(&dst, paint) && |   869         this->isFullFrame(&dst, paint) && | 
|   872         isPaintOpaque(paint, &bitmap)) { |   870         SkPaintPriv::Overwrites(bitmap, paint)) { | 
|   873         this->getDeferredDevice()->skipPendingCommands(); |   871         this->getDeferredDevice()->skipPendingCommands(); | 
|   874     } |   872     } | 
|   875  |   873  | 
|   876     AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint); |   874     AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint); | 
|   877     this->drawingCanvas()->drawBitmapRect(bitmap, src, dst, paint, (SrcRectConst
      raint)constraint); |   875     this->drawingCanvas()->drawBitmapRect(bitmap, src, dst, paint, (SrcRectConst
      raint)constraint); | 
|   878     this->recordedDrawCommand(); |   876     this->recordedDrawCommand(); | 
|   879 } |   877 } | 
|   880  |   878  | 
|   881  |   879  | 
|   882 void SkDeferredCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, |   880 void SkDeferredCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, | 
|   883                                    const SkPaint* paint) { |   881                                    const SkPaint* paint) { | 
|   884     SkRect bounds = SkRect::MakeXYWH(x, y, |   882     SkRect bounds = SkRect::MakeXYWH(x, y, | 
|   885                                      SkIntToScalar(image->width()), SkIntToScala
      r(image->height())); |   883                                      SkIntToScalar(image->width()), SkIntToScala
      r(image->height())); | 
|   886     if (fDeferredDrawing && |   884     if (fDeferredDrawing && | 
|   887         this->isFullFrame(&bounds, paint) && |   885         this->isFullFrame(&bounds, paint) && | 
|   888         isPaintOpaque(paint, image)) { |   886         SkPaintPriv::Overwrites(image, paint)) { | 
|   889         this->getDeferredDevice()->skipPendingCommands(); |   887         this->getDeferredDevice()->skipPendingCommands(); | 
|   890     } |   888     } | 
|   891      |   889      | 
|   892     AutoImmediateDrawIfNeeded autoDraw(*this, image, paint); |   890     AutoImmediateDrawIfNeeded autoDraw(*this, image, paint); | 
|   893     this->drawingCanvas()->drawImage(image, x, y, paint); |   891     this->drawingCanvas()->drawImage(image, x, y, paint); | 
|   894     this->recordedDrawCommand(); |   892     this->recordedDrawCommand(); | 
|   895 } |   893 } | 
|   896 void SkDeferredCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, 
      const SkRect& dst, |   894 void SkDeferredCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, 
      const SkRect& dst, | 
|   897                                        const SkPaint* paint SRC_RECT_CONSTRAINT_
      PARAM(constraint)) { |   895                                        const SkPaint* paint SRC_RECT_CONSTRAINT_
      PARAM(constraint)) { | 
|   898     if (fDeferredDrawing && |   896     if (fDeferredDrawing && | 
|   899         this->isFullFrame(&dst, paint) && |   897         this->isFullFrame(&dst, paint) && | 
|   900         isPaintOpaque(paint, image)) { |   898         SkPaintPriv::Overwrites(image, paint)) { | 
|   901         this->getDeferredDevice()->skipPendingCommands(); |   899         this->getDeferredDevice()->skipPendingCommands(); | 
|   902     } |   900     } | 
|   903      |   901      | 
|   904     AutoImmediateDrawIfNeeded autoDraw(*this, image, paint); |   902     AutoImmediateDrawIfNeeded autoDraw(*this, image, paint); | 
|   905     this->drawingCanvas()->drawImageRect(image, src, dst, paint |   903     this->drawingCanvas()->drawImageRect(image, src, dst, paint | 
|   906                                          SRC_RECT_CONSTRAINT_ARG(constraint)); |   904                                          SRC_RECT_CONSTRAINT_ARG(constraint)); | 
|   907     this->recordedDrawCommand(); |   905     this->recordedDrawCommand(); | 
|   908 } |   906 } | 
|   909  |   907  | 
|   910 void SkDeferredCanvas::onDrawImageNine(const SkImage* image, const SkIRect& cent
      er, |   908 void SkDeferredCanvas::onDrawImageNine(const SkImage* image, const SkIRect& cent
      er, | 
|   911                                        const SkRect& dst, const SkPaint* paint) 
      { |   909                                        const SkRect& dst, const SkPaint* paint) 
      { | 
|   912     if (fDeferredDrawing && |   910     if (fDeferredDrawing && | 
|   913         this->isFullFrame(&dst, paint) && |   911         this->isFullFrame(&dst, paint) && | 
|   914         isPaintOpaque(paint, image)) { |   912         SkPaintPriv::Overwrites(image, paint)) { | 
|   915         this->getDeferredDevice()->skipPendingCommands(); |   913         this->getDeferredDevice()->skipPendingCommands(); | 
|   916     } |   914     } | 
|   917      |   915      | 
|   918     AutoImmediateDrawIfNeeded autoDraw(*this, image, paint); |   916     AutoImmediateDrawIfNeeded autoDraw(*this, image, paint); | 
|   919     this->drawingCanvas()->drawImageNine(image, center, dst, paint); |   917     this->drawingCanvas()->drawImageNine(image, center, dst, paint); | 
|   920     this->recordedDrawCommand(); |   918     this->recordedDrawCommand(); | 
|   921 } |   919 } | 
|   922  |   920  | 
|   923 void SkDeferredCanvas::onDrawBitmapNine(const SkBitmap& bitmap, |   921 void SkDeferredCanvas::onDrawBitmapNine(const SkBitmap& bitmap, | 
|   924                                         const SkIRect& center, const SkRect& dst
      , |   922                                         const SkIRect& center, const SkRect& dst
      , | 
|   925                                         const SkPaint* paint) { |   923                                         const SkPaint* paint) { | 
|   926     // TODO: reset recording canvas if paint+bitmap is opaque and clip rect |   924     // TODO: reset recording canvas if paint+bitmap is opaque and clip rect | 
|   927     // covers canvas entirely and dst covers canvas entirely |   925     // covers canvas entirely and dst covers canvas entirely | 
|   928     AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint); |   926     AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint); | 
|   929     this->drawingCanvas()->drawBitmapNine(bitmap, center, dst, paint); |   927     this->drawingCanvas()->drawBitmapNine(bitmap, center, dst, paint); | 
|   930     this->recordedDrawCommand(); |   928     this->recordedDrawCommand(); | 
|   931 } |   929 } | 
|   932  |   930  | 
|   933 void SkDeferredCanvas::onDrawSprite(const SkBitmap& bitmap, int left, int top, |   931 void SkDeferredCanvas::onDrawSprite(const SkBitmap& bitmap, int left, int top, | 
|   934                                     const SkPaint* paint) { |   932                                     const SkPaint* paint) { | 
|   935     SkRect bitmapRect = SkRect::MakeXYWH( |   933     SkRect bitmapRect = SkRect::MakeXYWH( | 
|   936         SkIntToScalar(left), |   934         SkIntToScalar(left), | 
|   937         SkIntToScalar(top), |   935         SkIntToScalar(top), | 
|   938         SkIntToScalar(bitmap.width()), |   936         SkIntToScalar(bitmap.width()), | 
|   939         SkIntToScalar(bitmap.height())); |   937         SkIntToScalar(bitmap.height())); | 
|   940     if (fDeferredDrawing && |   938     if (fDeferredDrawing && | 
|   941         this->isFullFrame(&bitmapRect, paint) && |   939         this->isFullFrame(&bitmapRect, paint) && | 
|   942         isPaintOpaque(paint, &bitmap)) { |   940         SkPaintPriv::Overwrites(bitmap, paint)) { | 
|   943         this->getDeferredDevice()->skipPendingCommands(); |   941         this->getDeferredDevice()->skipPendingCommands(); | 
|   944     } |   942     } | 
|   945  |   943  | 
|   946     AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint); |   944     AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint); | 
|   947     this->drawingCanvas()->drawSprite(bitmap, left, top, paint); |   945     this->drawingCanvas()->drawSprite(bitmap, left, top, paint); | 
|   948     this->recordedDrawCommand(); |   946     this->recordedDrawCommand(); | 
|   949 } |   947 } | 
|   950  |   948  | 
|   951 void SkDeferredCanvas::onDrawText(const void* text, size_t byteLength, SkScalar 
      x, SkScalar y, |   949 void SkDeferredCanvas::onDrawText(const void* text, size_t byteLength, SkScalar 
      x, SkScalar y, | 
|   952                                   const SkPaint& paint) { |   950                                   const SkPaint& paint) { | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1021 SkDrawFilter* SkDeferredCanvas::setDrawFilter(SkDrawFilter* filter) { |  1019 SkDrawFilter* SkDeferredCanvas::setDrawFilter(SkDrawFilter* filter) { | 
|  1022     this->drawingCanvas()->setDrawFilter(filter); |  1020     this->drawingCanvas()->setDrawFilter(filter); | 
|  1023     this->INHERITED::setDrawFilter(filter); |  1021     this->INHERITED::setDrawFilter(filter); | 
|  1024     this->recordedDrawCommand(); |  1022     this->recordedDrawCommand(); | 
|  1025     return filter; |  1023     return filter; | 
|  1026 } |  1024 } | 
|  1027  |  1025  | 
|  1028 SkCanvas* SkDeferredCanvas::canvasForDrawIter() { |  1026 SkCanvas* SkDeferredCanvas::canvasForDrawIter() { | 
|  1029     return this->drawingCanvas(); |  1027     return this->drawingCanvas(); | 
|  1030 } |  1028 } | 
| OLD | NEW |