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

Side by Side Diff: third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp

Issue 2157953002: Change filter quality when scaling-down in drawImage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update test expectation Created 4 years, 5 months 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
« no previous file with comments | « third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-imageSmoothingQuality-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "modules/canvas2d/BaseRenderingContext2D.h" 5 #include "modules/canvas2d/BaseRenderingContext2D.h"
6 6
7 #include "bindings/core/v8/ExceptionMessages.h" 7 #include "bindings/core/v8/ExceptionMessages.h"
8 #include "bindings/core/v8/ExceptionState.h" 8 #include "bindings/core/v8/ExceptionState.h"
9 #include "bindings/core/v8/ExceptionStatePlaceholder.h" 9 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
10 #include "core/css/parser/CSSParser.h" 10 #include "core/css/parser/CSSParser.h"
(...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 // discouraged. Always drawing with AA can negatively impact performance 934 // discouraged. Always drawing with AA can negatively impact performance
935 // though - that's why it's not always on. 935 // though - that's why it's not always on.
936 SkScalar widthExpansion, heightExpansion; 936 SkScalar widthExpansion, heightExpansion;
937 if (ctm.getType() & SkMatrix::kAffine_Mask) 937 if (ctm.getType() & SkMatrix::kAffine_Mask)
938 widthExpansion = ctm[SkMatrix::kMSkewY], heightExpansion = ctm[SkMatrix: :kMSkewX]; 938 widthExpansion = ctm[SkMatrix::kMSkewY], heightExpansion = ctm[SkMatrix: :kMSkewX];
939 else 939 else
940 widthExpansion = ctm[SkMatrix::kMScaleX], heightExpansion = ctm[SkMatrix ::kMScaleY]; 940 widthExpansion = ctm[SkMatrix::kMScaleX], heightExpansion = ctm[SkMatrix ::kMScaleY];
941 return destRect.width() * fabs(widthExpansion) < 1 || destRect.height() * fa bs(heightExpansion) < 1; 941 return destRect.width() * fabs(widthExpansion) < 1 || destRect.height() * fa bs(heightExpansion) < 1;
942 } 942 }
943 943
944 static bool isDrawScalingDown(const FloatRect& srcRect, const FloatRect& dstRect , float xScaleSquared, float yScaleSquared)
945 {
946 return dstRect.width() * dstRect.width() * xScaleSquared < srcRect.width() * srcRect.width()
947 && dstRect.height() * dstRect.height() * yScaleSquared < srcRect.height( ) * srcRect.height();
948 }
949
944 void BaseRenderingContext2D::drawImageInternal(SkCanvas* c, CanvasImageSource* i mageSource, Image* image, const FloatRect& srcRect, const FloatRect& dstRect, co nst SkPaint* paint) 950 void BaseRenderingContext2D::drawImageInternal(SkCanvas* c, CanvasImageSource* i mageSource, Image* image, const FloatRect& srcRect, const FloatRect& dstRect, co nst SkPaint* paint)
945 { 951 {
946 trackDrawCall(DrawImage); 952 trackDrawCall(DrawImage);
947 953
948 int initialSaveCount = c->getSaveCount(); 954 int initialSaveCount = c->getSaveCount();
949 SkPaint imagePaint = *paint; 955 SkPaint imagePaint = *paint;
950 956
951 if (paint->getImageFilter()) { 957 if (paint->getImageFilter()) {
952 SkMatrix ctm = c->getTotalMatrix(); 958 SkMatrix ctm = c->getTotalMatrix();
953 SkMatrix invCtm; 959 SkMatrix invCtm;
(...skipping 11 matching lines...) Expand all
965 SkPaint layerPaint; 971 SkPaint layerPaint;
966 layerPaint.setXfermode(sk_ref_sp(paint->getXfermode())); 972 layerPaint.setXfermode(sk_ref_sp(paint->getXfermode()));
967 layerPaint.setImageFilter(paint->getImageFilter()); 973 layerPaint.setImageFilter(paint->getImageFilter());
968 974
969 c->saveLayer(&bounds, &layerPaint); 975 c->saveLayer(&bounds, &layerPaint);
970 c->concat(ctm); 976 c->concat(ctm);
971 imagePaint.setXfermodeMode(SkXfermode::kSrcOver_Mode); 977 imagePaint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
972 imagePaint.setImageFilter(nullptr); 978 imagePaint.setImageFilter(nullptr);
973 } 979 }
974 980
981 if (!imageSmoothingEnabled() && isDrawScalingDown(srcRect, dstRect, state(). transform().xScaleSquared(), state().transform().yScaleSquared()))
982 imagePaint.setFilterQuality(kLow_SkFilterQuality);
983
975 if (!imageSource->isVideoElement()) { 984 if (!imageSource->isVideoElement()) {
976 imagePaint.setAntiAlias(shouldDrawImageAntialiased(dstRect)); 985 imagePaint.setAntiAlias(shouldDrawImageAntialiased(dstRect));
977 image->draw(c, imagePaint, dstRect, srcRect, DoNotRespectImageOrientatio n, Image::DoNotClampImageToSourceRect); 986 image->draw(c, imagePaint, dstRect, srcRect, DoNotRespectImageOrientatio n, Image::DoNotClampImageToSourceRect);
978 } else { 987 } else {
979 c->save(); 988 c->save();
980 c->clipRect(dstRect); 989 c->clipRect(dstRect);
981 c->translate(dstRect.x(), dstRect.y()); 990 c->translate(dstRect.x(), dstRect.y());
982 c->scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRect.h eight()); 991 c->scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRect.h eight());
983 c->translate(-srcRect.x(), -srcRect.y()); 992 c->translate(-srcRect.x(), -srcRect.y());
984 HTMLVideoElement* video = static_cast<HTMLVideoElement*>(imageSource); 993 HTMLVideoElement* video = static_cast<HTMLVideoElement*>(imageSource);
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 numPatterns(0), 1588 numPatterns(0),
1580 numDrawWithComplexClips(0), 1589 numDrawWithComplexClips(0),
1581 numBlurredShadows(0), 1590 numBlurredShadows(0),
1582 numFilters(0), 1591 numFilters(0),
1583 numGetImageDataCalls(0), 1592 numGetImageDataCalls(0),
1584 numPutImageDataCalls(0), 1593 numPutImageDataCalls(0),
1585 numClearRectCalls(0), 1594 numClearRectCalls(0),
1586 numDrawFocusCalls(0) {} 1595 numDrawFocusCalls(0) {}
1587 1596
1588 } // namespace blink 1597 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-imageSmoothingQuality-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698