1 /* 2 * Copyright 2016 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "gm/gm.h" 9 #include "include/core/SkBitmap.h" 10 #include "include/core/SkCanvas.h" 11 #include "include/core/SkColor.h" 12 #include "include/core/SkMatrix.h" 13 #include "include/core/SkPaint.h" 14 #include "include/core/SkRect.h" 15 #include "include/core/SkShader.h" 16 #include "include/core/SkString.h" 17 #include "include/core/SkTileMode.h" 18 #include "tools/Resources.h" 19 20 DEF_SIMPLE_GM_CAN_FAIL(bitmap_subset_shader, canvas, errorMsg, 256, 256) { 21 canvas->clear(SK_ColorWHITE); 22 23 SkBitmap source; 24 if (!GetResourceAsBitmap("images/color_wheel.png", &source)) { 25 *errorMsg = "Could not load images/color_wheel.png. " 26 "Did you forget to set the resourcePath?"; 27 return skiagm::DrawResult::kFail; 28 } 29 SkIRect left = SkIRect::MakeWH(source.width()/2, source.height()); 30 SkIRect right = SkIRect::MakeXYWH(source.width()/2, 0, 31 source.width()/2, source.height()); 32 SkBitmap leftBitmap, rightBitmap; 33 source.extractSubset(&leftBitmap, left); 34 source.extractSubset(&rightBitmap, right); 35 36 SkMatrix matrix; 37 matrix.setScale(0.75f, 0.75f); 38 matrix.preRotate(30.0f); 39 SkTileMode tm = SkTileMode::kRepeat; 40 SkPaint paint; 41 paint.setShader(leftBitmap.makeShader(tm, tm, SkSamplingOptions(), matrix)); 42 canvas->drawRect(SkRect::MakeWH(256.0f, 128.0f), paint); 43 paint.setShader(rightBitmap.makeShader(tm, tm, SkSamplingOptions(), matrix)); 44 canvas->drawRect(SkRect::MakeXYWH(0, 128.0f, 256.0f, 128.0f), paint); 45 return skiagm::DrawResult::kOk; 46 } 47