ThreadSafeCoordinatedSurface.cpp [plain text]
#include "config.h"
#if USE(COORDINATED_GRAPHICS)
#include "ThreadSafeCoordinatedSurface.h"
#include <WebCore/TextureMapperGL.h>
#include <wtf/StdLibExtras.h>
using namespace WebCore;
namespace WebKit {
Ref<ThreadSafeCoordinatedSurface> ThreadSafeCoordinatedSurface::create(const IntSize& size, CoordinatedSurface::Flags flags)
{
return adoptRef(*new ThreadSafeCoordinatedSurface(size, flags, ImageBuffer::create(size)));
}
Ref<ThreadSafeCoordinatedSurface> ThreadSafeCoordinatedSurface::create(const IntSize& size, CoordinatedSurface::Flags flags, std::unique_ptr<ImageBuffer> buffer)
{
return adoptRef(*new ThreadSafeCoordinatedSurface(size, flags, WTF::move(buffer)));
}
ThreadSafeCoordinatedSurface::ThreadSafeCoordinatedSurface(const IntSize& size, CoordinatedSurface::Flags flags, std::unique_ptr<ImageBuffer> buffer)
: CoordinatedSurface(size, flags)
, m_imageBuffer(WTF::move(buffer))
{
}
ThreadSafeCoordinatedSurface::~ThreadSafeCoordinatedSurface()
{
}
void ThreadSafeCoordinatedSurface::paintToSurface(const IntRect& rect, CoordinatedSurface::Client* client)
{
ASSERT(client);
GraphicsContext* context = beginPaint(rect);
client->paintToSurfaceContext(context);
endPaint();
}
GraphicsContext* ThreadSafeCoordinatedSurface::beginPaint(const IntRect& rect)
{
ASSERT(m_imageBuffer);
GraphicsContext* graphicsContext = m_imageBuffer->context();
graphicsContext->save();
graphicsContext->clip(rect);
graphicsContext->translate(rect.x(), rect.y());
return graphicsContext;
}
void ThreadSafeCoordinatedSurface::endPaint()
{
ASSERT(m_imageBuffer);
m_imageBuffer->context()->restore();
}
void ThreadSafeCoordinatedSurface::copyToTexture(PassRefPtr<BitmapTexture> passTexture, const IntRect& target, const IntPoint& sourceOffset)
{
RefPtr<BitmapTexture> texture(passTexture);
ASSERT(m_imageBuffer);
RefPtr<Image> image = m_imageBuffer->copyImage(DontCopyBackingStore);
texture->updateContents(image.get(), target, sourceOffset, BitmapTexture::UpdateCanModifyOriginalImageData);
}
}
#endif // USE(COORDINATED_GRAPHICS)