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