11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkProxyCanvas_DEFINED 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkProxyCanvas_DEFINED 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkCanvas.h" 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** This class overrides all virtual methods on SkCanvas, and redirects them 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project to a "proxy", another SkCanvas instance. It can be the basis for 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project intercepting (and possibly modifying) calls to a canvas. 164f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project There must be a proxy installed before the proxycanvas can be used (i.e. 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project before its virtual methods can be called). 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkProxyCanvas : public SkCanvas { 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkProxyCanvas() : fProxy(NULL) {} 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkProxyCanvas(SkCanvas* proxy); 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkProxyCanvas(); 254f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkCanvas* getProxy() const { return fProxy; } 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setProxy(SkCanvas* proxy); 284f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual int save(SaveFlags flags = kMatrixClip_SaveFlag) SK_OVERRIDE; 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual int saveLayer(const SkRect* bounds, const SkPaint* paint, 311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SaveFlags flags = kARGB_ClipLayer_SaveFlag) SK_OVERRIDE; 321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void restore() SK_OVERRIDE; 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE; 351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE; 361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual bool rotate(SkScalar degrees) SK_OVERRIDE; 371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE; 381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE; 391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE; 404f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE; 421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE; 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool clipRegion(const SkRegion& deviceRgn, 441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkRegion::Op op = SkRegion::kIntersect_Op) SK_OVERRIDE; 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE; 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], 481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkPaint& paint) SK_OVERRIDE; 491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void drawRect(const SkRect& rect, const SkPaint& paint) SK_OVERRIDE; 501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, 521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkPaint* paint = NULL) SK_OVERRIDE; 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src, 541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkRect& dst, const SkPaint* paint = NULL) SK_OVERRIDE; 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, 561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkPaint* paint = NULL) SK_OVERRIDE; 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawSprite(const SkBitmap& bitmap, int left, int top, 581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkPaint* paint = NULL) SK_OVERRIDE; 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawText(const void* text, size_t byteLength, SkScalar x, 601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkScalar y, const SkPaint& paint) SK_OVERRIDE; 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawPosText(const void* text, size_t byteLength, 621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkPoint pos[], const SkPaint& paint) SK_OVERRIDE; 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawPosTextH(const void* text, size_t byteLength, 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkScalar xpos[], SkScalar constY, 651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkPaint& paint) SK_OVERRIDE; 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawTextOnPath(const void* text, size_t byteLength, 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPath& path, const SkMatrix* matrix, 681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkPaint& paint) SK_OVERRIDE; 691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void drawPicture(SkPicture&) SK_OVERRIDE; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawVertices(VertexMode vmode, int vertexCount, 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPoint vertices[], const SkPoint texs[], 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkColor colors[], SkXfermode* xmode, 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint16_t indices[], int indexCount, 741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const SkPaint& paint) SK_OVERRIDE; 751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void drawData(const void* data, size_t length) SK_OVERRIDE; 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual SkBounder* setBounder(SkBounder* bounder) SK_OVERRIDE; 781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual SkDrawFilter* setDrawFilter(SkDrawFilter* filter) SK_OVERRIDE; 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkCanvas* fProxy; 824f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkCanvas INHERITED; 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 87