2 * Copyright 2014 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #ifndef SkLocalMatrixShader_DEFINED
9 #define SkLocalMatrixShader_DEFINED
12 #include "SkReadBuffer.h"
13 #include "SkWriteBuffer.h"
15 class SkLocalMatrixShader : public SkShader {
17 SkLocalMatrixShader(SkShader* proxy, const SkMatrix& localMatrix)
18 : INHERITED(&localMatrix)
19 , fProxyShader(SkRef(proxy))
22 virtual size_t contextSize() const SK_OVERRIDE {
23 return fProxyShader->contextSize();
26 virtual BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix,
27 TileMode* mode) const SK_OVERRIDE {
28 return fProxyShader->asABitmap(bitmap, matrix, mode);
31 virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE {
32 return fProxyShader->asAGradient(info);
37 virtual bool asNewEffect(GrContext* context, const SkPaint& paint, const SkMatrix* localMatrix,
38 GrColor* grColor, GrEffect** grEffect) const SK_OVERRIDE {
39 SkMatrix tmp = this->getLocalMatrix();
41 tmp.preConcat(*localMatrix);
43 return fProxyShader->asNewEffect(context, paint, &tmp, grColor, grEffect);
48 virtual bool asNewEffect(GrContext* context, const SkPaint& paint, const SkMatrix* localMatrix,
49 GrColor* grColor, GrEffect** grEffect) const SK_OVERRIDE {
50 SkDEBUGFAIL("Should not call in GPU-less build");
56 virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const SK_OVERRIDE {
58 *localMatrix = this->getLocalMatrix();
60 return SkRef(fProxyShader.get());
63 SK_TO_STRING_OVERRIDE()
64 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixShader)
67 SkLocalMatrixShader(SkReadBuffer&);
68 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
69 virtual Context* onCreateContext(const ContextRec&, void*) const SK_OVERRIDE;
72 SkAutoTUnref<SkShader> fProxyShader;
74 typedef SkShader INHERITED;