Move SkMatrixImageFilter into core, and add a factory fn for it.

BUG=skia:

Review URL: https://codereview.chromium.org/1011273003
This commit is contained in:
senorblanco 2015-03-20 06:38:17 -07:00 committed by Commit bot
parent 977b6f7e7b
commit 8c874eee94
14 changed files with 34 additions and 24 deletions

View File

@ -9,7 +9,6 @@
#include "SkBitmapSource.h"
#include "SkBlurImageFilter.h"
#include "SkDropShadowImageFilter.h"
#include "SkMatrixImageFilter.h"
#include "SkOffsetImageFilter.h"
#include "SkPictureImageFilter.h"
#include "SkPictureRecorder.h"
@ -93,8 +92,8 @@ static void create_paints(SkImageFilter* source, SkTArray<SkPaint>* paints) {
SkMatrix scale;
scale.setScale(2.0f, 2.0f);
SkAutoTUnref<SkMatrixImageFilter> scaleMIF(
SkMatrixImageFilter::Create(scale, kLow_SkFilterQuality, source));
SkAutoTUnref<SkImageFilter> scaleMIF(
SkImageFilter::CreateMatrixFilter(scale, kLow_SkFilterQuality, source));
add_paint(scaleMIF, paints);
}
@ -103,8 +102,8 @@ static void create_paints(SkImageFilter* source, SkTArray<SkPaint>* paints) {
SkMatrix rot;
rot.setRotate(-33.3f);
SkAutoTUnref<SkMatrixImageFilter> rotMIF(
SkMatrixImageFilter::Create(rot, kLow_SkFilterQuality, source));
SkAutoTUnref<SkImageFilter> rotMIF(
SkImageFilter::CreateMatrixFilter(rot, kLow_SkFilterQuality, source));
add_paint(rotMIF, paints);
}

View File

@ -12,7 +12,6 @@
#include "SkDisplacementMapEffect.h"
#include "SkDropShadowImageFilter.h"
#include "SkGradientShader.h"
#include "SkMatrixImageFilter.h"
#include "SkMorphologyImageFilter.h"
#include "SkOffsetImageFilter.h"
#include "SkPerlinNoiseShader.h"
@ -91,7 +90,7 @@ protected:
SkDilateImageFilter::Create(2, 2, checkerboard.get()),
SkErodeImageFilter::Create(2, 2, checkerboard.get()),
SkOffsetImageFilter::Create(SkIntToScalar(-16), SkIntToScalar(32)),
SkMatrixImageFilter::Create(resizeMatrix, kNone_SkFilterQuality),
SkImageFilter::CreateMatrixFilter(resizeMatrix, kNone_SkFilterQuality),
SkRectShaderImageFilter::Create(noise),
};

View File

@ -13,7 +13,6 @@
#include "SkDropShadowImageFilter.h"
#include "SkGradientShader.h"
#include "SkLightingImageFilter.h"
#include "SkMatrixImageFilter.h"
#include "SkMorphologyImageFilter.h"
#include "SkOffsetImageFilter.h"
#include "SkPerlinNoiseShader.h"
@ -100,7 +99,7 @@ protected:
SkDilateImageFilter::Create(1, 1, checkerboard.get()),
SkErodeImageFilter::Create(1, 1, checkerboard.get()),
SkOffsetImageFilter::Create(SkIntToScalar(32), 0),
SkMatrixImageFilter::Create(resizeMatrix, kNone_SkFilterQuality),
SkImageFilter::CreateMatrixFilter(resizeMatrix, kNone_SkFilterQuality),
SkRectShaderImageFilter::Create(noise),
SkLightingImageFilter::CreatePointLitDiffuse(pointLocation, white, surfaceScale, kd),
SkLightingImageFilter::CreateSpotLitDiffuse(spotLocation, spotTarget, spotExponent,

View File

@ -6,7 +6,7 @@
*/
#include "gm.h"
#include "SkMatrixImageFilter.h"
#include "SkImageFilter.h"
#include "SkRandom.h"
#define WIDTH 640
@ -36,7 +36,7 @@ protected:
SkMatrix matrix;
matrix.setScale(RESIZE_FACTOR, RESIZE_FACTOR);
SkAutoTUnref<SkImageFilter> imageFilter(
SkMatrixImageFilter::Create(matrix, kNone_SkFilterQuality));
SkImageFilter::CreateMatrixFilter(matrix, kNone_SkFilterQuality));
paint.setImageFilter(imageFilter.get());
const SkScalar tile_size = SkIntToScalar(100);
SkRect bounds;

