sk_sp<SkFlattenable> SkLocalMatrixShader::CreateProc(SkReadBuffer& buffer) { SkMatrix lm; buffer.readMatrix(&lm); auto baseShader(buffer.readShader()); if (!baseShader) { return nullptr; } return baseShader->makeWithLocalMatrix(lm); }
void drawScene(SkCanvas* canvas, const SkMatrix& matrix, const SkMatrix& localMatrix, unsigned tileMode) { SkASSERT(tileMode < SK_ARRAY_COUNT(kTileConfigs)); SkPaint paint; paint.setStyle(SkPaint::kFill_Style); paint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY)); canvas->save(); canvas->concat(matrix); canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint); canvas->drawRect(SkRect::MakeXYWH(fSceneSize * 1.1f, 0, fSceneSize, fSceneSize), paint); auto pictureShader = SkShader::MakePictureShader(fPicture, kTileConfigs[tileMode].tmx, kTileConfigs[tileMode].tmy, fUseLocalMatrixWrapper ? nullptr : &localMatrix, nullptr); paint.setShader(fUseLocalMatrixWrapper ? pictureShader->makeWithLocalMatrix(localMatrix) : pictureShader); canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint); canvas->translate(fSceneSize * 1.1f, 0); auto bitmapShader = SkShader::MakeBitmapShader(fBitmap, kTileConfigs[tileMode].tmx, kTileConfigs[tileMode].tmy, fUseLocalMatrixWrapper ? nullptr : &localMatrix); paint.setShader(fUseLocalMatrixWrapper ? bitmapShader->makeWithLocalMatrix(localMatrix) : bitmapShader); canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint); canvas->restore(); }