1 /* 2 * Copyright 2012, The Android Open Source Project 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #include "SkBitmap.h" 27 #include "SkCanvas.h" 28 #include "SkMatrix.h" 29 #include "SkPicture.h" 30 #include "SkRegion.h" 31 #include "SkStream.h" 32 33 #define EXPORT_FUNC extern "C" __attribute__ ((visibility ("default"))) 34 35 EXPORT_FUNC int legacy_skia_create_picture(const void* pictureStream, int streamLength, 36 void**legacyPicture, int* width, int* height) { 37 SkMemoryStream stream(pictureStream, streamLength); 38 SkPicture* picture = new SkPicture(&stream); 39 *legacyPicture = picture; 40 *width = picture->width(); 41 *height = picture->height(); 42 return stream.peek(); 43 } 44 45 EXPORT_FUNC void legacy_skia_delete_picture(void* legacyPicture) { 46 free(legacyPicture); 47 } 48 49 EXPORT_FUNC void legacy_skia_draw_picture(void* legacyPicture, void* matrixStorage, 50 void* clipStorage, int bitmapWidth, 51 int bitmapHeight, int bitmapConfig, 52 int bitmapRowBytes, void* pixels) { 53 SkMatrix matrix; 54 matrix.unflatten(matrixStorage); 55 56 SkRegion region; 57 region.unflatten(clipStorage); 58 59 SkBitmap bitmap; 60 bitmap.setConfig((SkBitmap::Config)bitmapConfig, bitmapWidth, bitmapHeight, bitmapRowBytes); 61 bitmap.setPixels(pixels); 62 63 SkCanvas canvas(bitmap); 64 canvas.setMatrix(matrix); 65 canvas.setClipRegion(region); 66 canvas.drawPicture(*(SkPicture*)legacyPicture); 67 } 68