summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/src/core/SkLocalMatrixShader.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/src/core/SkLocalMatrixShader.h')
-rw-r--r--chromium/third_party/skia/src/core/SkLocalMatrixShader.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/chromium/third_party/skia/src/core/SkLocalMatrixShader.h b/chromium/third_party/skia/src/core/SkLocalMatrixShader.h
new file mode 100644
index 00000000000..1143f062d38
--- /dev/null
+++ b/chromium/third_party/skia/src/core/SkLocalMatrixShader.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkLocalMatrixShader_DEFINED
+#define SkLocalMatrixShader_DEFINED
+
+#include "SkShader.h"
+#include "SkReadBuffer.h"
+#include "SkWriteBuffer.h"
+
+class SkLocalMatrixShader : public SkShader {
+public:
+ SkLocalMatrixShader(SkShader* proxy, const SkMatrix& localMatrix)
+ : fProxyShader(SkRef(proxy))
+ , fProxyLocalMatrix(localMatrix)
+ {}
+
+ virtual size_t contextSize() const SK_OVERRIDE {
+ return fProxyShader->contextSize();
+ }
+
+ virtual BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix,
+ TileMode* mode) const SK_OVERRIDE {
+ return fProxyShader->asABitmap(bitmap, matrix, mode);
+ }
+
+ virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE {
+ return fProxyShader->asAGradient(info);
+ }
+
+#if SK_SUPPORT_GPU
+
+ virtual bool asNewEffect(GrContext* context, const SkPaint& paint, const SkMatrix* localMatrix,
+ GrColor* grColor, GrEffectRef** grEffect) const SK_OVERRIDE {
+ SkMatrix tmp = fProxyLocalMatrix;
+ if (localMatrix) {
+ tmp.preConcat(*localMatrix);
+ }
+ return fProxyShader->asNewEffect(context, paint, &tmp, grColor, grEffect);
+ }
+
+#else
+
+ virtual bool asNewEffect(GrContext* context, const SkPaint& paint, const SkMatrix* localMatrix,
+ GrColor* grColor, GrEffectRef** grEffect) const SK_OVERRIDE {
+ SkDEBUGFAIL("Should not call in GPU-less build");
+ return false;
+ }
+
+#endif
+
+ virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const SK_OVERRIDE {
+ if (localMatrix) {
+ *localMatrix = fProxyLocalMatrix;
+ }
+ return SkRef(fProxyShader.get());
+ }
+
+ SK_TO_STRING_OVERRIDE()
+ SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixShader)
+
+protected:
+ SkLocalMatrixShader(SkReadBuffer&);
+ virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+ virtual Context* onCreateContext(const ContextRec&, void*) const SK_OVERRIDE;
+
+private:
+ SkAutoTUnref<SkShader> fProxyShader;
+ SkMatrix fProxyLocalMatrix;
+
+ typedef SkShader INHERITED;
+};
+
+#endif