PlatformCanvas.cpp [plain text]
#include "config.h"
#include "PlatformCanvas.h"
#include "GraphicsContext.h"
#include "NativeImageSkia.h"
#include "PlatformContextSkia.h"
#include "SkColorPriv.h"
#include "skia/ext/platform_canvas.h"
namespace WebCore {
PlatformCanvas::PlatformCanvas()
: m_opaque(false)
{
}
PlatformCanvas::~PlatformCanvas()
{
}
void PlatformCanvas::resize(const IntSize& size)
{
if (m_size == size)
return;
m_size = size;
createBackingCanvas();
}
void PlatformCanvas::setOpaque(bool opaque)
{
if (opaque == m_opaque)
return;
m_opaque = opaque;
createBackingCanvas();
}
void PlatformCanvas::createBackingCanvas()
{
if (m_size.isEmpty())
return;
m_skiaCanvas = adoptPtr(skia::CreateBitmapCanvas(m_size.width(), m_size.height(), m_opaque));
}
PlatformCanvas::AutoLocker::AutoLocker(PlatformCanvas* canvas)
: m_canvas(canvas)
{
if (m_canvas->m_skiaCanvas) {
m_bitmap = &m_canvas->m_skiaCanvas->getDevice()->accessBitmap(false);
m_bitmap->lockPixels();
} else
m_bitmap = 0;
}
PlatformCanvas::AutoLocker::~AutoLocker()
{
if (m_bitmap)
m_bitmap->unlockPixels();
}
const uint8_t* PlatformCanvas::AutoLocker::pixels() const
{
if (m_bitmap && m_bitmap->config() == SkBitmap::kARGB_8888_Config)
return static_cast<const uint8_t*>(m_bitmap->getPixels());
return 0;
}
PlatformCanvas::Painter::Painter(PlatformCanvas* canvas, PlatformCanvas::Painter::TextOption option)
{
m_skiaContext = adoptPtr(new PlatformContextSkia(canvas->m_skiaCanvas.get()));
m_skiaContext->setDrawingToImageBuffer(option == GrayscaleText);
m_context = adoptPtr(new GraphicsContext(reinterpret_cast<PlatformGraphicsContext*>(m_skiaContext.get())));
context()->save();
}
PlatformCanvas::Painter::~Painter()
{
context()->restore();
}
}