Add bigtileimagefilter GM & improvements to toString
This is all the ancillary code from https://codereview.chromium.org/1152553006/ (Fix dst bound reported by SkTileImageFilter). TBR=reed@google.com, senorblanco@google.com Review URL: https://codereview.chromium.org/1169713003
This commit is contained in:
parent
2baef5a1e1
commit
63195181d1
76
gm/bigtileimagefilter.cpp
Normal file
76
gm/bigtileimagefilter.cpp
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Google Inc.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by a BSD-style license that can be
|
||||||
|
* found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "SkBitmapSource.h"
|
||||||
|
#include "SkTileImageFilter.h"
|
||||||
|
#include "gm.h"
|
||||||
|
|
||||||
|
namespace skiagm {
|
||||||
|
|
||||||
|
class BigTileImageFilterGM : public GM {
|
||||||
|
public:
|
||||||
|
BigTileImageFilterGM() {
|
||||||
|
this->setBGColor(0xFF000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
SkString onShortName() override {
|
||||||
|
return SkString("bigtileimagefilter");
|
||||||
|
}
|
||||||
|
|
||||||
|
SkISize onISize() override{
|
||||||
|
return SkISize::Make(kWidth, kHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onOnceBeforeDraw() override {
|
||||||
|
fBitmap.allocN32Pixels(kBitmapSize, kBitmapSize);
|
||||||
|
|
||||||
|
SkCanvas canvas(fBitmap);
|
||||||
|
canvas.clear(0xFF000000);
|
||||||
|
|
||||||
|
SkPaint paint;
|
||||||
|
paint.setColor(SK_ColorRED);
|
||||||
|
paint.setStrokeWidth(3);
|
||||||
|
paint.setStyle(SkPaint::kStroke_Style);
|
||||||
|
|
||||||
|
canvas.drawCircle(SkScalarHalf(kBitmapSize), SkScalarHalf(kBitmapSize),
|
||||||
|
SkScalarHalf(kBitmapSize), paint);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onDraw(SkCanvas* canvas) override {
|
||||||
|
canvas->clear(SK_ColorBLACK);
|
||||||
|
|
||||||
|
SkPaint p;
|
||||||
|
|
||||||
|
SkAutoTUnref<SkBitmapSource> bms(SkBitmapSource::Create(fBitmap));
|
||||||
|
SkAutoTUnref<SkTileImageFilter> tif(SkTileImageFilter::Create(
|
||||||
|
SkRect::MakeWH(SkIntToScalar(kBitmapSize), SkIntToScalar(kBitmapSize)),
|
||||||
|
SkRect::MakeWH(SkIntToScalar(kWidth), SkIntToScalar(kHeight)),
|
||||||
|
bms));
|
||||||
|
p.setImageFilter(tif);
|
||||||
|
|
||||||
|
SkRect bound = SkRect::MakeWH(SkIntToScalar(kWidth), SkIntToScalar(kHeight));
|
||||||
|
canvas->saveLayer(&bound, &p);
|
||||||
|
canvas->restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static const int kWidth = 512;
|
||||||
|
static const int kHeight = 512;
|
||||||
|
static const int kBitmapSize = 64;
|
||||||
|
|
||||||
|
SkBitmap fBitmap;
|
||||||
|
|
||||||
|
typedef GM INHERITED;
|
||||||
|
};
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
DEF_GM( return SkNEW(BigTileImageFilterGM); )
|
||||||
|
|
||||||
|
}
|
@ -16,46 +16,48 @@
|
|||||||
#define HEIGHT 100
|
#define HEIGHT 100
|
||||||
#define MARGIN 12
|
#define MARGIN 12
|
||||||
|
|
||||||
|
static SkBitmap make_bitmap() {
|
||||||
|
SkBitmap bitmap;
|
||||||
|
bitmap.allocN32Pixels(50, 50);
|
||||||
|
SkCanvas canvas(bitmap);
|
||||||
|
canvas.clear(0xFF000000);
|
||||||
|
SkPaint paint;
|
||||||
|
paint.setAntiAlias(true);
|
||||||
|
sk_tool_utils::set_portable_typeface(&paint);
|
||||||
|
paint.setColor(0xD000D000);
|
||||||
|
paint.setTextSize(SkIntToScalar(50));
|
||||||
|
const char* str = "e";
|
||||||
|
canvas.drawText(str, strlen(str), SkIntToScalar(10), SkIntToScalar(45), paint);
|
||||||
|
return bitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace skiagm {
|
namespace skiagm {
|
||||||
|
|
||||||
class TileImageFilterGM : public GM {
|
class TileImageFilterGM : public GM {
|
||||||
public:
|
public:
|
||||||
TileImageFilterGM() : fInitialized(false) {
|
TileImageFilterGM() {
|
||||||
this->setBGColor(0xFF000000);
|
this->setBGColor(0xFF000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual SkString onShortName() {
|
SkString onShortName() override {
|
||||||
return SkString("tileimagefilter");
|
return SkString("tileimagefilter");
|
||||||
}
|
}
|
||||||
|
|
||||||
void make_bitmap() {
|
SkISize onISize() override{
|
||||||
fBitmap.allocN32Pixels(50, 50);
|
|
||||||
SkCanvas canvas(fBitmap);
|
|
||||||
canvas.clear(0xFF000000);
|
|
||||||
SkPaint paint;
|
|
||||||
paint.setAntiAlias(true);
|
|
||||||
sk_tool_utils::set_portable_typeface(&paint);
|
|
||||||
paint.setColor(0xD000D000);
|
|
||||||
paint.setTextSize(SkIntToScalar(50));
|
|
||||||
const char* str = "e";
|
|
||||||
canvas.drawText(str, strlen(str), SkIntToScalar(10), SkIntToScalar(45), paint);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual SkISize onISize() {
|
|
||||||
return SkISize::Make(WIDTH, HEIGHT);
|
return SkISize::Make(WIDTH, HEIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void onDraw(SkCanvas* canvas) {
|
void onOnceBeforeDraw() override {
|
||||||
if (!fInitialized) {
|
fBitmap = make_bitmap();
|
||||||
make_bitmap();
|
|
||||||
|
|
||||||
fCheckerboard.allocN32Pixels(80, 80);
|
fCheckerboard.allocN32Pixels(80, 80);
|
||||||
SkCanvas checkerboardCanvas(fCheckerboard);
|
SkCanvas checkerboardCanvas(fCheckerboard);
|
||||||
sk_tool_utils::draw_checkerboard(&checkerboardCanvas, 0xFFA0A0A0, 0xFF404040, 8);
|
sk_tool_utils::draw_checkerboard(&checkerboardCanvas, 0xFFA0A0A0, 0xFF404040, 8);
|
||||||
|
}
|
||||||
|
|
||||||
fInitialized = true;
|
void onDraw(SkCanvas* canvas) override {
|
||||||
}
|
|
||||||
canvas->clear(SK_ColorBLACK);
|
canvas->clear(SK_ColorBLACK);
|
||||||
|
|
||||||
int x = 0, y = 0;
|
int x = 0, y = 0;
|
||||||
@ -109,14 +111,14 @@ protected:
|
|||||||
canvas->restore();
|
canvas->restore();
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
SkBitmap fBitmap;
|
||||||
|
SkBitmap fCheckerboard;
|
||||||
|
|
||||||
typedef GM INHERITED;
|
typedef GM INHERITED;
|
||||||
SkBitmap fBitmap, fCheckerboard;
|
|
||||||
bool fInitialized;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static GM* MyFactory(void*) { return new TileImageFilterGM; }
|
DEF_GM( return SkNEW(TileImageFilterGM); )
|
||||||
static GMRegistry reg(MyFactory);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,10 +22,10 @@ public:
|
|||||||
static SkTileImageFilter* Create(const SkRect& srcRect, const SkRect& dstRect,
|
static SkTileImageFilter* Create(const SkRect& srcRect, const SkRect& dstRect,
|
||||||
SkImageFilter* input);
|
SkImageFilter* input);
|
||||||
|
|
||||||
virtual bool onFilterImage(Proxy* proxy, const SkBitmap& src, const Context& ctx,
|
bool onFilterImage(Proxy* proxy, const SkBitmap& src, const Context& ctx,
|
||||||
SkBitmap* dst, SkIPoint* offset) const override;
|
SkBitmap* dst, SkIPoint* offset) const override;
|
||||||
virtual bool onFilterBounds(const SkIRect& src, const SkMatrix&,
|
bool onFilterBounds(const SkIRect& src, const SkMatrix&,
|
||||||
SkIRect* dst) const override;
|
SkIRect* dst) const override;
|
||||||
|
|
||||||
SK_TO_STRING_OVERRIDE()
|
SK_TO_STRING_OVERRIDE()
|
||||||
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTileImageFilter)
|
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTileImageFilter)
|
||||||
|
@ -110,6 +110,15 @@ void SkTileImageFilter::flatten(SkWriteBuffer& buffer) const {
|
|||||||
#ifndef SK_IGNORE_TO_STRING
|
#ifndef SK_IGNORE_TO_STRING
|
||||||
void SkTileImageFilter::toString(SkString* str) const {
|
void SkTileImageFilter::toString(SkString* str) const {
|
||||||
str->appendf("SkTileImageFilter: (");
|
str->appendf("SkTileImageFilter: (");
|
||||||
|
str->appendf("src: %.2f %.2f %.2f %.2f",
|
||||||
|
fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBottom);
|
||||||
|
str->appendf(" dst: %.2f %.2f %.2f %.2f",
|
||||||
|
fDstRect.fLeft, fDstRect.fTop, fDstRect.fRight, fDstRect.fBottom);
|
||||||
|
if (this->getInput(0)) {
|
||||||
|
str->appendf("input: (");
|
||||||
|
this->getInput(0)->toString(str);
|
||||||
|
str->appendf(")");
|
||||||
|
}
|
||||||
str->append(")");
|
str->append(")");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -105,7 +105,18 @@ void SkXfermodeImageFilter::toString(SkString* str) const {
|
|||||||
if (fMode) {
|
if (fMode) {
|
||||||
fMode->toString(str);
|
fMode->toString(str);
|
||||||
}
|
}
|
||||||
str->append("))");
|
str->append(")");
|
||||||
|
if (this->getInput(0)) {
|
||||||
|
str->appendf("foreground: (");
|
||||||
|
this->getInput(0)->toString(str);
|
||||||
|
str->appendf(")");
|
||||||
|
}
|
||||||
|
if (this->getInput(1)) {
|
||||||
|
str->appendf("background: (");
|
||||||
|
this->getInput(1)->toString(str);
|
||||||
|
str->appendf(")");
|
||||||
|
}
|
||||||
|
str->append(")");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user