53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  * Copyright 2013 Google Inc.
 | |
|  *
 | |
|  * Use of this source code is governed by a BSD-style license that can be
 | |
|  * found in the LICENSE file.
 | |
|  */
 | |
| 
 | |
| #include "gm/gm.h"
 | |
| #include "include/core/SkBitmap.h"
 | |
| #include "include/core/SkCanvas.h"
 | |
| #include "include/core/SkImage.h"
 | |
| #include "include/core/SkPaint.h"
 | |
| #include "include/core/SkPath.h"
 | |
| #include "include/core/SkRect.h"
 | |
| #include "include/core/SkScalar.h"
 | |
| 
 | |
| static sk_sp<SkImage> make_bm() {
 | |
|     SkBitmap bm;
 | |
|     bm.allocN32Pixels(60, 60);
 | |
|     bm.eraseColor(0);
 | |
| 
 | |
|     SkCanvas canvas(bm);
 | |
|     SkPaint paint;
 | |
|     canvas.drawPath(SkPath::Polygon({{6,6}, {6,54}, {30,54}}, false), paint);
 | |
| 
 | |
|     paint.setStyle(SkPaint::kStroke_Style);
 | |
|     canvas.drawRect(SkRect::MakeLTRB(0.5f, 0.5f, 59.5f, 59.5f), paint);
 | |
|     return bm.asImage();
 | |
| }
 | |
| 
 | |
| // This creates a close, but imperfect concatenation of
 | |
| //      scaling the image up by its dst-rect
 | |
| //      scaling the image down by the matrix' scale
 | |
| //  The bug was that for cases like this, we were incorrectly trying to take a
 | |
| //  fast-path in the bitmapshader, but ended up drawing the last col of pixels
 | |
| //  twice. The fix resulted in (a) not taking the fast-path, but (b) drawing
 | |
| //  the image correctly.
 | |
| //
 | |
| DEF_SIMPLE_GM(bitmaprecttest, canvas, 320, 240) {
 | |
|     auto image = make_bm();
 | |
| 
 | |
|     canvas->drawImage(image, 150, 45);
 | |
| 
 | |
|     SkScalar scale = 0.472560018f;
 | |
|     canvas->save();
 | |
|     canvas->scale(scale, scale);
 | |
|     canvas->drawImageRect(image, SkRect::MakeXYWH(100, 100, 128, 128), SkSamplingOptions());
 | |
|     canvas->restore();
 | |
| 
 | |
|     canvas->scale(-1, 1);
 | |
|     canvas->drawImage(image, -310, 45);
 | |
| }
 |