| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2013 Google Inc. | 2  * Copyright 2013 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 "SkDropShadowImageFilter.h" | 8 #include "SkDropShadowImageFilter.h" | 
| 9 | 9 | 
| 10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" | 
| 11 #include "SkBlurImageFilter.h" | 11 #include "SkBlurImageFilter.h" | 
| 12 #include "SkCanvas.h" | 12 #include "SkCanvas.h" | 
| 13 #include "SkColorMatrixFilter.h" | 13 #include "SkColorMatrixFilter.h" | 
| 14 #include "SkDevice.h" | 14 #include "SkDevice.h" | 
| 15 #include "SkFlattenableBuffers.h" | 15 #include "SkFlattenableBuffers.h" | 
| 16 | 16 | 
| 17 SkDropShadowImageFilter::SkDropShadowImageFilter(SkScalar dx, SkScalar dy, SkSca
    lar sigma, SkColor color, SkImageFilter* input) | 17 SkDropShadowImageFilter::SkDropShadowImageFilter(SkScalar dx, SkScalar dy, SkSca
    lar sigma, SkColor color, SkImageFilter* input) | 
| 18     : SkImageFilter(input) | 18     : INHERITED(input) | 
| 19     , fDx(dx) | 19     , fDx(dx) | 
| 20     , fDy(dy) | 20     , fDy(dy) | 
| 21     , fSigma(sigma) | 21     , fSigmaX(sigma) | 
|  | 22     , fSigmaY(sigma) | 
| 22     , fColor(color) | 23     , fColor(color) | 
| 23 { | 24 { | 
| 24 } | 25 } | 
|  | 26 | 
|  | 27 SkDropShadowImageFilter::SkDropShadowImageFilter(SkScalar dx, SkScalar dy, SkSca
    lar sigmaX, SkScalar sigmaY, SkColor color, SkImageFilter* input, const CropRect
    * cropRect) | 
|  | 28     : INHERITED(input, cropRect) | 
|  | 29     , fDx(dx) | 
|  | 30     , fDy(dy) | 
|  | 31     , fSigmaX(sigmaX) | 
|  | 32     , fSigmaY(sigmaY) | 
|  | 33     , fColor(color) | 
|  | 34 { | 
|  | 35 } | 
| 25 | 36 | 
| 26 SkDropShadowImageFilter::SkDropShadowImageFilter(SkFlattenableReadBuffer& buffer
    ) | 37 SkDropShadowImageFilter::SkDropShadowImageFilter(SkFlattenableReadBuffer& buffer
    ) | 
| 27  : INHERITED(1, buffer) { | 38  : INHERITED(1, buffer) { | 
| 28     fDx = buffer.readScalar(); | 39     fDx = buffer.readScalar(); | 
| 29     fDy = buffer.readScalar(); | 40     fDy = buffer.readScalar(); | 
| 30     fSigma = buffer.readScalar(); | 41     fSigmaX = buffer.readScalar(); | 
|  | 42     fSigmaY = buffer.readScalar(); | 
| 31     fColor = buffer.readColor(); | 43     fColor = buffer.readColor(); | 
| 32     buffer.validate(SkScalarIsFinite(fDx) && | 44     buffer.validate(SkScalarIsFinite(fDx) && | 
| 33                     SkScalarIsFinite(fDy) && | 45                     SkScalarIsFinite(fDy) && | 
| 34                     SkScalarIsFinite(fSigma)); | 46                     SkScalarIsFinite(fSigmaX) && | 
|  | 47                     SkScalarIsFinite(fSigmaY)); | 
| 35 } | 48 } | 
| 36 | 49 | 
| 37 void SkDropShadowImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const | 50 void SkDropShadowImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const | 
| 38 { | 51 { | 
| 39     this->INHERITED::flatten(buffer); | 52     this->INHERITED::flatten(buffer); | 
| 40     buffer.writeScalar(fDx); | 53     buffer.writeScalar(fDx); | 
| 41     buffer.writeScalar(fDy); | 54     buffer.writeScalar(fDy); | 
| 42     buffer.writeScalar(fSigma); | 55     buffer.writeScalar(fSigmaX); | 
|  | 56     buffer.writeScalar(fSigmaY); | 
| 43     buffer.writeColor(fColor); | 57     buffer.writeColor(fColor); | 
| 44 } | 58 } | 
| 45 | 59 | 
| 46 bool SkDropShadowImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& source
    , const SkMatrix& matrix, SkBitmap* result, SkIPoint* loc) | 60 bool SkDropShadowImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& source
    , const SkMatrix& matrix, SkBitmap* result, SkIPoint* loc) | 
| 47 { | 61 { | 
| 48     SkBitmap src = source; | 62     SkBitmap src = source; | 
| 49     if (getInput(0) && !getInput(0)->filterImage(proxy, source, matrix, &src, lo
    c)) | 63     if (getInput(0) && !getInput(0)->filterImage(proxy, source, matrix, &src, lo
    c)) | 
| 50         return false; | 64         return false; | 
| 51 | 65 | 
| 52     SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(src.width(), src.heigh
    t())); | 66     SkIRect bounds; | 
|  | 67     src.getBounds(&bounds); | 
|  | 68     if (!this->applyCropRect(&bounds, matrix)) { | 
|  | 69         return false; | 
|  | 70     } | 
|  | 71 | 
|  | 72     SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(bounds.width(), bounds
    .height())); | 
| 53     SkCanvas canvas(device.get()); | 73     SkCanvas canvas(device.get()); | 
| 54 | 74 | 
| 55     SkAutoTUnref<SkImageFilter> blurFilter(new SkBlurImageFilter(fSigma, fSigma)
    ); | 75     SkAutoTUnref<SkImageFilter> blurFilter(new SkBlurImageFilter(fSigmaX, fSigma
    Y)); | 
| 56     SkAutoTUnref<SkColorFilter> colorFilter(SkColorFilter::CreateModeFilter(fCol
    or, SkXfermode::kSrcIn_Mode)); | 76     SkAutoTUnref<SkColorFilter> colorFilter(SkColorFilter::CreateModeFilter(fCol
    or, SkXfermode::kSrcIn_Mode)); | 
| 57     SkPaint paint; | 77     SkPaint paint; | 
| 58     paint.setImageFilter(blurFilter.get()); | 78     paint.setImageFilter(blurFilter.get()); | 
| 59     paint.setColorFilter(colorFilter.get()); | 79     paint.setColorFilter(colorFilter.get()); | 
| 60     paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); | 80     paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); | 
|  | 81     canvas.translate(-SkIntToScalar(bounds.fLeft), -SkIntToScalar(bounds.fTop)); | 
| 61     canvas.drawBitmap(src, fDx, fDy, &paint); | 82     canvas.drawBitmap(src, fDx, fDy, &paint); | 
| 62     canvas.drawBitmap(src, 0, 0); | 83     canvas.drawBitmap(src, 0, 0); | 
| 63     *result = device->accessBitmap(false); | 84     *result = device->accessBitmap(false); | 
|  | 85     loc->fX += bounds.fLeft; | 
|  | 86     loc->fY += bounds.fTop; | 
| 64     return true; | 87     return true; | 
| 65 } | 88 } | 
| OLD | NEW | 
|---|