When outsetting for rect blur fast path use abs of scale factors.
Fixes an issue where negative scales caused an inset rather than an outset. Add GM. Bug: chromium:899512 Change-Id: I9164c76da479af80d4f5389b057ec52a946726fb Reviewed-on: https://skia-review.googlesource.com/c/171641 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
This commit is contained in:
parent
8f8995a042
commit
908bb23983
23
gm/crbug_899512.cpp
Normal file
23
gm/crbug_899512.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright 2018 Google Inc.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include "SkBlurMaskFilter.h"
|
||||
#include "SkCanvas.h"
|
||||
#include "SkColorFilter.h"
|
||||
#include "SkLayerDrawLooper.h"
|
||||
#include "gm.h"
|
||||
|
||||
DEF_SIMPLE_GM(crbug_899512, canvas, 520, 520) {
|
||||
// comment this line below to solve the problem
|
||||
SkMatrix matrix;
|
||||
matrix.setAll(-1, 0, 220, 0, 1, 0, 0, 0, 1);
|
||||
canvas->concat(matrix);
|
||||
SkPaint paint;
|
||||
paint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, 6.2735f, false));
|
||||
paint.setColorFilter(SkColorFilter::MakeModeFilter(SK_ColorBLACK, SkBlendMode::kSrcIn));
|
||||
canvas->drawRect(SkRect::MakeXYWH(0, 10, 200, 200), paint);
|
||||
}
|
@ -101,6 +101,7 @@ gm_sources = [
|
||||
"$_gm/crbug_884166.cpp",
|
||||
"$_gm/crbug_887103.cpp",
|
||||
"$_gm/crbug_892988.cpp",
|
||||
"$_gm/crbug_899512.cpp",
|
||||
"$_gm/croppedrects.cpp",
|
||||
"$_gm/crosscontextimage.cpp",
|
||||
"$_gm/cubicpaths.cpp",
|
||||
|
@ -783,8 +783,8 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context,
|
||||
// When we're ignoring the CTM the padding added to the source rect also needs to ignore
|
||||
// the CTM. The matrix passed in here is guaranteed to be just scale and translate so we
|
||||
// can just grab the X and Y scales off the matrix and pre-undo the scale.
|
||||
outsetX /= viewMatrix.getScaleX();
|
||||
outsetY /= viewMatrix.getScaleY();
|
||||
outsetX /= SkScalarAbs(viewMatrix.getScaleX());
|
||||
outsetY /= SkScalarAbs(viewMatrix.getScaleY());
|
||||
}
|
||||
srcProxyRect.outset(outsetX, outsetY);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user