1f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson/*
2f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson * Copyright 2015 Google Inc.
3f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson *
4f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson * Use of this source code is governed by a BSD-style license that can be
5f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson * found in the LICENSE file.
6f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson */
7f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
8f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson#ifndef SkAndroidSDKCanvas_DEFINED
9f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson#define SkAndroidSDKCanvas_DEFINED
10f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
11f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson#include "SkBitmap.h"
12f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson#include "SkCanvas.h"
13f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson#include "SkPaint.h"
14f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson#include "SkPath.h"
15f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson#include "SkRect.h"
16f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
17f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson/** SkDrawFilter is likely to be deprecated; this is a proxy
18f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    canvas that does the same thing: alter SkPaint fields.
19f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
20f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    onDraw*() functions may have their SkPaint modified, and are then
21f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    passed on to the same function on proxyTarget. THIS BREAKS CONSTNESS!
22f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
23f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    This still suffers one of the same architectural flaws as SkDrawFilter:
24f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    TextBlob paints are incomplete when filter is called.
25f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson*/
26f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
27f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudsonclass SkAndroidSDKCanvas : public SkCanvas {
28f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudsonpublic:
29f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    SkAndroidSDKCanvas();
30f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void reset(SkCanvas* newTarget);
31f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
32f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudsonprotected:
33f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
34f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    // FILTERING
35f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
3636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawPaint(const SkPaint& paint) override;
37f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawPoints(PointMode pMode, size_t count, const SkPoint pts[],
3836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                      const SkPaint& paint) override;
3936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawOval(const SkRect& r, const SkPaint& paint) override;
4036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawRect(const SkRect& r, const SkPaint& paint) override;
4136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawRRect(const SkRRect& r, const SkPaint& paint) override;
4236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawPath(const SkPath& path, const SkPaint& paint) override;
43f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
4436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                      const SkPaint* paint) override;
45f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
4636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                          const SkPaint* paint, DrawBitmapRectFlags flags) override;
47f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
4836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                          const SkRect& dst, const SkPaint* paint) override;
49f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawSprite(const SkBitmap& bitmap, int left, int top,
5036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                      const SkPaint* paint) override;
51f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawVertices(VertexMode vMode, int vertexCount, const SkPoint vertices[],
52f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson                        const SkPoint texs[], const SkColor colors[], SkXfermode* xMode,
53f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson                        const uint16_t indices[], int indexCount,
5436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                        const SkPaint& paint) override;
55f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
56f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
5736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                      const SkPaint& paint) override;
58f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
59f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
6036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                    const SkPaint& paint) override;
61f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
6236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                       const SkPaint& paint) override;
63f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
6436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                        SkScalar constY, const SkPaint& paint) override;
65f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
6636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                          const SkMatrix* matrix, const SkPaint& paint) override;
67f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
6836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                        const SkPaint& paint) override;
69f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
70f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
71f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson                     const SkPoint texCoords[4], SkXfermode* xmode,
7236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                     const SkPaint& paint) override;
73f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
7436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawImage(const SkImage*, SkScalar, SkScalar, const SkPaint*) override;
75f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*)
7636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein        override;
77f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*);
78f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
79f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    // PASS THROUGH
80f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
8136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawDrawable(SkDrawable*) override;
8236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkISize getBaseLayerSize() const override;
8336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool getClipBounds(SkRect*) const override;
8436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool getClipDeviceBounds(SkIRect*) const override;
8536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool isClipEmpty() const override;
8636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool isClipRect() const override;
8736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) override;
8836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    const void* onPeekPixels(SkImageInfo*, size_t*) override;
8936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void* onAccessTopLayerPixels(SkImageInfo*, size_t*) override;
9036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void willSave() override;
9105e4abae89d0609af91eef5dddc237c835443c9atomhudson    SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) override;
9236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void willRestore() override;
9336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void didRestore() override;
9436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void didConcat(const SkMatrix&) override;
9536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void didSetMatrix(const SkMatrix&) override;
9636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override;
9736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override;
9836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override;
9936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onClipRegion(const SkRegion&, SkRegion::Op) override;
10036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDiscard() override;
101f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
102f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudsonprotected:
103f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson    SkCanvas* fProxyTarget;
104f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson};
105f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
106f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson#endif  // SkAndroidSDKCanvas_DEFINED
107f7edcdedb64ee0d4a5c88807cd75ed1700e5bccetomhudson
108