From 4db29cfb4f8ac0dfe32f6ec5e61e7477b9d924be Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz Date: Mon, 21 Aug 2017 20:33:56 +0200 Subject: [PATCH] Added bindings for SkPixelSerializer --- gn/core.gni | 2 ++ include/c/sk_image.h | 1 + include/c/sk_pixelserializer.h | 21 +++++++++++++++++++++ include/c/sk_types.h | 1 + src/c/sk_image.cpp | 4 ++++ src/c/sk_pixelserializer.cpp | 27 +++++++++++++++++++++++++++ src/c/sk_types_priv.h | 24 ++++++++++++++++++++++++ 7 files changed, 80 insertions(+) create mode 100644 include/c/sk_pixelserializer.h create mode 100644 src/c/sk_pixelserializer.cpp diff --git a/gn/core.gni b/gn/core.gni index e6d6b30..a09e120 100644 --- a/gn/core.gni +++ b/gn/core.gni @@ -25,6 +25,7 @@ skia_core_sources = [ "$_include/c/sk_patheffect.h", "$_include/c/sk_picture.h", "$_include/c/sk_pixmap.h", + "$_include/c/sk_pixelserializer.h", "$_include/c/sk_region.h", "$_include/c/sk_shader.h", "$_include/c/sk_stream.h", @@ -55,6 +56,7 @@ skia_core_sources = [ "$_src/c/sk_patheffect.cpp", "$_src/c/sk_picture.cpp", "$_src/c/sk_pixmap.cpp", + "$_src/c/sk_pixelserializer.cpp", "$_src/c/sk_region.cpp", "$_src/c/sk_shader.cpp", "$_src/c/sk_stream.cpp", diff --git a/include/c/sk_image.h b/include/c/sk_image.h index c630cf7..8408752 100644 --- a/include/c/sk_image.h +++ b/include/c/sk_image.h @@ -39,6 +39,7 @@ SK_C_API bool sk_image_read_pixels(const sk_image_t* image, const sk_imageinfo_t SK_C_API bool sk_image_read_pixels_into_pixmap(const sk_image_t* image, const sk_pixmap_t* dst, int srcX, int srcY, sk_image_caching_hint_t cachingHint); SK_C_API bool sk_image_scale_pixels(const sk_image_t* image, const sk_pixmap_t* dst, sk_filter_quality_t quality, sk_image_caching_hint_t cachingHint); SK_C_API sk_data_t* sk_image_encode(const sk_image_t*); +SK_C_API sk_data_t* sk_image_encode_with_serializer(const sk_image_t*, sk_pixelserializer_t* serializer); SK_C_API sk_data_t* sk_image_encode_specific(const sk_image_t* cimage, sk_encoded_image_format_t encoder, int quality); SK_C_API sk_image_t* sk_image_make_subset(const sk_image_t* cimage, const sk_irect_t* subset); SK_C_API sk_image_t* sk_image_make_non_texture_image(const sk_image_t* cimage); diff --git a/include/c/sk_pixelserializer.h b/include/c/sk_pixelserializer.h new file mode 100644 index 0000000..c97b3b8 --- /dev/null +++ b/include/c/sk_pixelserializer.h @@ -0,0 +1,21 @@ +/* + * Copyright 2017 Xamarin Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef sk_pixelserializer_DEFINED +#define sk_pixelserializer_DEFINED + +#include "sk_types.h" + +SK_C_PLUS_PLUS_BEGIN_GUARD + +SK_C_API void sk_pixelserializer_unref(sk_pixelserializer_t* cserializer); +SK_C_API bool sk_pixelserializer_use_encoded_data(sk_pixelserializer_t* cserializer, const void* data, size_t len); +SK_C_API sk_data_t* sk_pixelserializer_encode(sk_pixelserializer_t* cserializer, const sk_pixmap_t* cpixmap); + +SK_C_PLUS_PLUS_END_GUARD + +#endif diff --git a/include/c/sk_types.h b/include/c/sk_types.h index 71a8b68..61c1126 100644 --- a/include/c/sk_types.h +++ b/include/c/sk_types.h @@ -329,6 +329,7 @@ typedef struct sk_string_t sk_string_t; */ typedef struct sk_bitmap_t sk_bitmap_t; typedef struct sk_pixmap_t sk_pixmap_t; +typedef struct sk_pixelserializer_t sk_pixelserializer_t; typedef struct sk_colorfilter_t sk_colorfilter_t; typedef struct sk_imagefilter_t sk_imagefilter_t; typedef struct sk_imagefilter_croprect_t sk_imagefilter_croprect_t; diff --git a/src/c/sk_image.cpp b/src/c/sk_image.cpp index ef03f7d..fb5b662 100644 --- a/src/c/sk_image.cpp +++ b/src/c/sk_image.cpp @@ -128,6 +128,10 @@ sk_data_t* sk_image_encode(const sk_image_t* cimage) { return ToData(AsImage(cimage)->encode()); } +sk_data_t* sk_image_encode_with_serializer(const sk_image_t* cimage, sk_pixelserializer_t* serializer) { + return ToData(AsImage(cimage)->encode(AsPixelSerializer(serializer))); +} + sk_data_t* sk_image_encode_specific(const sk_image_t* cimage, sk_encoded_image_format_t encoder, int quality) { return ToData(AsImage(cimage)->encode((SkEncodedImageFormat)encoder, quality)); } diff --git a/src/c/sk_pixelserializer.cpp b/src/c/sk_pixelserializer.cpp new file mode 100644 index 0000000..6075960 --- /dev/null +++ b/src/c/sk_pixelserializer.cpp @@ -0,0 +1,27 @@ +/* + * Copyright 2017 Xamarin Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkPixelSerializer.h" + +#include "sk_pixelserializer.h" + +#include "sk_types_priv.h" + +void sk_pixelserializer_unref(sk_pixelserializer_t* cserializer) +{ + SkSafeUnref(AsPixelSerializer(cserializer)); +} + +bool sk_pixelserializer_use_encoded_data(sk_pixelserializer_t* cserializer, const void* data, size_t len) +{ + return AsPixelSerializer(cserializer)->useEncodedData(data, len); +} + +sk_data_t* sk_pixelserializer_encode(sk_pixelserializer_t* cserializer, const sk_pixmap_t* cpixmap) +{ + return ToData(AsPixelSerializer(cserializer)->encode(AsPixmap(*cpixmap))); +} diff --git a/src/c/sk_types_priv.h b/src/c/sk_types_priv.h index 87df9ab..54cd006 100644 --- a/src/c/sk_types_priv.h +++ b/src/c/sk_types_priv.h @@ -159,10 +159,34 @@ static inline SkPixmap& AsPixmap(sk_pixmap_t& cpixmap) { return reinterpret_cast(cpixmap); } +static inline const sk_pixmap_t& ToPixmap(const SkPixmap& pixmap) { + return reinterpret_cast(pixmap); +} + static inline sk_pixmap_t* ToPixmap(SkPixmap* pixmap) { return reinterpret_cast(pixmap); } +static inline const SkPixelSerializer* AsPixelSerializer(const sk_pixelserializer_t* cpixelserializer) { + return reinterpret_cast(cpixelserializer); +} + +static inline const SkPixelSerializer& AsPixelSerializer(const sk_pixelserializer_t& cpixelserializer) { + return reinterpret_cast(cpixelserializer); +} + +static inline SkPixelSerializer* AsPixelSerializer(sk_pixelserializer_t* cpixelserializer) { + return reinterpret_cast(cpixelserializer); +} + +static inline SkPixelSerializer& AsPixelSerializer(sk_pixelserializer_t& cpixelserializer) { + return reinterpret_cast(cpixelserializer); +} + +static inline sk_pixelserializer_t* ToPixelSerializer(SkPixelSerializer* pixelserializer) { + return reinterpret_cast(pixelserializer); +} + static inline SkMask* AsMask(sk_mask_t* cmask) { return reinterpret_cast(cmask); } -- 2.7.4