summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-24 11:24:40 +0100
committerBen Murdoch <benm@google.com>2011-06-02 09:53:15 +0100
commit81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch)
tree7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp
parent94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff)
downloadexternal_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp')
-rw-r--r--Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp b/Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp
new file mode 100644
index 0000000..29589f4
--- /dev/null
+++ b/Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "PlatformCanvas.h"
+
+#include "GraphicsContext.h"
+
+#if USE(SKIA)
+#include "NativeImageSkia.h"
+#include "PlatformContextSkia.h"
+#include "SkColorPriv.h"
+#include "skia/ext/platform_canvas.h"
+#elif PLATFORM(CG)
+#include <CoreGraphics/CGBitmapContext.h>
+#endif
+
+namespace WebCore {
+
+PlatformCanvas::PlatformCanvas()
+{
+}
+
+PlatformCanvas::~PlatformCanvas()
+{
+}
+
+void PlatformCanvas::resize(const IntSize& size)
+{
+ m_size = size;
+#if USE(SKIA)
+ m_skiaCanvas = new skia::PlatformCanvas(size.width(), size.height(), false);
+#elif PLATFORM(CG)
+ size_t bufferSize = size.width() * size.height() * 4;
+ m_pixelData = adoptArrayPtr(new uint8_t[bufferSize]);
+ memset(m_pixelData.get(), 0, bufferSize);
+#endif
+}
+
+PlatformCanvas::AutoLocker::AutoLocker(PlatformCanvas* canvas)
+ : m_canvas(canvas)
+ , m_pixels(0)
+{
+#if USE(SKIA)
+ if (m_canvas->m_skiaCanvas) {
+ m_bitmap = &m_canvas->m_skiaCanvas->getDevice()->accessBitmap(false);
+ m_bitmap->lockPixels();
+
+ if (m_bitmap->config() == SkBitmap::kARGB_8888_Config)
+ m_pixels = static_cast<uint8_t*>(m_bitmap->getPixels());
+ } else
+ m_bitmap = 0;
+#elif PLATFORM(CG)
+ m_pixels = &canvas->m_pixelData[0];
+#endif
+}
+
+PlatformCanvas::AutoLocker::~AutoLocker()
+{
+#if USE(SKIA)
+ if (m_bitmap)
+ m_bitmap->unlockPixels();
+#endif
+}
+
+PlatformCanvas::Painter::Painter(PlatformCanvas* canvas)
+{
+#if USE(SKIA)
+ m_skiaContext = adoptPtr(new PlatformContextSkia(canvas->m_skiaCanvas.get()));
+
+ // This is needed to get text to show up correctly.
+ m_skiaContext->setDrawingToImageBuffer(true);
+
+ m_context = adoptPtr(new GraphicsContext(reinterpret_cast<PlatformGraphicsContext*>(m_skiaContext.get())));
+#elif PLATFORM(CG)
+
+ m_colorSpace = CGColorSpaceCreateDeviceRGB();
+ size_t rowBytes = canvas->size().width() * 4;
+ m_contextCG = CGBitmapContextCreate(canvas->m_pixelData.get(),
+ canvas->size().width(), canvas->size().height(), 8, rowBytes,
+ m_colorSpace.get(),
+ kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host);
+ CGContextTranslateCTM(m_contextCG.get(), 0, canvas->size().height());
+ CGContextScaleCTM(m_contextCG.get(), 1, -1);
+ m_context = adoptPtr(new GraphicsContext(m_contextCG.get()));
+#endif
+}
+
+PlatformCanvas::Painter::~Painter()
+{
+}
+
+} // namespace WebCore