Index: src/core/SkRasterCanvasLayerAllocator.cpp |
diff --git a/src/core/SkRasterCanvasLayerAllocator.cpp b/src/core/SkRasterCanvasLayerAllocator.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b9c99efd919be22697c322878d429f8be040fcf7 |
--- /dev/null |
+++ b/src/core/SkRasterCanvasLayerAllocator.cpp |
@@ -0,0 +1,50 @@ |
+/* |
+ * Copyright 2016 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SkRasterCanvasLayerAllocator.h" |
+ |
+#include "SkBitmap.h" |
+#include "SkCanvas.h" |
+#include "SkManagedBitmapDevice.h" |
+ |
+SkRasterCanvasLayerAllocator::SkRasterCanvasLayerAllocator() { } |
+ |
+SkRasterCanvasLayerAllocator::~SkRasterCanvasLayerAllocator() { } |
+ |
+sk_sp<SkCanvas> SkRasterCanvasLayerAllocator::createCanvas(const SkImageInfo& info, |
+ const SkSurfaceProps& props, |
+ void* initialData) { |
+ SkBaseDevice* device = makeDevice(info, props, initialData); |
+ if (!device) { |
+ return nullptr; |
+ } |
+ return sk_make_sp<SkCanvas>(device, this); |
+} |
+ |
+ |
+SkBaseDevice* SkRasterCanvasLayerAllocator::makeDevice( |
+ const SkImageInfo& info, |
+ const SkSurfaceProps& props, |
+ void* initialData) { |
+ SkBitmap bitmap; |
+ size_t rowBytes; |
+ void (*deallocator)(void*) = nullptr; |
+ void* payload = nullptr; |
+ void* pixels = this->allocateLayer(info, &rowBytes, |
+ &deallocator, &payload, |
+ initialData); |
+ if (!pixels) { |
+ return nullptr; |
+ } |
+ if (!bitmap.installPixels(info, pixels, rowBytes)) { |
+ deallocator(payload); |
+ return nullptr; |
+ }; |
+ |
+ return new SkManagedBitmapDevice(bitmap, props, deallocator, payload); |
+} |
+ |