1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkProxyCanvas.h"
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkProxyCanvas::SkProxyCanvas(SkCanvas* proxy) : fProxy(proxy) {
1182065d667f64e232bcde2ad849756a6096fcbe6freed@google.com    SkSafeRef(fProxy);
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkProxyCanvas::~SkProxyCanvas() {
1582065d667f64e232bcde2ad849756a6096fcbe6freed@google.com    SkSafeUnref(fProxy);
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1782065d667f64e232bcde2ad849756a6096fcbe6freed@google.com
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkProxyCanvas::setProxy(SkCanvas* proxy) {
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkRefCnt_SafeAssign(fProxy, proxy);
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com///////////////////////////////// Overrides ///////////
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
24e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgvoid SkProxyCanvas::willSave(SaveFlags flags) {
25e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    fProxy->save(flags);
26e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willSave(flags);
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
29e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgSkCanvas::SaveLayerStrategy SkProxyCanvas::willSaveLayer(const SkRect* bounds, const SkPaint* paint,
30e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org                                                         SaveFlags flags) {
31e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    fProxy->saveLayer(bounds, paint, flags);
32e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willSaveLayer(bounds, paint, flags);
33e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    // No need for a layer.
34e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    return kNoLayer_SaveLayerStrategy;
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
37e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgvoid SkProxyCanvas::willRestore() {
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->restore();
39e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willRestore();
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
4244c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkProxyCanvas::didConcat(const SkMatrix& matrix) {
4344c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    fProxy->concat(matrix);
4444c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didConcat(matrix);
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
4744c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkProxyCanvas::didSetMatrix(const SkMatrix& matrix) {
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->setMatrix(matrix);
4944c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didSetMatrix(matrix);
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
528f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkProxyCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
538f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    fProxy->clipRect(rect, op, kSoft_ClipEdgeStyle == edgeStyle);
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
568f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkProxyCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
578f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    fProxy->clipRRect(rrect, op, kSoft_ClipEdgeStyle == edgeStyle);
584ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
594ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
608f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkProxyCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
618f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    fProxy->clipPath(path, op, kSoft_ClipEdgeStyle == edgeStyle);
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
648f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkProxyCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
658f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    fProxy->clipRegion(deviceRgn, op);
668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkProxyCanvas::drawPaint(const SkPaint& paint) {
698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawPaint(paint);
708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkProxyCanvas::drawPoints(PointMode mode, size_t count,
738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               const SkPoint pts[], const SkPaint& paint) {
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawPoints(mode, count, pts, paint);
758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
774ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.comvoid SkProxyCanvas::drawOval(const SkRect& rect, const SkPaint& paint) {
784ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    fProxy->drawOval(rect, paint);
794ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
804ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
817ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.comvoid SkProxyCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawRect(rect, paint);
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
854ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.comvoid SkProxyCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
864ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    fProxy->drawRRect(rrect, paint);
874ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
884ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
89ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgvoid SkProxyCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
90ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org                                 const SkPaint& paint) {
91ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    fProxy->drawDRRect(outer, inner, paint);
92ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org}
93ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
947ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.comvoid SkProxyCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawPath(path, paint);
968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkProxyCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               const SkPaint* paint) {
1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawBitmap(bitmap, x, y, paint);
1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1037112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.comvoid SkProxyCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
104eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                   const SkRect& dst, const SkPaint* paint,
105eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                   DrawBitmapRectFlags flags) {
106eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    fProxy->drawBitmapRectToRect(bitmap, src, dst, paint, flags);
1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkProxyCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                     const SkPaint* paint) {
1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawBitmapMatrix(bitmap, m, paint);
1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkProxyCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               const SkPaint* paint) {
1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawSprite(bitmap, x, y, paint);
1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
119e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkProxyCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
120e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                               const SkPaint& paint) {
1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawText(text, byteLength, x, y, paint);
1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
124e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkProxyCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
125e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                  const SkPaint& paint) {
1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawPosText(text, byteLength, pos, paint);
1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
129e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkProxyCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
130e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                   SkScalar constY, const SkPaint& paint) {
1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawPosTextH(text, byteLength, xpos, constY, paint);
1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
134e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkProxyCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
135e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                     const SkMatrix* matrix, const SkPaint& paint) {
1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawTextOnPath(text, byteLength, path, matrix, paint);
1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1399b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillipsvoid SkProxyCanvas::onDrawPicture(const SkPicture* picture) {
140ed0bfb015a5d64b608f4168e0565689d501cbe98reed@android.com    fProxy->drawPicture(picture);
141ed0bfb015a5d64b608f4168e0565689d501cbe98reed@android.com}
142ed0bfb015a5d64b608f4168e0565689d501cbe98reed@android.com
1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkProxyCanvas::drawVertices(VertexMode vmode, int vertexCount,
1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 const SkPoint vertices[], const SkPoint texs[],
1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 const SkColor colors[], SkXfermode* xmode,
1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 const uint16_t indices[], int indexCount,
1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 const SkPaint& paint) {
1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    fProxy->drawVertices(vmode, vertexCount, vertices, texs, colors,
1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                     xmode, indices, indexCount, paint);
1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
152cb60844b34766aad4151df5e87c144d4a57e9abereed@android.comvoid SkProxyCanvas::drawData(const void* data, size_t length) {
153cb60844b34766aad4151df5e87c144d4a57e9abereed@android.com    fProxy->drawData(data, length);
154cb60844b34766aad4151df5e87c144d4a57e9abereed@android.com}
155cb60844b34766aad4151df5e87c144d4a57e9abereed@android.com
1560a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.comvoid SkProxyCanvas::beginCommentGroup(const char* description) {
1570a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    fProxy->beginCommentGroup(description);
1580a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
1590a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1600a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.comvoid SkProxyCanvas::addComment(const char* kywd, const char* value) {
1610a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    fProxy->addComment(kywd, value);
1620a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
1630a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1640a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.comvoid SkProxyCanvas::endCommentGroup() {
1650a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    fProxy->endCommentGroup();
1660a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
1670a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawFilter* SkProxyCanvas::setDrawFilter(SkDrawFilter* filter) {
1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    return fProxy->setDrawFilter(filter);
1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
171