Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(498)

Unified Diff: skia/public/interfaces/bitmap_skbitmap_struct_traits.cc

Issue 2014013002: Add SkBitmap StructTraits for skia::mojo::Bitmap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync and rebase. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/public/interfaces/bitmap_skbitmap_struct_traits.h ('k') | skia/public/interfaces/skbitmap.typemap » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..7d19bb6715d2cac0d268ae8e3139f16727659060
--- /dev/null
+++ b/skia/public/interfaces/bitmap_skbitmap_struct_traits.cc
@@ -0,0 +1,242 @@
+// 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
+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
+bool StructTraits<skia::mojom::Bitmap, SkBitmap>::IsNull(const SkBitmap& b) {
+ return b.isNull();
+}
+
+// static
+void StructTraits<skia::mojom::Bitmap, SkBitmap>::SetToNull(SkBitmap* b) {
+ b->reset();
+}
+
+// static
+skia::mojom::ColorType StructTraits<skia::mojom::Bitmap, SkBitmap>::color_type(
+ const SkBitmap& b) {
+ return SkColorTypeToMojo(b.colorType());
+}
+
+// static
+skia::mojom::AlphaType StructTraits<skia::mojom::Bitmap, SkBitmap>::alpha_type(
+ const SkBitmap& b) {
+ return SkAlphaTypeToMojo(b.alphaType());
+}
+
+// static
+skia::mojom::ColorProfileType
+StructTraits<skia::mojom::Bitmap, SkBitmap>::profile_type(const SkBitmap& b) {
+ return SkProfileTypeToMojo(b.profileType());
+}
+
+// static
+uint32_t StructTraits<skia::mojom::Bitmap, SkBitmap>::width(const SkBitmap& b) {
+ return b.width() < 0 ? 0 : static_cast<uint32_t>(b.width());
+}
+
+// static
+uint32_t StructTraits<skia::mojom::Bitmap, SkBitmap>::height(
+ const SkBitmap& b) {
+ return b.height() < 0 ? 0 : static_cast<uint32_t>(b.height());
+}
+
+// static
+BitmapBuffer StructTraits<skia::mojom::Bitmap, SkBitmap>::pixel_data(
+ const SkBitmap& b) {
+ BitmapBuffer bitmap_buffer;
+ bitmap_buffer.data = static_cast<uint8_t*>(b.getPixels());
+ bitmap_buffer.size = b.getSize();
+ return bitmap_buffer;
+}
+
+// static
+bool StructTraits<skia::mojom::Bitmap, SkBitmap>::Read(
+ skia::mojom::BitmapDataView data,
+ SkBitmap* b) {
+ // TODO: Ensure width and height are reasonable, eg. <= kMaxBitmapSize?
+ *b = SkBitmap();
+ if (!b->tryAllocPixels(SkImageInfo::Make(
+ data.width(), data.height(), MojoColorTypeToSk(data.color_type()),
+ MojoAlphaTypeToSk(data.alpha_type()),
+ MojoProfileTypeToSk(data.profile_type())))) {
+ return false;
+ }
+
+ // If the image is empty, return success after setting the image info.
+ if (data.width() == 0 || data.height() == 0)
+ return true;
+
+ SkAutoPixmapUnlock pixmap;
+ if (static_cast<uint32_t>(b->width()) != data.width() ||
+ static_cast<uint32_t>(b->height()) != data.height() ||
+ !b->requestLock(&pixmap) || !b->lockPixelsAreWritable() ||
+ !b->readyToDraw()) {
+ return false;
+ }
+
+ BitmapBuffer bitmap_buffer;
+ bitmap_buffer.data = static_cast<uint8_t*>(b->getPixels());
+ bitmap_buffer.size = b->getSize();
+ if (!data.ReadPixelData(&bitmap_buffer))
+ return false;
+
+ b->notifyPixelsChanged();
+ return true;
+}
+
+// static
+void* StructTraits<skia::mojom::Bitmap, SkBitmap>::SetUpContext(
+ const SkBitmap& b) {
+ b.lockPixels();
+ return nullptr;
+}
+
+// static
+void StructTraits<skia::mojom::Bitmap, SkBitmap>::TearDownContext(
+ const SkBitmap& b,
+ void* context) {
+ b.unlockPixels();
+}
+
+} // namespace mojo
« no previous file with comments | « skia/public/interfaces/bitmap_skbitmap_struct_traits.h ('k') | skia/public/interfaces/skbitmap.typemap » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698