diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/rendering/RenderHTMLCanvas.cpp | 33 |
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 |