| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2012 Google Inc. | 2  * Copyright 2012 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkImagePriv.h" | 8 #include "SkImagePriv.h" | 
| 9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" | 
| 10 #include "SkPicture.h" | 10 #include "SkPicture.h" | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 62     } else { | 62     } else { | 
| 63         bm.lockPixels(); | 63         bm.lockPixels(); | 
| 64         if (bm.getPixels()) { | 64         if (bm.getPixels()) { | 
| 65             image = SkImage::NewRasterCopy(info, bm.getPixels(), bm.rowBytes()); | 65             image = SkImage::NewRasterCopy(info, bm.getPixels(), bm.rowBytes()); | 
| 66         } | 66         } | 
| 67         bm.unlockPixels(); | 67         bm.unlockPixels(); | 
| 68     } | 68     } | 
| 69     return image; | 69     return image; | 
| 70 } | 70 } | 
| 71 | 71 | 
| 72 static bool needs_layer(const SkPaint& paint) { |  | 
| 73     return  0xFF != paint.getAlpha() || |  | 
| 74     paint.getColorFilter() || |  | 
| 75     paint.getImageFilter() || |  | 
| 76     SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrcOver_Mode); |  | 
| 77 } |  | 
| 78 |  | 
| 79 void SkImagePrivDrawPicture(SkCanvas* canvas, SkPicture* picture, |  | 
| 80                             SkScalar x, SkScalar y, const SkPaint* paint) { |  | 
| 81     int saveCount = canvas->getSaveCount(); |  | 
| 82 |  | 
| 83     if (paint && needs_layer(*paint)) { |  | 
| 84         SkRect bounds; |  | 
| 85         bounds.set(x, y, |  | 
| 86                    x + SkIntToScalar(picture->width()), |  | 
| 87                    y + SkIntToScalar(picture->height())); |  | 
| 88         canvas->saveLayer(&bounds, paint); |  | 
| 89         canvas->translate(x, y); |  | 
| 90     } else if (x || y) { |  | 
| 91         canvas->save(); |  | 
| 92         canvas->translate(x, y); |  | 
| 93     } |  | 
| 94 |  | 
| 95     canvas->drawPicture(*picture); |  | 
| 96     canvas->restoreToCount(saveCount); |  | 
| 97 } |  | 
| 98 |  | 
| 99 void SkImagePrivDrawPicture(SkCanvas* canvas, SkPicture* picture, |  | 
| 100                             const SkRect* src,  const SkRect& dst, const SkPaint
     * paint) { |  | 
| 101     int saveCount = canvas->getSaveCount(); |  | 
| 102 |  | 
| 103     SkMatrix matrix; |  | 
| 104     SkRect   tmpSrc; |  | 
| 105 |  | 
| 106     if (NULL != src) { |  | 
| 107         tmpSrc = *src; |  | 
| 108     } else { |  | 
| 109         tmpSrc.set(0, 0, |  | 
| 110                    SkIntToScalar(picture->width()), |  | 
| 111                    SkIntToScalar(picture->height())); |  | 
| 112     } |  | 
| 113 |  | 
| 114     matrix.setRectToRect(tmpSrc, dst, SkMatrix::kFill_ScaleToFit); |  | 
| 115     if (paint && needs_layer(*paint)) { |  | 
| 116         canvas->saveLayer(&dst, paint); |  | 
| 117     } else { |  | 
| 118         canvas->save(); |  | 
| 119     } |  | 
| 120     canvas->concat(matrix); |  | 
| 121     if (!paint || !needs_layer(*paint)) { |  | 
| 122         canvas->clipRect(tmpSrc); |  | 
| 123     } |  | 
| 124 |  | 
| 125     canvas->drawPicture(*picture); |  | 
| 126     canvas->restoreToCount(saveCount); |  | 
| 127 } |  | 
| OLD | NEW | 
|---|