diff options
author | senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-10-10 13:51:19 +0000 |
---|---|---|
committer | senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-10-10 13:51:19 +0000 |
commit | b295fb6ff3222453912dfcb7a1ea5184d40014b5 (patch) | |
tree | e15812e8b5c505bce63d6a3b277be97456ecc23c /src/core | |
parent | f29c3802899c3e1e285a44140eb32cfa329764dc (diff) |
Change SkImageFilter's cropRect from SkIRect to a CropRect struct, containing an SkRect and flags indicating which parameters are set.
NOTE: this will require SK_CROP_RECT_IS_INT=1 to be set in Chrome until Blink has been updated to use SkImageFilter::CropRect. Include https://codereview.chromium.org/26528002/ with the Skia roll.
Note also that SK_CROP_RECT_IS_INT is a temporary measure until all call sites in Blink have been updated to use SkRect.
R=reed@google.com
Review URL: https://codereview.chromium.org/26371002
git-svn-id: http://skia.googlecode.com/svn/trunk@11692 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkImageFilter.cpp | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp index 502613bb68..3b7de25c93 100644 --- a/src/core/SkImageFilter.cpp +++ b/src/core/SkImageFilter.cpp @@ -18,27 +18,39 @@ SK_DEFINE_INST_COUNT(SkImageFilter) -SkImageFilter::SkImageFilter(int inputCount, SkImageFilter** inputs, const SkIRect* cropRect) +SkImageFilter::SkImageFilter(int inputCount, SkImageFilter** inputs, const CropRect* cropRect) : fInputCount(inputCount), fInputs(new SkImageFilter*[inputCount]), +#ifdef SK_CROP_RECT_IS_INT fCropRect(cropRect ? *cropRect : SkIRect::MakeLargest()) { +#else + fCropRect(cropRect ? *cropRect : CropRect(SkRect(), 0x0)) { +#endif for (int i = 0; i < inputCount; ++i) { fInputs[i] = inputs[i]; SkSafeRef(fInputs[i]); } } -SkImageFilter::SkImageFilter(SkImageFilter* input, const SkIRect* cropRect) +SkImageFilter::SkImageFilter(SkImageFilter* input, const CropRect* cropRect) : fInputCount(1), fInputs(new SkImageFilter*[1]), +#ifdef SK_CROP_RECT_IS_INT fCropRect(cropRect ? *cropRect : SkIRect::MakeLargest()) { +#else + fCropRect(cropRect ? *cropRect : CropRect(SkRect(), 0x0)) { +#endif fInputs[0] = input; SkSafeRef(fInputs[0]); } -SkImageFilter::SkImageFilter(SkImageFilter* input1, SkImageFilter* input2, const SkIRect* cropRect) +SkImageFilter::SkImageFilter(SkImageFilter* input1, SkImageFilter* input2, const CropRect* cropRect) : fInputCount(2), fInputs(new SkImageFilter*[2]), - fCropRect(cropRect ? *cropRect : SkIRect::MakeLargest()) { +#ifdef SK_CROP_RECT_IS_INT + fCropRect(cropRect ? *cropRect : SkIRect::MakeLargest()) { +#else + fCropRect(cropRect ? *cropRect : CropRect(SkRect(), 0x0)) { +#endif fInputs[0] = input1; fInputs[1] = input2; SkSafeRef(fInputs[0]); @@ -61,7 +73,12 @@ SkImageFilter::SkImageFilter(SkFlattenableReadBuffer& buffer) fInputs[i] = NULL; } } +#ifdef SK_CROP_RECT_IS_INT buffer.readIRect(&fCropRect); +#else + buffer.readRect(&fCropRect.fRect); + fCropRect.fFlags = buffer.readUInt(); +#endif } void SkImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { @@ -73,7 +90,12 @@ void SkImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { buffer.writeFlattenable(input); } } +#ifdef SK_CROP_RECT_IS_INT buffer.writeIRect(fCropRect); +#else + buffer.writeRect(fCropRect.fRect); + buffer.writeUInt(fCropRect.fFlags); +#endif } bool SkImageFilter::filterImage(Proxy* proxy, const SkBitmap& src, @@ -156,6 +178,7 @@ bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMa bool SkImageFilter::applyCropRect(SkIRect* rect, const SkMatrix& matrix) const { SkRect cropRect; +#ifdef SK_CROP_RECT_IS_INT matrix.mapRect(&cropRect, SkRect::Make(fCropRect)); SkIRect cropRectI; cropRect.roundOut(&cropRectI); @@ -164,6 +187,16 @@ bool SkImageFilter::applyCropRect(SkIRect* rect, const SkMatrix& matrix) const { if (fCropRect.fTop == SK_MinS32) cropRectI.fTop = SK_MinS32; if (fCropRect.fRight == SK_MaxS32) cropRectI.fRight = SK_MaxS32; if (fCropRect.fBottom == SK_MaxS32) cropRectI.fBottom = SK_MaxS32; +#else + matrix.mapRect(&cropRect, fCropRect.fRect); + SkIRect cropRectI; + cropRect.roundOut(&cropRectI); + // If the original crop rect edges were unset, max out the new crop edges + if (!(fCropRect.fFlags & CropRect::kHasLeft_CropEdge)) cropRectI.fLeft = SK_MinS32; + if (!(fCropRect.fFlags & CropRect::kHasTop_CropEdge)) cropRectI.fTop = SK_MinS32; + if (!(fCropRect.fFlags & CropRect::kHasRight_CropEdge)) cropRectI.fRight = SK_MaxS32; + if (!(fCropRect.fFlags & CropRect::kHasBottom_CropEdge)) cropRectI.fBottom = SK_MaxS32; +#endif return rect->intersect(cropRectI); } |