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: 42b1476ae7d515d6c406b4367cfb4ada8ce2d116e1Tom Hudson SkiaCanvasProxy(Canvas* canvas, bool filterHwuiCalls = false); 431db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual ~SkiaCanvasProxy() {} 441db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 451db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenbergerprotected: 461db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 471db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual 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; 631db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, 641db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint*) override; 651db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, 66f35b989d26bb98900f6c5fa2e586326b30b6e161Leon Scroggins III const SkPaint* paint, SrcRectConstraint) override; 671db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, 681db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkRect& dst, const SkPaint*) override; 691db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawVertices(VertexMode, int vertexCount, const SkPoint vertices[], 701db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPoint texs[], const SkColor colors[], SkXfermode*, 711db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const uint16_t indices[], int indexCount, 721db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint&) override; 731db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 741db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; 751db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 761db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, 771db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint&) override; 781db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], 791db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint&) override; 801db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], 811db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger SkScalar constY, const SkPaint&) override; 821db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, 831db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkMatrix* matrix, const SkPaint&) override; 841db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, 851db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint& paint) override; 861db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 871db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], 881db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPoint texCoords[4], SkXfermode* xmode, 891db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger const SkPaint& paint) override; 901db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 911db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override; 921db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override; 931db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override; 941db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger virtual void onClipRegion(const SkRegion&, SkRegion::Op) override; 951db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 961db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenbergerprivate: 971db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger Canvas* mCanvas; 98b1476ae7d515d6c406b4367cfb4ada8ce2d116e1Tom Hudson bool mFilterHwuiCalls; 991db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 1001db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger typedef SkCanvas INHERITED; 1011db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger}; 1021db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 1031db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger}; // namespace uirenderer 1041db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger}; // namespace android 1051db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger 1061db141f93c4fe79a4669440c3d14f63bc87b2e34Derek Sollenberger#endif // SkiaCanvasProxy_DEFINED 107