1554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv/* 2554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * Copyright (C) 2015 The Android Open Source Project 3554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * 4554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * Licensed under the Apache License, Version 2.0 (the "License"); 5554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * you may not use this file except in compliance with the License. 6554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * You may obtain a copy of the License at 7554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * 8554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * http://www.apache.org/licenses/LICENSE-2.0 9554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * 10554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * Unless required by applicable law or agreed to in writing, software 11554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * distributed under the License is distributed on an "AS IS" BASIS, 12554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * See the License for the specific language governing permissions and 14554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv * limitations under the License. 15554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv */ 16554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 17554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv#include "TestSceneBase.h" 18554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv#include "utils/Color.h" 19554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv#include "tests/common/BitmapAllocationTestUtils.h" 20ee708facf127f2e8bed5970d5c05fa823fcfc1ceLeon Scroggins III#include <SkImagePriv.h> 21554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 22554ffeb8b7c836da43a637c59eedfc617895b19dsergeyvclass BitmapShaders; 23554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 24554ffeb8b7c836da43a637c59eedfc617895b19dsergeyvstatic bool _BitmapShaders( 25554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv BitmapAllocationTestUtils::registerBitmapAllocationScene<BitmapShaders>( 26554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv "bitmapShader", "Draws bitmap shaders with repeat and mirror modes.")); 27554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 28554ffeb8b7c836da43a637c59eedfc617895b19dsergeyvclass BitmapShaders : public TestScene { 29554ffeb8b7c836da43a637c59eedfc617895b19dsergeyvpublic: 30554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv BitmapShaders(BitmapAllocationTestUtils::BitmapAllocator allocator) 31554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv : TestScene() 32554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv , mAllocator(allocator) { } 33554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 34554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv sp<RenderNode> card; 35554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv void createContent(int width, int height, Canvas& canvas) override { 36554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv canvas.drawColor(Color::Grey_200, SkBlendMode::kSrcOver); 37554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv sk_sp<Bitmap> hwuiBitmap = mAllocator(200, 200, kRGBA_8888_SkColorType, 38554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv [](SkBitmap& skBitmap) { 39554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv skBitmap.eraseColor(Color::White); 40554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv SkCanvas skCanvas(skBitmap); 41554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv SkPaint skPaint; 42554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv skPaint.setColor(Color::Red_500); 43554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv skCanvas.drawRect(SkRect::MakeWH(100, 100), skPaint); 44554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv skPaint.setColor(Color::Blue_500); 45554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv skCanvas.drawRect(SkRect::MakeXYWH(100, 100, 100, 100), skPaint); 46554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv }); 47554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 48554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv SkBitmap bitmap; 49554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv SkPaint paint; 50554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv hwuiBitmap->getSkBitmapForShaders(&bitmap); 51c54b76e97d00497e4fea1aa08ae404bfd4ae875dMatt Sarett sk_sp<SkImage> image = SkMakeImageFromRasterBitmap(bitmap, kNever_SkCopyPixelsMode); 52c54b76e97d00497e4fea1aa08ae404bfd4ae875dMatt Sarett sk_sp<SkShader> repeatShader = image->makeShader( 53554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv SkShader::TileMode::kRepeat_TileMode, 54554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv SkShader::TileMode::kRepeat_TileMode, 55554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv nullptr); 56554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv paint.setShader(std::move(repeatShader)); 57554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv canvas.drawRoundRect(0, 0, 500, 500, 50.0f, 50.0f, paint); 58554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 59c54b76e97d00497e4fea1aa08ae404bfd4ae875dMatt Sarett sk_sp<SkShader> mirrorShader = image->makeShader( 60554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv SkShader::TileMode::kMirror_TileMode, 61554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv SkShader::TileMode::kMirror_TileMode, 62554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv nullptr); 63554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv paint.setShader(std::move(mirrorShader)); 64554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv canvas.drawRoundRect(0, 600, 500, 1100, 50.0f, 50.0f, paint); 65554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv } 66554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 67554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv void doFrame(int frameNr) override { } 68554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv 69554ffeb8b7c836da43a637c59eedfc617895b19dsergeyv BitmapAllocationTestUtils::BitmapAllocator mAllocator; 70ee708facf127f2e8bed5970d5c05fa823fcfc1ceLeon Scroggins III}; 71