summaryrefslogtreecommitdiffstats
path: root/skia/ext
diff options
context:
space:
mode:
authorreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-23 00:13:14 +0000
committerreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-23 00:13:14 +0000
commit460505a5e3f8311f44130a72e796b5ba5607165e (patch)
tree1ec9ac433fb369f0e3ae6ac0835e0f6c288a1bf0 /skia/ext
parent329e14d519409ef3b98a445c5932900b87bd2989 (diff)
downloadchromium_src-460505a5e3f8311f44130a72e796b5ba5607165e.zip
chromium_src-460505a5e3f8311f44130a72e796b5ba5607165e.tar.gz
chromium_src-460505a5e3f8311f44130a72e796b5ba5607165e.tar.bz2
aura: Use platform independent canvas by default.
BUG=111587 TEST=none Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=128039 Review URL: http://codereview.chromium.org/9722032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128354 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/ext')
-rw-r--r--skia/ext/platform_canvas_skia.cc121
1 files changed, 121 insertions, 0 deletions
diff --git a/skia/ext/platform_canvas_skia.cc b/skia/ext/platform_canvas_skia.cc
new file mode 100644
index 0000000..258f119
--- /dev/null
+++ b/skia/ext/platform_canvas_skia.cc
@@ -0,0 +1,121 @@
+// Copyright (c) 2012 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/ext/platform_canvas.h"
+
+#include "base/debug/trace_event.h"
+#include "skia/ext/bitmap_platform_device.h"
+
+// TODO(reveman): a lot of unnecessary duplication of code from
+// platform_canvas_[win|linux|mac].cc in here. Need to refactor
+// PlatformCanvas to avoid this:
+// http://code.google.com/p/chromium/issues/detail?id=119555
+
+namespace skia {
+
+PlatformCanvas::PlatformCanvas(int width, int height, bool is_opaque) {
+ TRACE_EVENT2("skia", "PlatformCanvas::PlatformCanvas",
+ "width", width, "height", height);
+ if (!initialize(width, height, is_opaque))
+ SK_CRASH();
+}
+
+#if defined(WIN32)
+PlatformCanvas::PlatformCanvas(int width,
+ int height,
+ bool is_opaque,
+ HANDLE shared_section) {
+ TRACE_EVENT2("skia", "PlatformCanvas::PlatformCanvas",
+ "width", width, "height", height);
+ if (!initialize(width, height, is_opaque, shared_section))
+ SK_CRASH();
+}
+#elif defined(__APPLE__)
+PlatformCanvas::PlatformCanvas(int width, int height, bool is_opaque,
+ uint8_t* data) {
+ TRACE_EVENT2("skia", "PlatformCanvas::PlatformCanvas",
+ "width", width, "height", height);
+ if (!initialize(width, height, is_opaque, data))
+ SK_CRASH();
+}
+PlatformCanvas::PlatformCanvas(int width,
+ int height,
+ bool is_opaque,
+ CGContextRef context) {
+ TRACE_EVENT2("skia", "PlatformCanvas::PlatformCanvas",
+ "width", width, "height", height);
+ if (!initialize(context, width, height, is_opaque))
+ SK_CRASH();
+}
+#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
+ defined(__sun) || defined(ANDROID)
+PlatformCanvas::PlatformCanvas(int width, int height, bool is_opaque,
+ uint8_t* data) {
+ TRACE_EVENT2("skia", "PlatformCanvas::PlatformCanvas",
+ "width", width, "height", height);
+ if (!initialize(width, height, is_opaque, data))
+ SK_CRASH();
+}
+#endif
+
+PlatformCanvas::~PlatformCanvas() {
+}
+
+#if defined(WIN32)
+bool PlatformCanvas::initialize(int width,
+ int height,
+ bool is_opaque,
+ HANDLE shared_section) {
+ // Use platform specific device for shared_section.
+ if (shared_section) {
+ if (initializeWithDevice(BitmapPlatformDevice::Create(width,
+ height,
+ is_opaque,
+ shared_section)))
+ return true;
+
+ // TODO(reveman): move the failure investigation from
+ // platform_canvas_win.cc to bitmap_platform_device_win.cc.
+ return false;
+ }
+
+ return initializeWithDevice(new SkDevice(
+ SkBitmap::kARGB_8888_Config, width, height, is_opaque));
+}
+#elif defined(__APPLE__)
+bool PlatformCanvas::initialize(int width,
+ int height,
+ bool is_opaque,
+ uint8_t* data) {
+ // Use platform specific device for data.
+ if (data)
+ return initializeWithDevice(BitmapPlatformDevice::CreateWithData(
+ data, width, height, is_opaque));
+
+ return initializeWithDevice(new SkDevice(
+ SkBitmap::kARGB_8888_Config, width, height, is_opaque));
+}
+
+bool PlatformCanvas::initialize(CGContextRef context,
+ int width,
+ int height,
+ bool is_opaque) {
+ return initializeWithDevice(BitmapPlatformDevice::Create(
+ context, width, height, is_opaque));
+}
+#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
+ defined(__sun) || defined(ANDROID)
+bool PlatformCanvas::initialize(int width, int height, bool is_opaque,
+ uint8_t* data) {
+ // Use platform specific device for data.
+ if (data)
+ return initializeWithDevice(BitmapPlatformDevice::Create(
+ width, height, is_opaque, data));
+
+ return initializeWithDevice(new SkDevice(
+ SkBitmap::kARGB_8888_Config, width, height, is_opaque));
+}
+#endif
+
+} // namespace skia