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 17ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#ifndef ANDROID_GRAPHICS_PICTURE_H_ 18ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#define ANDROID_GRAPHICS_PICTURE_H_ 19b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 20b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips#include "SkPicture.h" 21b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips#include "SkPictureRecorder.h" 22b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips#include "SkRefCnt.h" 2360126efd7d905ca24822765c6dafac17fef278abBen Wagner 2460126efd7d905ca24822765c6dafac17fef278abBen Wagner#include <memory> 25b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 26b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipsclass SkStream; 27b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipsclass SkWStream; 28b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 294b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenbergernamespace android { 304b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger 318872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerclass Canvas; 328872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 33b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips// Skia's SkPicture class has been split into an SkPictureRecorder 34b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips// and an SkPicture. AndroidPicture recreates the functionality 35b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips// of the old SkPicture interface by flip-flopping between the two 36b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips// new classes. 374b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenbergerclass Picture { 38b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipspublic: 394b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger explicit Picture(const Picture* src = NULL); 40b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger Canvas* beginRecording(int width, int height); 42b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 43b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips void endRecording(); 44b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 45b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips int width() const; 46b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 47b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips int height() const; 48b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 494b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger static Picture* CreateFromStream(SkStream* stream); 50b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 51b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips void serialize(SkWStream* stream) const; 52b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 538872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger void draw(Canvas* canvas); 54b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 55b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipsprivate: 56b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips int mWidth; 57b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips int mHeight; 58260ab726486317496bc12a57d599ea96dcde3284Mike Reed sk_sp<SkPicture> mPicture; 5960126efd7d905ca24822765c6dafac17fef278abBen Wagner std::unique_ptr<SkPictureRecorder> mRecorder; 60b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 61b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips // Make a copy of a picture that is in the midst of being recorded. The 62b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips // resulting picture will have balanced saves and restores. 63260ab726486317496bc12a57d599ea96dcde3284Mike Reed sk_sp<SkPicture> makePartialCopy() const; 6471487eb0ceb2b7dea02649e78d99bb5952f5eaefMike Reed 6571487eb0ceb2b7dea02649e78d99bb5952f5eaefMike Reed void validate() const; 66b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips}; 674b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger 684b0959d8db20c08ab1fed37f397b303af229162bDerek Sollenberger}; // namespace android 69ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#endif // ANDROID_GRAPHICS_PICTURE_H_ 70