11db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger/* 21db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * Copyright (C) 2015 The Android Open Source Project 31db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * 41db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * Licensed under the Apache License, Version 2.0 (the "License"); 51db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * you may not use this file except in compliance with the License. 61db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * You may obtain a copy of the License at 71db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * 81db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * http://www.apache.org/licenses/LICENSE-2.0 91db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * 101db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * Unless required by applicable law or agreed to in writing, software 111db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * distributed under the License is distributed on an "AS IS" BASIS, 121db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * See the License for the specific language governing permissions and 141db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * limitations under the License. 151db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger */ 161db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 171db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger#ifndef SkiaCanvasProxy_DEFINED 181db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger#define SkiaCanvasProxy_DEFINED 191db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 201db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger#include <cutils/compiler.h> 211db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger#include <SkCanvas.h> 221db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 23dccca44ffda4836b56a21da95a046c9708ffd49csergeyv#include "hwui/Canvas.h" 241db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 251db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenbergernamespace android { 261db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenbergernamespace uirenderer { 271db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 281db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger/** 291db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * This class serves as a proxy between Skia's SkCanvas and Android Framework's 30b1476ae7d515d6c406b4367cfb4ada8ce2d116e1Tom Hudson * Canvas. The class does not maintain any draw-related state and will pass 31b1476ae7d515d6c406b4367cfb4ada8ce2d116e1Tom Hudson * through most requests directly to the Canvas provided in the constructor. 321db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * 331db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * Upon construction it is expected that the provided Canvas has already been 341db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * prepared for recording and will continue to be in the recording state while 351db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger * this proxy class is being used. 36b1476ae7d515d6c406b4367cfb4ada8ce2d116e1Tom Hudson * 37b1476ae7d515d6c406b4367cfb4ada8ce2d116e1Tom Hudson * If filterHwuiCalls is true, the proxy silently ignores away draw calls that 38b1476ae7d515d6c406b4367cfb4ada8ce2d116e1Tom Hudson * aren't supported by HWUI. 391db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger */ 401db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenbergerclass ANDROID_API SkiaCanvasProxy : public SkCanvas { 411db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenbergerpublic: 42faecb78a6b11c780db47bc940ca7662899ab5d5eChih-Hung Hsieh explicit SkiaCanvasProxy(Canvas* canvas, bool filterHwuiCalls = false); 431db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual ~SkiaCanvasProxy() {} 441db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 451db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenbergerprotected: 461db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 4779fc3b1f1675364dbb739ffa511a68ed5a80f357Matt Sarett virtual sk_sp<SkSurface> onNewSurface(const SkImageInfo&, const SkSurfaceProps&) override; 481db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 491db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void willSave() override; 505518e7cbd4e8d7a7cb3d60a4251eccc3b7fb82dbLeon Scroggins III virtual SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec&) override; 511db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void willRestore() override; 521db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 531db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void didConcat(const SkMatrix&) override; 541db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void didSetMatrix(const SkMatrix&) override; 551db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 561db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPaint(const SkPaint& paint) override; 571db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPoints(PointMode, size_t count, const SkPoint pts[], 581db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint&) override; 591db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawOval(const SkRect&, const SkPaint&) override; 601db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawRect(const SkRect&, const SkPaint&) override; 611db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawRRect(const SkRRect&, const SkPaint&) override; 621db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPath(const SkPath& path, const SkPaint&) override; 639969111d9c8017cdd439edbb2c54ef9678b24a59Yuqian Li virtual void onDrawArc(const SkRect&, SkScalar startAngle, SkScalar sweepAngle, bool useCenter, 649969111d9c8017cdd439edbb2c54ef9678b24a59Yuqian Li const SkPaint&) override; 651db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, 661db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint*) override; 671db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, 68f35b989d26bb98900f6c5fa2e586326b30b6e161Leon Scroggins III const SkPaint* paint, SrcRectConstraint) override; 691db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, 701db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkRect& dst, const SkPaint*) override; 71770e0b500793bce45442b5f403913d14017df4e8Stan Iliev virtual void onDrawImage(const SkImage*, SkScalar dx, SkScalar dy, const SkPaint*); 72770e0b500793bce45442b5f403913d14017df4e8Stan Iliev virtual void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*, 73770e0b500793bce45442b5f403913d14017df4e8Stan Iliev SrcRectConstraint); 74770e0b500793bce45442b5f403913d14017df4e8Stan Iliev virtual void onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst, 75770e0b500793bce45442b5f403913d14017df4e8Stan Iliev const SkPaint*); 76770e0b500793bce45442b5f403913d14017df4e8Stan Iliev virtual void onDrawImageLattice(const SkImage*, const Lattice& lattice, const SkRect& dst, 77770e0b500793bce45442b5f403913d14017df4e8Stan Iliev const SkPaint*); 78871cd2dd6074544bd41a84ff38255d81a392546aMike Reed virtual void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; 791db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 801db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; 811db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 821db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, 831db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint&) override; 841db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], 851db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint&) override; 861db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], 871db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger SkScalar constY, const SkPaint&) override; 881db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, 891db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkMatrix* matrix, const SkPaint&) override; 90afc221499d943386256feb9db46c119ff834bf79Yuqian Li virtual void onDrawTextRSXform(const void* text, size_t byteLength, const SkRSXform[], 91afc221499d943386256feb9db46c119ff834bf79Yuqian Li const SkRect* cullRect, const SkPaint& paint); 921db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, 931db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint& paint) override; 941db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 951db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], 96c2f31df8b3b9a237e9abffc59c61804ad8495073Mike Reed const SkPoint texCoords[4], SkBlendMode, 971db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint& paint) override; 981db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 996e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed virtual void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override; 1006e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed virtual void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override; 1016e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed virtual void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override; 1021db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 1031db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenbergerprivate: 1041db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger Canvas* mCanvas; 105b1476ae7d515d6c406b4367cfb4ada8ce2d116e1Tom Hudson bool mFilterHwuiCalls; 1061db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 1071db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger typedef SkCanvas INHERITED; 1081db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger}; 1091db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 1101db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger}; // namespace uirenderer 1111db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger}; // namespace android 1121db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 1131db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger#endif // SkiaCanvasProxy_DEFINED 114