| Index: gm/bitmaprect.cpp
|
| diff --git a/gm/bitmaprect.cpp b/gm/bitmaprect.cpp
|
| index badffb9a939060c0e4bdd04c5a29bab3f559cae4..53a855e7782e1e6c7f5cb4cb16f1468c0a21c515 100644
|
| --- a/gm/bitmaprect.cpp
|
| +++ b/gm/bitmaprect.cpp
|
| @@ -233,6 +233,49 @@ private:
|
| typedef skiagm::GM INHERITED;
|
| };
|
|
|
| +class BitmapRectRounding : public skiagm::GM {
|
| + SkBitmap fBM;
|
| +
|
| +public:
|
| + BitmapRectRounding() {}
|
| +
|
| +protected:
|
| + SkString onShortName() SK_OVERRIDE {
|
| + SkString str;
|
| + str.printf("bitmaprect_rounding");
|
| + return str;
|
| + }
|
| +
|
| + SkISize onISize() SK_OVERRIDE {
|
| + return SkISize::Make(640, 480);
|
| + }
|
| +
|
| + void onOnceBeforeDraw() SK_OVERRIDE {
|
| + fBM.allocN32Pixels(10, 10);
|
| + fBM.eraseColor(SK_ColorBLUE);
|
| + }
|
| +
|
| + // This choice of coordinates and matrix land the bottom edge of the clip (and bitmap dst)
|
| + // at exactly 1/2 pixel boundary. However, drawBitmapRect may lose precision along the way.
|
| + // If it does, we may see a red-line at the bottom, instead of the bitmap exactly matching
|
| + // the clip (in which case we should see all blue).
|
| + // The correct image should be all blue.
|
| + void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
| + SkPaint paint;
|
| + paint.setColor(SK_ColorRED);
|
| +
|
| + const SkRect r = SkRect::MakeXYWH(1, 1, 110, 114);
|
| + canvas->scale(0.9f, 0.9f);
|
| +
|
| + // the drawRect shows the same problem as clipRect(r) followed by drawcolor(red)
|
| + canvas->drawRect(r, paint);
|
| + canvas->drawBitmapRect(fBM, NULL, r, NULL);
|
| + }
|
| +
|
| +private:
|
| + typedef skiagm::GM INHERITED;
|
| +};
|
| +
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| static skiagm::GM* MyFactory0(void*) { return new DrawBitmapRect2(false); }
|
| @@ -254,3 +297,5 @@ static skiagm::GMRegistry reg2(MyFactory2);
|
| static skiagm::GMRegistry reg3(MyFactory3);
|
| static skiagm::GMRegistry reg4(MyFactory4);
|
| #endif
|
| +
|
| +DEF_GM( return new BitmapRectRounding; )
|
|
|