Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: Source/core/paint/HTMLCanvasPainter.cpp

Issue 744163002: Enable fast/images with slimming paint (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix VirtualTestSuites. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/paint/HTMLCanvasPainter.h" 6 #include "core/paint/HTMLCanvasPainter.h"
7 7
8 #include "core/html/HTMLCanvasElement.h" 8 #include "core/html/HTMLCanvasElement.h"
9 #include "core/paint/DrawingRecorder.h"
10 #include "core/paint/HTMLCanvasClipper.h"
9 #include "core/rendering/PaintInfo.h" 11 #include "core/rendering/PaintInfo.h"
10 #include "core/rendering/RenderHTMLCanvas.h" 12 #include "core/rendering/RenderHTMLCanvas.h"
11 #include "platform/geometry/LayoutPoint.h" 13 #include "platform/geometry/LayoutPoint.h"
12 14
13 namespace blink { 15 namespace blink {
14 16
15 void HTMLCanvasPainter::paintReplaced(const PaintInfo& paintInfo, const LayoutPo int& paintOffset) 17 void HTMLCanvasPainter::paintReplaced(const PaintInfo& paintInfo, const LayoutPo int& paintOffset)
16 { 18 {
17 GraphicsContext* context = paintInfo.context; 19 GraphicsContext* context = paintInfo.context;
18 20
19 LayoutRect contentRect = m_renderHTMLCanvas.contentBoxRect(); 21 LayoutRect contentRect = m_renderHTMLCanvas.contentBoxRect();
20 contentRect.moveBy(paintOffset); 22 contentRect.moveBy(paintOffset);
21 LayoutRect paintRect = m_renderHTMLCanvas.replacedContentRect(); 23 LayoutRect paintRect = m_renderHTMLCanvas.replacedContentRect();
22 paintRect.moveBy(paintOffset); 24 paintRect.moveBy(paintOffset);
23 25
26 PaintInfo localPaintInfo(paintInfo);
27 OwnPtr<HTMLCanvasClipper> clipRecorder;
24 bool clip = !contentRect.contains(paintRect); 28 bool clip = !contentRect.contains(paintRect);
25 if (clip) { 29 if (clip)
26 // Not allowed to overflow the content box. 30 clipRecorder = adoptPtr(new HTMLCanvasClipper(m_renderHTMLCanvas, paintI nfo, contentRect));
27 paintInfo.context->save();
28 paintInfo.context->clip(pixelSnappedIntRect(contentRect));
29 }
30 31
31 // FIXME: InterpolationNone should be used if ImageRenderingOptimizeContrast is set. 32 // FIXME: InterpolationNone should be used if ImageRenderingOptimizeContrast is set.
32 // See bug for more details: crbug.com/353716. 33 // See bug for more details: crbug.com/353716.
33 InterpolationQuality interpolationQuality = m_renderHTMLCanvas.style()->imag eRendering() == ImageRenderingOptimizeContrast ? InterpolationLow : CanvasDefaul tInterpolationQuality; 34 InterpolationQuality interpolationQuality = m_renderHTMLCanvas.style()->imag eRendering() == ImageRenderingOptimizeContrast ? InterpolationLow : CanvasDefaul tInterpolationQuality;
34 35
35 HTMLCanvasElement* canvas = toHTMLCanvasElement(m_renderHTMLCanvas.node()); 36 HTMLCanvasElement* canvas = toHTMLCanvasElement(m_renderHTMLCanvas.node());
36 LayoutSize layoutSize = contentRect.size(); 37 LayoutSize layoutSize = contentRect.size();
37 if (m_renderHTMLCanvas.style()->imageRendering() == ImageRenderingPixelated 38 if (m_renderHTMLCanvas.style()->imageRendering() == ImageRenderingPixelated
38 && (layoutSize.width() > canvas->width() || layoutSize.height() > canvas ->height() || layoutSize == canvas->size())) { 39 && (layoutSize.width() > canvas->width() || layoutSize.height() > canvas ->height() || layoutSize == canvas->size())) {
39 interpolationQuality = InterpolationNone; 40 interpolationQuality = InterpolationNone;
40 } 41 }
41 42
43 DrawingRecorder recorder(context, &m_renderHTMLCanvas, localPaintInfo.phase, pixelSnappedIntRect(paintRect));
42 InterpolationQuality previousInterpolationQuality = context->imageInterpolat ionQuality(); 44 InterpolationQuality previousInterpolationQuality = context->imageInterpolat ionQuality();
43 context->setImageInterpolationQuality(interpolationQuality); 45 context->setImageInterpolationQuality(interpolationQuality);
44 canvas->paint(context, paintRect); 46 canvas->paint(context, paintRect);
45 context->setImageInterpolationQuality(previousInterpolationQuality); 47 context->setImageInterpolationQuality(previousInterpolationQuality);
46
47 if (clip)
48 context->restore();
49 } 48 }
50 49
51 } // namespace blink 50 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698