aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBitmapProcShader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkBitmapProcShader.cpp')
-rw-r--r--src/core/SkBitmapProcShader.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp
index 8ba57c4ae3..2302e0f048 100644
--- a/src/core/SkBitmapProcShader.cpp
+++ b/src/core/SkBitmapProcShader.cpp
@@ -67,6 +67,11 @@ void SkBitmapProcShader::flatten(SkFlattenableWriteBuffer& buffer) {
buffer.write8(fState.fTileModeY);
}
+static bool only_scale_and_translate(const SkMatrix& matrix) {
+ unsigned mask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask;
+ return (matrix.getType() & ~mask) == 0;
+}
+
bool SkBitmapProcShader::setContext(const SkBitmap& device,
const SkPaint& paint,
const SkMatrix& matrix) {
@@ -117,6 +122,12 @@ bool SkBitmapProcShader::setContext(const SkBitmap& device,
default:
break;
}
+
+ // if we're only 1-pixel heigh, and we don't rotate, then we can claim this
+ if (1 == fState.fBitmap->height() &&
+ only_scale_and_translate(this->getTotalInverse())) {
+ fFlags |= kConstInY_Flag;
+ }
return true;
}