summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp33
1 files changed, 23 insertions, 10 deletions
diff --git a/chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp b/chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp
index 96a06bbb5fd..41a29420906 100644
--- a/chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp
+++ b/chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp
@@ -28,8 +28,8 @@
#include "core/html/HTMLCanvasElement.h"
#include "core/html/canvas/CanvasRenderingContext.h"
-#include "core/frame/Frame.h"
#include "core/frame/FrameView.h"
+#include "core/frame/LocalFrame.h"
#include "core/page/Page.h"
#include "core/rendering/PaintInfo.h"
#include "core/rendering/RenderView.h"
@@ -44,13 +44,9 @@ RenderHTMLCanvas::RenderHTMLCanvas(HTMLCanvasElement* element)
view()->frameView()->setIsVisuallyNonEmpty();
}
-bool RenderHTMLCanvas::requiresLayer() const
+LayerType RenderHTMLCanvas::layerTypeRequired() const
{
- if (RenderReplaced::requiresLayer())
- return true;
-
- HTMLCanvasElement* canvas = toHTMLCanvasElement(node());
- return canvas && canvas->renderingContext() && canvas->renderingContext()->isAccelerated();
+ return NormalLayer;
}
void RenderHTMLCanvas::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
@@ -69,8 +65,13 @@ void RenderHTMLCanvas::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& pa
paintInfo.context->clip(pixelSnappedIntRect(contentRect));
}
- bool useLowQualityScale = style()->imageRendering() == ImageRenderingOptimizeContrast;
- toHTMLCanvasElement(node())->paint(context, paintRect, useLowQualityScale);
+ // FIXME: InterpolationNone should be used if ImageRenderingOptimizeContrast is set.
+ // See bug for more details: crbug.com/353716.
+ InterpolationQuality interpolationQuality = style()->imageRendering() == ImageRenderingOptimizeContrast ? InterpolationLow : CanvasDefaultInterpolationQuality;
+ InterpolationQuality previousInterpolationQuality = context->imageInterpolationQuality();
+ context->setImageInterpolationQuality(interpolationQuality);
+ toHTMLCanvasElement(node())->paint(context, paintRect);
+ context->setImageInterpolationQuality(previousInterpolationQuality);
if (clip)
context->restore();
@@ -99,7 +100,19 @@ void RenderHTMLCanvas::canvasSizeChanged()
return;
if (!selfNeedsLayout())
- setNeedsLayout();
+ setNeedsLayoutAndFullPaintInvalidation();
+}
+
+CompositingReasons RenderHTMLCanvas::additionalCompositingReasons(CompositingTriggerFlags triggers) const
+{
+ if (!(triggers & CanvasTrigger))
+ return CompositingReasonNone;
+
+ HTMLCanvasElement* canvas = toHTMLCanvasElement(node());
+ if (canvas->renderingContext() && canvas->renderingContext()->isAccelerated())
+ return CompositingReasonCanvas;
+
+ return CompositingReasonNone;
}
} // namespace WebCore