diff options
author | reveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 00:13:14 +0000 |
---|---|---|
committer | reveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 00:13:14 +0000 |
commit | 460505a5e3f8311f44130a72e796b5ba5607165e (patch) | |
tree | 1ec9ac433fb369f0e3ae6ac0835e0f6c288a1bf0 /skia/ext | |
parent | 329e14d519409ef3b98a445c5932900b87bd2989 (diff) | |
download | chromium_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.cc | 121 |
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 |