aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-10-10 13:51:19 +0000
committerGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-10-10 13:51:19 +0000
commitb295fb6ff3222453912dfcb7a1ea5184d40014b5 (patch)
treee15812e8b5c505bce63d6a3b277be97456ecc23c /src/core
parentf29c3802899c3e1e285a44140eb32cfa329764dc (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.cpp41
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);
}