Index: gm/lcdtext.cpp |
diff --git a/gm/lcdtext.cpp b/gm/lcdtext.cpp |
index 3fe9fa2fbc179c5f8e504aa7a6dd0b2fa9b0504f..61bf9fedc1f882de081114ef7ff32d7961e07135 100644 |
--- a/gm/lcdtext.cpp |
+++ b/gm/lcdtext.cpp |
@@ -12,6 +12,10 @@ |
#include "gm.h" |
#include "SkCanvas.h" |
+#include "SkPicture.h" |
+#include "SkPictureImageFilter.h" |
+#include "SkPictureRecorder.h" |
+ |
class LcdTextGM : public skiagm::GM { |
public: |
LcdTextGM() { |
@@ -137,6 +141,17 @@ 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"); |
@@ -155,15 +170,29 @@ protected: |
}; |
const SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); |
+ SkPictureRecorder recorder; |
reed1
2014/11/19 16:39:24
maybe we can move this building-the-paint into the
f(malita)
2014/11/19 17:08:59
Done.
|
+ DrawText(recorder.beginRecording(SkIntToScalar(info.width()), |
+ SkIntToScalar(info.height()))); |
+ SkAutoTUnref<SkPicture> pic(recorder.endRecording()); |
+ SkAutoTUnref<SkImageFilter> filter(SkPictureImageFilter::Create(pic.get())); |
+ SkPaint filterPaint; |
+ filterPaint.setImageFilter(filter.get()); |
+ |
for (size_t i = 0; i < SK_ARRAY_COUNT(geos); ++i) { |
- SkSurfaceProps props = SkSurfaceProps(0, geos[i]); |
- SkAutoTUnref<SkSurface> surf(canvas->newSurface(info, &props)); |
- if (!surf) { |
- surf.reset(SkSurface::NewRaster(info, &props)); |
- } |
+ SkAutoTUnref<SkSurface> surf(MakeSurface(canvas, info, geos[i])); |
DrawText(surf->getCanvas()); |
surf->draw(canvas, SkIntToScalar(i * (info.width() + 10)), 0, NULL); |
} |
+ |
+ for (size_t i = 0; i < SK_ARRAY_COUNT(geos); ++i) { |
+ SkAutoTUnref<SkSurface> surf(MakeSurface(canvas, info, geos[i])); |
+ surf->getCanvas()->saveLayer(NULL, &filterPaint); |
+ surf->getCanvas()->restore(); |
+ surf->draw(canvas, |
+ SkIntToScalar(i * (info.width() + 10)), |
+ SkIntToScalar(info.height() + 10), |
+ NULL); |
+ } |
} |
}; |