Chromium Code Reviews| Index: skia/public/interfaces/bitmap_skbitmap_struct_traits.cc |
| diff --git a/skia/public/interfaces/bitmap_skbitmap_struct_traits.cc b/skia/public/interfaces/bitmap_skbitmap_struct_traits.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c4184a85f03f5d91898ace1524e5a4719a6d3af8 |
| --- /dev/null |
| +++ b/skia/public/interfaces/bitmap_skbitmap_struct_traits.cc |
| @@ -0,0 +1,218 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "skia/public/interfaces/bitmap_skbitmap_struct_traits.h" |
| + |
| +namespace mojo { |
| + |
| +namespace { |
| + |
| +SkColorType MojoColorTypeToSk(skia::mojom::ColorType type) { |
| + switch (type) { |
| + case skia::mojom::ColorType::UNKNOWN: |
| + return kUnknown_SkColorType; |
| + case skia::mojom::ColorType::ALPHA_8: |
| + return kAlpha_8_SkColorType; |
| + case skia::mojom::ColorType::RGB_565: |
| + return kRGB_565_SkColorType; |
| + case skia::mojom::ColorType::ARGB_4444: |
| + return kARGB_4444_SkColorType; |
| + case skia::mojom::ColorType::RGBA_8888: |
| + return kRGBA_8888_SkColorType; |
| + case skia::mojom::ColorType::BGRA_8888: |
| + return kBGRA_8888_SkColorType; |
| + case skia::mojom::ColorType::INDEX_8: |
| + return kIndex_8_SkColorType; |
| + case skia::mojom::ColorType::GRAY_8: |
| + return kGray_8_SkColorType; |
| + } |
| + NOTREACHED(); |
| + return kUnknown_SkColorType; |
| +} |
| + |
| +SkAlphaType MojoAlphaTypeToSk(skia::mojom::AlphaType type) { |
| + switch (type) { |
| + case skia::mojom::AlphaType::UNKNOWN: |
| + return kUnknown_SkAlphaType; |
| + case skia::mojom::AlphaType::ALPHA_TYPE_OPAQUE: |
| + return kOpaque_SkAlphaType; |
| + case skia::mojom::AlphaType::PREMUL: |
| + return kPremul_SkAlphaType; |
| + case skia::mojom::AlphaType::UNPREMUL: |
| + return kUnpremul_SkAlphaType; |
| + } |
| + NOTREACHED(); |
| + return kUnknown_SkAlphaType; |
| +} |
| + |
| +SkColorProfileType MojoProfileTypeToSk(skia::mojom::ColorProfileType type) { |
| + switch (type) { |
| + case skia::mojom::ColorProfileType::LINEAR: |
| + return kLinear_SkColorProfileType; |
| + case skia::mojom::ColorProfileType::SRGB: |
| + return kSRGB_SkColorProfileType; |
| + } |
| + NOTREACHED(); |
| + return kLinear_SkColorProfileType; |
| +} |
| + |
| +skia::mojom::ColorType SkColorTypeToMojo(SkColorType type) { |
| + switch (type) { |
| + case kUnknown_SkColorType: |
| + return skia::mojom::ColorType::UNKNOWN; |
| + case kAlpha_8_SkColorType: |
| + return skia::mojom::ColorType::ALPHA_8; |
| + case kRGB_565_SkColorType: |
| + return skia::mojom::ColorType::RGB_565; |
| + case kARGB_4444_SkColorType: |
| + return skia::mojom::ColorType::ARGB_4444; |
| + case kRGBA_8888_SkColorType: |
| + return skia::mojom::ColorType::RGBA_8888; |
| + case kBGRA_8888_SkColorType: |
| + return skia::mojom::ColorType::BGRA_8888; |
| + case kIndex_8_SkColorType: |
| + return skia::mojom::ColorType::INDEX_8; |
| + case kGray_8_SkColorType: |
| + return skia::mojom::ColorType::GRAY_8; |
| + case kRGBA_F16_SkColorType: |
| + NOTREACHED(); |
| + return skia::mojom::ColorType::UNKNOWN; |
| + } |
| + NOTREACHED(); |
| + return skia::mojom::ColorType::UNKNOWN; |
| +} |
| + |
| +skia::mojom::AlphaType SkAlphaTypeToMojo(SkAlphaType type) { |
| + switch (type) { |
| + case kUnknown_SkAlphaType: |
| + return skia::mojom::AlphaType::UNKNOWN; |
| + case kOpaque_SkAlphaType: |
| + return skia::mojom::AlphaType::ALPHA_TYPE_OPAQUE; |
| + case kPremul_SkAlphaType: |
| + return skia::mojom::AlphaType::PREMUL; |
| + case kUnpremul_SkAlphaType: |
| + return skia::mojom::AlphaType::UNPREMUL; |
| + } |
| + NOTREACHED(); |
| + return skia::mojom::AlphaType::UNKNOWN; |
| +} |
| + |
| +skia::mojom::ColorProfileType SkProfileTypeToMojo(SkColorProfileType type) { |
| + switch (type) { |
| + case kLinear_SkColorProfileType: |
| + return skia::mojom::ColorProfileType::LINEAR; |
| + case kSRGB_SkColorProfileType: |
| + return skia::mojom::ColorProfileType::SRGB; |
| + } |
| + NOTREACHED(); |
| + return skia::mojom::ColorProfileType::LINEAR; |
| +} |
| + |
| +} // namespace |
| + |
| +// static |
| +bool ArrayTraits<BitmapBuffer>::IsNull(const BitmapBuffer& b) { |
| + return b.data != nullptr; |
|
Fady Samuel
2016/05/30 22:23:03
drive-by: b.data == nullptr;
Tom Sepez
2016/05/31 17:20:33
or just
return !b.data;
msw
2016/05/31 23:02:47
Done.
msw
2016/05/31 23:02:47
Done.
|
| +} |
| + |
| +// static |
| +void ArrayTraits<BitmapBuffer>::SetToNull(BitmapBuffer* b) { |
| + b->data = nullptr; |
| +} |
| + |
| +// static |
| +size_t ArrayTraits<BitmapBuffer>::GetSize(const BitmapBuffer& b) { |
| + return b.size; |
| +} |
| + |
| +// static |
| +uint8_t* ArrayTraits<BitmapBuffer>::GetData(BitmapBuffer& b) { |
| + return b.data; |
| +} |
| + |
| +// static |
| +const uint8_t* ArrayTraits<BitmapBuffer>::GetData(const BitmapBuffer& b) { |
| + return b.data; |
| +} |
| + |
| +// static |
| +uint8_t* ArrayTraits<BitmapBuffer>::GetAt(BitmapBuffer& b, size_t i) { |
| + return b.data + i; |
| +} |
| + |
| +// static |
| +const uint8_t* ArrayTraits<BitmapBuffer>::GetAt(const BitmapBuffer& b, |
| + size_t i) { |
| + return b.data + i; |
| +} |
| + |
| +// static |
| +void ArrayTraits<BitmapBuffer>::Resize(BitmapBuffer& b, size_t size) { |
| + CHECK_EQ(size, b.size); |
| +} |
| + |
| +// static |
| +skia::mojom::ColorType StructTraits<skia::mojom::Bitmap, SkBitmap>::color_type( |
| + const SkBitmap& r) { |
| + return SkColorTypeToMojo(r.colorType()); |
| +} |
| + |
| +// static |
| +skia::mojom::AlphaType StructTraits<skia::mojom::Bitmap, SkBitmap>::alpha_type( |
| + const SkBitmap& r) { |
| + return SkAlphaTypeToMojo(r.alphaType()); |
| +} |
| + |
| +// static |
| +skia::mojom::ColorProfileType |
| +StructTraits<skia::mojom::Bitmap, SkBitmap>::profile_type(const SkBitmap& r) { |
| + return SkProfileTypeToMojo(r.profileType()); |
| +} |
| + |
| +// static |
| +uint32_t StructTraits<skia::mojom::Bitmap, SkBitmap>::width(const SkBitmap& r) { |
| + return r.width() < 0 ? 0 : static_cast<uint32_t>(r.width()); |
| +} |
| + |
| +// static |
| +uint32_t StructTraits<skia::mojom::Bitmap, SkBitmap>::height( |
| + const SkBitmap& r) { |
| + return r.height() < 0 ? 0 : static_cast<uint32_t>(r.height()); |
| +} |
| + |
| +// static |
| +BitmapBuffer StructTraits<skia::mojom::Bitmap, SkBitmap>::pixel_data( |
| + const SkBitmap& r) { |
| + BitmapBuffer bitmap_buffer; |
| + bitmap_buffer.data = static_cast<uint8_t*>(r.getPixels()); |
| + bitmap_buffer.size = r.getSize(); |
| + return bitmap_buffer; |
| +} |
| + |
| +// static |
| +bool StructTraits<skia::mojom::Bitmap, SkBitmap>::Read( |
| + skia::mojom::BitmapDataView data, |
| + SkBitmap* out) { |
| + // TODO: Ensure width and height are reasonable, eg. <= kMaxBitmapSize? |
| + *out = SkBitmap(); |
| + if (!out->tryAllocPixels(SkImageInfo::Make( |
| + data.width(), data.height(), MojoColorTypeToSk(data.color_type()), |
| + MojoAlphaTypeToSk(data.alpha_type()), |
| + MojoProfileTypeToSk(data.profile_type())))) { |
| + return false; |
| + } |
| + |
| + if (static_cast<uint32_t>(out->width()) != data.width() || |
| + static_cast<uint32_t>(out->height()) != data.height() || |
| + !out->getPixels()) { |
| + return false; |
| + } |
| + |
| + BitmapBuffer bitmap_buffer; |
| + bitmap_buffer.data = static_cast<uint8_t*>(out->getPixels()); |
| + bitmap_buffer.size = out->getSize(); |
| + return data.ReadPixelData(&bitmap_buffer); |
| +} |
| + |
| +} // namespace mojo |