From: fmalita Date: Wed, 19 Nov 2014 17:23:22 +0000 (-0800) Subject: Add an image filter row to GM:lcdtextprops X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~4798 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=65d79cefe2452288228ec53fe0b7153934b0f9a3;p=platform%2Fupstream%2FlibSkiaSharp.git Add an image filter row to GM:lcdtextprops We should be disabling LCD text when rendering image filters, but currently don't. Add a GM to capture this behavior. R=reed@google.com Review URL: https://codereview.chromium.org/741433003 --- diff --git a/gm/lcdtext.cpp b/gm/lcdtext.cpp index 3fe9fa2..a6e31bc 100644 --- a/gm/lcdtext.cpp +++ b/gm/lcdtext.cpp @@ -11,6 +11,11 @@ #include "gm.h" #include "SkCanvas.h" +#include "SkPicture.h" +#include "SkPictureImageFilter.h" +#include "SkPictureRecorder.h" +#include "SkSurface.h" + class LcdTextGM : public skiagm::GM { public: @@ -121,8 +126,6 @@ private: typedef skiagm::GM INHERITED; }; -#include "SkSurface.h" - // ensure that we respect the SkPixelGeometry in SurfaceProps class LcdTextProps : public skiagm::GM { static void DrawText(SkCanvas* canvas) { @@ -137,34 +140,66 @@ class LcdTextProps : public skiagm::GM { canvas->restore(); } + static SkSurface* MakeSurface(SkCanvas* canvas, const SkImageInfo& info, SkPixelGeometry geo) { + SkSurfaceProps props = SkSurfaceProps(0, geo); + SkSurface* surface = canvas->newSurface(info, &props); + + if (!surface) { + surface = SkSurface::NewRaster(info, &props); + } + + return surface; + } + protected: SkString onShortName() SK_OVERRIDE { return SkString("lcdtextprops"); } - SkISize onISize() SK_OVERRIDE { return SkISize::Make(230, 120); } + SkISize onISize() SK_OVERRIDE { return SkISize::Make(230, 230); } uint32_t onGetFlags() const SK_OVERRIDE { return kSkip565_Flag; } + virtual void onOnceBeforeDraw() SK_OVERRIDE { + fInfo = SkImageInfo::MakeN32Premul(100, 100); + SkPictureRecorder recorder; + DrawText(recorder.beginRecording(SkIntToScalar(fInfo.width()), + SkIntToScalar(fInfo.height()))); + SkAutoTUnref pic(recorder.endRecording()); + SkAutoTUnref filter(SkPictureImageFilter::Create(pic.get())); + fFilterPaint.setImageFilter(filter.get()); + } + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { const SkPixelGeometry geos[] = { kRGB_H_SkPixelGeometry, kUnknown_SkPixelGeometry, }; - const SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); for (size_t i = 0; i < SK_ARRAY_COUNT(geos); ++i) { - SkSurfaceProps props = SkSurfaceProps(0, geos[i]); - SkAutoTUnref surf(canvas->newSurface(info, &props)); - if (!surf) { - surf.reset(SkSurface::NewRaster(info, &props)); - } + SkAutoTUnref surf(MakeSurface(canvas, fInfo, geos[i])); DrawText(surf->getCanvas()); - surf->draw(canvas, SkIntToScalar(i * (info.width() + 10)), 0, NULL); + surf->draw(canvas, SkIntToScalar(i * (fInfo.width() + 10)), 0, NULL); + } + + for (size_t i = 0; i < SK_ARRAY_COUNT(geos); ++i) { + SkAutoTUnref surf(MakeSurface(canvas, fInfo, geos[i])); + surf->getCanvas()->saveLayer(NULL, &fFilterPaint); + surf->getCanvas()->restore(); + surf->draw(canvas, + SkIntToScalar(i * (fInfo.width() + 10)), + SkIntToScalar(fInfo.height() + 10), + NULL); } } + +private: + SkPaint fFilterPaint; + SkImageInfo fInfo; + + typedef skiagm::GM INHERITED; }; ///////////////////////////////////////////////////////////////////////////////