| Index: third_party/WebKit/Source/modules/offscreencanvas/OffscreenCanvas.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.cpp b/third_party/WebKit/Source/modules/offscreencanvas/OffscreenCanvas.cpp
|
| similarity index 21%
|
| rename from third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.cpp
|
| rename to third_party/WebKit/Source/modules/offscreencanvas/OffscreenCanvas.cpp
|
| index c227f47b8ebb341cdb2628e2f5ab8eab2e1c1dfe..1a00c5b7d8fd715632282ad437351edcc7c04d80 100644
|
| --- a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.cpp
|
| +++ b/third_party/WebKit/Source/modules/offscreencanvas/OffscreenCanvas.cpp
|
| @@ -2,8 +2,12 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "core/html/canvas/OffscreenCanvas.h"
|
| +#include "modules/offscreencanvas/OffscreenCanvas.h"
|
|
|
| +#include "core/html/canvas/CanvasContextCreationAttributes.h"
|
| +#include "modules/offscreencanvas/OffscreenCanvasRenderingContext.h"
|
| +#include "modules/offscreencanvas/OffscreenCanvasRenderingContextFactory.h"
|
| +#include "modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h"
|
| #include "wtf/MathExtras.h"
|
|
|
| namespace blink {
|
| @@ -28,8 +32,64 @@ OffscreenCanvas::OffscreenCanvas(const IntSize& size)
|
| {
|
| }
|
|
|
| +OffscreenCanvasRenderingContext2D* OffscreenCanvas::getContext(const String& id, const CanvasContextCreationAttributes& attributes)
|
| +{
|
| + OffscreenCanvasRenderingContext::ContextType contextType = OffscreenCanvasRenderingContext::contextTypeFromId(id);
|
| +
|
| + // Unknown type.
|
| + if (contextType == OffscreenCanvasRenderingContext::ContextTypeCount)
|
| + return nullptr;
|
| +
|
| + OffscreenCanvasRenderingContextFactory* factory = getRenderingContextFactory(contextType);
|
| + if (!factory)
|
| + return nullptr;
|
| +
|
| + if (m_context) {
|
| + if (m_context->contextType() != contextType) {
|
| + factory->onError(this, "OffscreenCanvas has an existing context of a different type");
|
| + return nullptr;
|
| + }
|
| + } else {
|
| + m_context = factory->create(this, attributes);
|
| + }
|
| +
|
| + // TODO: When there're more than one context type implemented in the future,
|
| + // the return type here should be changed to base class of all Offscreen
|
| + // context types.
|
| + return static_cast<OffscreenCanvasRenderingContext2D*>(m_context.get());
|
| +}
|
| +
|
| +OffscreenCanvasRenderingContext2D* OffscreenCanvas::renderingContext() const
|
| +{
|
| + // TODO: When there're more than one context type implemented in the future,
|
| + // the return type here should be changed to base class of all Offscreen
|
| + // context types.
|
| + return static_cast<OffscreenCanvasRenderingContext2D*>(m_context.get());
|
| +}
|
| +
|
| +OffscreenCanvas::ContextFactoryVector& OffscreenCanvas::renderingContextFactories()
|
| +{
|
| + DEFINE_STATIC_LOCAL(ContextFactoryVector, s_contextFactories, (OffscreenCanvasRenderingContext::ContextTypeCount));
|
| + return s_contextFactories;
|
| +}
|
| +
|
| +OffscreenCanvasRenderingContextFactory* OffscreenCanvas::getRenderingContextFactory(int type)
|
| +{
|
| + ASSERT(type < OffscreenCanvasRenderingContext::ContextTypeCount);
|
| + return renderingContextFactories()[type].get();
|
| +}
|
| +
|
| +void OffscreenCanvas::registerRenderingContextFactory(PassOwnPtr<OffscreenCanvasRenderingContextFactory> renderingContextFactory)
|
| +{
|
| + OffscreenCanvasRenderingContext::ContextType type = renderingContextFactory->contextType();
|
| + ASSERT(type < OffscreenCanvasRenderingContext::ContextTypeCount);
|
| + ASSERT(!renderingContextFactories()[type]);
|
| + renderingContextFactories()[type] = renderingContextFactory;
|
| +}
|
| +
|
| DEFINE_TRACE(OffscreenCanvas)
|
| {
|
| + visitor->trace(m_context);
|
| }
|
|
|
| } // namespace blink
|
|
|