summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderLayerBacking.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/rendering/RenderLayerBacking.cpp')
-rw-r--r--WebCore/rendering/RenderLayerBacking.cpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/WebCore/rendering/RenderLayerBacking.cpp b/WebCore/rendering/RenderLayerBacking.cpp
index e1cf2a2..421196b 100644
--- a/WebCore/rendering/RenderLayerBacking.cpp
+++ b/WebCore/rendering/RenderLayerBacking.cpp
@@ -28,13 +28,12 @@
#if USE(ACCELERATED_COMPOSITING)
#include "AnimationController.h"
-#if ENABLE(3D_CANVAS)
-#include "WebGLRenderingContext.h"
-#endif
+#include "CanvasRenderingContext.h"
#include "CSSPropertyNames.h"
#include "CSSStyleSelector.h"
#include "FrameView.h"
#include "GraphicsContext.h"
+#include "GraphicsContext3D.h"
#include "GraphicsLayer.h"
#include "HTMLCanvasElement.h"
#include "HTMLElement.h"
@@ -70,11 +69,14 @@ static bool hasBoxDecorationsOrBackground(const RenderObject*);
static bool hasBoxDecorationsOrBackgroundImage(const RenderStyle*);
static IntRect clipBox(RenderBox* renderer);
-static inline bool is3DCanvas(RenderObject* renderer)
+static inline bool isAcceleratedCanvas(RenderObject* renderer)
{
-#if ENABLE(3D_CANVAS)
- if (renderer->isCanvas())
- return static_cast<HTMLCanvasElement*>(renderer->node())->is3D();
+#if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
+ if (renderer->isCanvas()) {
+ HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer->node());
+ if (CanvasRenderingContext* context = canvas->renderingContext())
+ return context->isAccelerated();
+ }
#else
UNUSED_PARAM(renderer);
#endif
@@ -256,12 +258,13 @@ bool RenderLayerBacking::updateGraphicsLayerConfiguration()
m_graphicsLayer->setContentsToMedia(mediaElement->platformLayer());
}
#endif
-#if ENABLE(3D_CANVAS)
- else if (is3DCanvas(renderer())) {
+#if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
+ else if (isAcceleratedCanvas(renderer())) {
HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer()->node());
- WebGLRenderingContext* context = static_cast<WebGLRenderingContext*>(canvas->renderingContext());
- if (context->graphicsContext3D()->platformLayer())
- m_graphicsLayer->setContentsToWebGL(context->graphicsContext3D()->platformLayer());
+ if (CanvasRenderingContext* context = canvas->renderingContext())
+ if (context->graphicsContext3D())
+ if (PlatformLayer* pl = context->graphicsContext3D()->platformLayer())
+ m_graphicsLayer->setContentsToCanvas(pl);
}
#endif
@@ -772,8 +775,14 @@ bool RenderLayerBacking::containsPaintedContent() const
// FIXME: we could optimize cases where the image, video or canvas is known to fill the border box entirely,
// and set background color on the layer in that case, instead of allocating backing store and painting.
- if (renderer()->isVideo() || is3DCanvas(renderer()))
+#if ENABLE(VIDEO)
+ if (renderer()->isVideo() && toRenderVideo(renderer())->shouldDisplayVideo())
return hasBoxDecorationsOrBackground(renderer());
+#endif
+#if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
+ if (isAcceleratedCanvas(renderer()))
+ return hasBoxDecorationsOrBackground(renderer());
+#endif
return true;
}
@@ -793,8 +802,8 @@ void RenderLayerBacking::rendererContentChanged()
return;
}
-#if ENABLE(3D_CANVAS)
- if (is3DCanvas(renderer())) {
+#if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
+ if (isAcceleratedCanvas(renderer())) {
m_graphicsLayer->setContentsNeedsDisplay();
return;
}