augmenting fix in 8700 and 8701, be careful NOT to "sort" the result of mapRect
when we only want to proceed if the matrix is nearly identity. Hence we manually apply the matrix to the two "points" of the rect. git-svn-id: http://skia.googlecode.com/svn/trunk@8743 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
ee056a82ae
commit
f707adc4f8
@ -15,6 +15,13 @@ static void make_bm(SkBitmap* bm) {
|
||||
|
||||
SkCanvas canvas(*bm);
|
||||
SkPaint paint;
|
||||
|
||||
SkPath path;
|
||||
path.moveTo(6, 6);
|
||||
path.lineTo(6, 54);
|
||||
path.lineTo(30, 54);
|
||||
canvas.drawPath(path, paint);
|
||||
|
||||
paint.setStyle(SkPaint::kStroke_Style);
|
||||
canvas.drawRect(SkRect::MakeLTRB(0.5f, 0.5f, 59.5f, 59.5f), paint);
|
||||
}
|
||||
@ -34,8 +41,13 @@ static void test_bitmaprect(SkCanvas* canvas) {
|
||||
canvas->drawBitmap(bm, 150, 45, NULL);
|
||||
|
||||
SkScalar scale = 0.472560018f;
|
||||
canvas->save();
|
||||
canvas->scale(scale, scale);
|
||||
canvas->drawBitmapRectToRect(bm, NULL, SkRect::MakeXYWH(100, 100, 128, 128), NULL);
|
||||
canvas->restore();
|
||||
|
||||
canvas->scale(-1, 1);
|
||||
canvas->drawBitmap(bm, -310, 45, NULL);
|
||||
}
|
||||
|
||||
class BitmapRectTestGM : public skiagm::GM {
|
||||
|
@ -45,7 +45,13 @@ static bool just_trans_clamp(const SkMatrix& matrix, const SkBitmap& bitmap) {
|
||||
if (matrix.getType() & SkMatrix::kScale_Mask) {
|
||||
SkRect src, dst;
|
||||
bitmap.getBounds(&src);
|
||||
matrix.mapRect(&dst, src);
|
||||
|
||||
// Can't call mapRect(), since that will fix up inverted rectangles,
|
||||
// e.g. when scale is negative, and we don't want to return true for
|
||||
// those.
|
||||
matrix.mapPoints(SkTCast<SkPoint*>(&dst),
|
||||
SkTCast<const SkPoint*>(&src),
|
||||
2);
|
||||
|
||||
// Now round all 4 edges to device space, and then compare the device
|
||||
// width/height to the original. Note: we must map all 4 and subtract
|
||||
|
Loading…
Reference in New Issue
Block a user