View File

@ -7,7 +7,7 @@
#include "gm.h"
#include "SkColor.h"
#include "SkMatrixImageFilter.h"
#include "SkImageFilter.h"
namespace skiagm {
@ -25,7 +25,7 @@ protected:
void draw(SkCanvas* canvas, const SkRect& rect, const SkBitmap& bitmap,
const SkMatrix& matrix, SkFilterQuality filter) {
SkAutoTUnref<SkImageFilter> imageFilter(
SkMatrixImageFilter::Create(matrix, filter));
SkImageFilter::CreateMatrixFilter(matrix, filter));
SkPaint paint;
paint.setImageFilter(imageFilter.get());
canvas->saveLayer(&rect, &paint);

View File

@ -9,7 +9,6 @@
#include "SkBitmapDevice.h"
#include "SkBitmapSource.h"
#include "SkColor.h"
#include "SkMatrixImageFilter.h"
#include "SkRefCnt.h"
namespace skiagm {
@ -42,7 +41,7 @@ protected:
matrix.setScale(SkScalarInvert(deviceScaleX),
SkScalarInvert(deviceScaleY));
SkAutoTUnref<SkImageFilter> imageFilter(
SkMatrixImageFilter::Create(matrix, filterQuality, input));
SkImageFilter::CreateMatrixFilter(matrix, filterQuality, input));
SkPaint filteredPaint;
filteredPaint.setImageFilter(imageFilter.get());
canvas->saveLayer(&rect, &filteredPaint);

View File

@ -123,6 +123,7 @@
'<(skia_src_path)/core/SkMaskGamma.h',
'<(skia_src_path)/core/SkMath.cpp',
'<(skia_src_path)/core/SkMatrix.cpp',
'<(skia_src_path)/core/SkMatrixImageFilter.cpp',
'<(skia_src_path)/core/SkMessageBus.h',
'<(skia_src_path)/core/SkMetaData.cpp',
'<(skia_src_path)/core/SkMipMap.cpp',
@ -275,6 +276,7 @@
'<(skia_include_path)/core/SkMaskFilter.h',
'<(skia_include_path)/core/SkMath.h',
'<(skia_include_path)/core/SkMatrix.h',
'<(skia_include_path)/core/SkMatrixImageFilter.h',
'<(skia_include_path)/core/SkMetaData.h',
'<(skia_include_path)/core/SkMultiPictureDraw.h',
'<(skia_include_path)/core/SkOnce.h',

View File

@ -56,7 +56,6 @@
'<(skia_src_path)/effects/SkTableMaskFilter.cpp',
'<(skia_src_path)/effects/SkTestImageFilters.cpp',
'<(skia_src_path)/effects/SkTileImageFilter.cpp',
'<(skia_src_path)/effects/SkMatrixImageFilter.cpp',
'<(skia_src_path)/effects/SkTransparentShader.cpp',
'<(skia_src_path)/effects/SkXfermodeImageFilter.cpp',

View File

@ -8,6 +8,7 @@
#ifndef SkImageFilter_DEFINED
#define SkImageFilter_DEFINED
#include "SkFilterQuality.h"
#include "SkFlattenable.h"
#include "SkMatrix.h"
#include "SkRect.h"
@ -192,6 +193,13 @@ public:
// Default impl returns union of all input bounds.
virtual void computeFastBounds(const SkRect&, SkRect*) const;
/**
* Create an SkMatrixImageFilter, which transforms its input by the given matrix.
*/
static SkImageFilter* CreateMatrixFilter(const SkMatrix& matrix,
SkFilterQuality,
SkImageFilter* input = NULL);
#if SK_SUPPORT_GPU
/**
* Wrap the given texture in a texture-backed SkBitmap.

View File

@ -19,7 +19,6 @@
#include "SkFlattenableSerialization.h"
#include "SkLightingImageFilter.h"
#include "SkMagnifierImageFilter.h"
#include "SkMatrixImageFilter.h"
#include "SkMatrixConvolutionImageFilter.h"
#include "SkMergeImageFilter.h"
#include "SkMorphologyImageFilter.h"
@ -310,9 +309,9 @@ static SkImageFilter* make_image_filter(bool canBeNull = true) {
filter = SkOffsetImageFilter::Create(make_scalar(), make_scalar(), make_image_filter());
break;
case MATRIX:
filter = SkMatrixImageFilter::Create(make_matrix(),
(SkFilterQuality)R(4),
make_image_filter());
filter = SkImageFilter::CreateMatrixFilter(make_matrix(),
(SkFilterQuality)R(4),
make_image_filter());
break;
case MATRIX_CONVOLUTION:
{

View File

@ -11,6 +11,7 @@
#include "SkChecksum.h"
#include "SkDevice.h"
#include "SkLazyPtr.h"
#include "SkMatrixImageFilter.h"
#include "SkReadBuffer.h"
#include "SkWriteBuffer.h"
#include "SkRect.h"
@ -368,6 +369,12 @@ bool SkImageFilter::asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const
return false;
}
SkImageFilter* SkImageFilter::CreateMatrixFilter(const SkMatrix& matrix,
SkFilterQuality filterQuality,
SkImageFilter* input) {
return SkMatrixImageFilter::Create(matrix, filterQuality, input);
}
#if SK_SUPPORT_GPU
void SkImageFilter::WrapTexture(GrTexture* texture, int width, int height, SkBitmap* result) {

View File

@ -20,7 +20,6 @@
#include "SkGradientShader.h"
#include "SkLightingImageFilter.h"
#include "SkMatrixConvolutionImageFilter.h"
#include "SkMatrixImageFilter.h"
#include "SkMergeImageFilter.h"
#include "SkMorphologyImageFilter.h"
#include "SkOffsetImageFilter.h"
@ -470,7 +469,7 @@ DEF_TEST(ImageFilterDrawTiled, reporter) {
{ "erode", SkErodeImageFilter::Create(2, 3) },
{ "tile", SkTileImageFilter::Create(SkRect::MakeXYWH(0, 0, 50, 50),
SkRect::MakeXYWH(0, 0, 100, 100), NULL) },
{ "matrix", SkMatrixImageFilter::Create(matrix, kLow_SkFilterQuality) },
{ "matrix", SkImageFilter::CreateMatrixFilter(matrix, kLow_SkFilterQuality) },
{ "blur and offset", SkOffsetImageFilter::Create(five, five, blur.get()) },
{ "picture and blur", SkBlurImageFilter::Create(five, five, pictureFilter.get()) },
{ "rect shader and blur", SkBlurImageFilter::Create(five, five, rectShaderFilter.get()) },
@ -533,7 +532,7 @@ static void draw_saveLayer_picture(int width, int height, int tileSize,
SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(SK_ColorWHITE, SkXfermode::kSrc_Mode));
SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf.get()));
SkAutoTUnref<SkImageFilter> imageFilter(SkMatrixImageFilter::Create(matrix, kNone_SkFilterQuality, cfif.get()));
SkAutoTUnref<SkImageFilter> imageFilter(SkImageFilter::CreateMatrixFilter(matrix, kNone_SkFilterQuality, cfif.get()));
SkPaint paint;
paint.setImageFilter(imageFilter.get());
@ -1076,7 +1075,7 @@ DEF_TEST(ImageFilterNestedSaveLayer, reporter) {
matrix.setScale(SkIntToScalar(2), SkIntToScalar(2));
matrix.postTranslate(SkIntToScalar(-20), SkIntToScalar(-20));
SkAutoTUnref<SkImageFilter> matrixFilter(
SkMatrixImageFilter::Create(matrix, kLow_SkFilterQuality));
SkImageFilter::CreateMatrixFilter(matrix, kLow_SkFilterQuality));
// Test that saveLayer() with a filter nested inside another saveLayer() applies the
// correct offset to the filter matrix.