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

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: Remove bad merge in virtual test suites Created 6 years, 1 month 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/BoxClipper.h"
10 #include "core/paint/DrawingRecorder.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(PaintInfo& paintInfo, const LayoutPoint& p aintOffset) 17 void HTMLCanvasPainter::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& p aintOffset)
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
24 bool clip = !contentRect.contains(paintRect); 26 OwnPtr<BoxClipper> boxClipper = adoptPtr(new BoxClipper(m_renderHTMLCanvas, paintInfo, paintOffset, SkipContentsClipIfPossible));
25 if (clip) {
26 // Not allowed to overflow the content box.
27 paintInfo.context->save();
28 paintInfo.context->clip(pixelSnappedIntRect(contentRect));
29 }
30 27
31 // FIXME: InterpolationNone should be used if ImageRenderingOptimizeContrast is set. 28 // FIXME: InterpolationNone should be used if ImageRenderingOptimizeContrast is set.
32 // See bug for more details: crbug.com/353716. 29 // See bug for more details: crbug.com/353716.
33 InterpolationQuality interpolationQuality = m_renderHTMLCanvas.style()->imag eRendering() == ImageRenderingOptimizeContrast ? InterpolationLow : CanvasDefaul tInterpolationQuality; 30 InterpolationQuality interpolationQuality = m_renderHTMLCanvas.style()->imag eRendering() == ImageRenderingOptimizeContrast ? InterpolationLow : CanvasDefaul tInterpolationQuality;
34 31
35 HTMLCanvasElement* canvas = toHTMLCanvasElement(m_renderHTMLCanvas.node()); 32 HTMLCanvasElement* canvas = toHTMLCanvasElement(m_renderHTMLCanvas.node());
36 LayoutSize layoutSize = contentRect.size(); 33 LayoutSize layoutSize = contentRect.size();
37 if (m_renderHTMLCanvas.style()->imageRendering() == ImageRenderingPixelated 34 if (m_renderHTMLCanvas.style()->imageRendering() == ImageRenderingPixelated
38 && (layoutSize.width() > canvas->width() || layoutSize.height() > canvas ->height() || layoutSize == canvas->size())) { 35 && (layoutSize.width() > canvas->width() || layoutSize.height() > canvas ->height() || layoutSize == canvas->size())) {
39 interpolationQuality = InterpolationNone; 36 interpolationQuality = InterpolationNone;
40 } 37 }
41 38
39 DrawingRecorder recorder(context, &m_renderHTMLCanvas, paintInfo.phase, pixe lSnappedIntRect(paintRect));
42 InterpolationQuality previousInterpolationQuality = context->imageInterpolat ionQuality(); 40 InterpolationQuality previousInterpolationQuality = context->imageInterpolat ionQuality();
43 context->setImageInterpolationQuality(interpolationQuality); 41 context->setImageInterpolationQuality(interpolationQuality);
44 canvas->paint(context, paintRect); 42 canvas->paint(context, paintRect);
45 context->setImageInterpolationQuality(previousInterpolationQuality); 43 context->setImageInterpolationQuality(previousInterpolationQuality);
46
47 if (clip)
48 context->restore();
49 } 44 }
50 45
51 } // namespace blink 46 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698