1b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips/* 2b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * Copyright (C) 2014 The Android Open Source Project 3b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * 4b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * Licensed under the Apache License, Version 2.0 (the "License"); 5b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * you may not use this file except in compliance with the License. 6b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * You may obtain a copy of the License at 7b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * 8b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * http://www.apache.org/licenses/LICENSE-2.0 9b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * 10b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * Unless required by applicable law or agreed to in writing, software 11b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * distributed under the License is distributed on an "AS IS" BASIS, 12b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * See the License for the specific language governing permissions and 14b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips * limitations under the License. 15b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips */ 16b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 174b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger#ifndef ANDROID_GRAPHICS_PICTURE_H 184b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger#define ANDROID_GRAPHICS_PICTURE_H 19b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 20b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips#include "SkPicture.h" 21b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips#include "SkPictureRecorder.h" 22b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips#include "SkRefCnt.h" 23b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips#include "SkTemplates.h" 24b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 25b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipsclass SkStream; 26b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipsclass SkWStream; 27b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 284b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenbergernamespace android { 294b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger 308872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerclass Canvas; 318872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 32b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips// Skia's SkPicture class has been split into an SkPictureRecorder 33b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips// and an SkPicture. AndroidPicture recreates the functionality 34b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips// of the old SkPicture interface by flip-flopping between the two 35b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips// new classes. 364b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenbergerclass Picture { 37b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipspublic: 384b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger explicit Picture(const Picture* src = NULL); 39b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 408872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger Canvas* beginRecording(int width, int height); 41b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 42b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips void endRecording(); 43b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 44b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips int width() const; 45b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 46b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips int height() const; 47b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 484b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger static Picture* CreateFromStream(SkStream* stream); 49b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 50b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips void serialize(SkWStream* stream) const; 51b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 528872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger void draw(Canvas* canvas); 53b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 54b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipsprivate: 55b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips int mWidth; 56b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips int mHeight; 57b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips SkAutoTUnref<const SkPicture> mPicture; 58b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips SkAutoTDelete<SkPictureRecorder> mRecorder; 59b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 60b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips // Make a copy of a picture that is in the midst of being recorded. The 61b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips // resulting picture will have balanced saves and restores. 62b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips SkPicture* makePartialCopy() const; 63b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips}; 644b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger 654b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger}; // namespace android 664b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger#endif // ANDROID_GRAPHICS_PICTURE_H 67