1021693b967a2c5556dddd183eb0247df4079e1adStan Iliev/* 2021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * Copyright (C) 2016 The Android Open Source Project 3021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * 4021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * Licensed under the Apache License, Version 2.0 (the "License"); 5021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * you may not use this file except in compliance with the License. 6021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * You may obtain a copy of the License at 7021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * 8021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * http://www.apache.org/licenses/LICENSE-2.0 9021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * 10021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * Unless required by applicable law or agreed to in writing, software 11021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * distributed under the License is distributed on an "AS IS" BASIS, 12021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * See the License for the specific language governing permissions and 14021693b967a2c5556dddd183eb0247df4079e1adStan Iliev * limitations under the License. 15021693b967a2c5556dddd183eb0247df4079e1adStan Iliev */ 16021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 17021693b967a2c5556dddd183eb0247df4079e1adStan Iliev#pragma once 18021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 19021693b967a2c5556dddd183eb0247df4079e1adStan Iliev#include <SkCanvas.h> 20021693b967a2c5556dddd183eb0247df4079e1adStan Iliev#include <SkDrawable.h> 211bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck#include <utils/RefBase.h> 221bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck#include "CanvasProperty.h" 23021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 24021693b967a2c5556dddd183eb0247df4079e1adStan Ilievnamespace android { 25021693b967a2c5556dddd183eb0247df4079e1adStan Ilievnamespace uirenderer { 26021693b967a2c5556dddd183eb0247df4079e1adStan Ilievnamespace skiapipeline { 27021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 28021693b967a2c5556dddd183eb0247df4079e1adStan Ilievclass AnimatedRoundRect : public SkDrawable { 29021693b967a2c5556dddd183eb0247df4079e1adStan Ilievpublic: 30021693b967a2c5556dddd183eb0247df4079e1adStan Iliev AnimatedRoundRect(uirenderer::CanvasPropertyPrimitive* left, 311bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck uirenderer::CanvasPropertyPrimitive* top, 321bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck uirenderer::CanvasPropertyPrimitive* right, 331bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck uirenderer::CanvasPropertyPrimitive* bottom, 341bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck uirenderer::CanvasPropertyPrimitive* rx, 351bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck uirenderer::CanvasPropertyPrimitive* ry, uirenderer::CanvasPropertyPaint* p) 361bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck : mLeft(left), mTop(top), mRight(right), mBottom(bottom), mRx(rx), mRy(ry), mPaint(p) {} 37021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 38021693b967a2c5556dddd183eb0247df4079e1adStan Ilievprotected: 39021693b967a2c5556dddd183eb0247df4079e1adStan Iliev virtual SkRect onGetBounds() override { 40021693b967a2c5556dddd183eb0247df4079e1adStan Iliev return SkRect::MakeLTRB(mLeft->value, mTop->value, mRight->value, mBottom->value); 41021693b967a2c5556dddd183eb0247df4079e1adStan Iliev } 42021693b967a2c5556dddd183eb0247df4079e1adStan Iliev virtual void onDraw(SkCanvas* canvas) override { 43021693b967a2c5556dddd183eb0247df4079e1adStan Iliev SkRect rect = SkRect::MakeLTRB(mLeft->value, mTop->value, mRight->value, mBottom->value); 44021693b967a2c5556dddd183eb0247df4079e1adStan Iliev canvas->drawRoundRect(rect, mRx->value, mRy->value, mPaint->value); 45021693b967a2c5556dddd183eb0247df4079e1adStan Iliev } 46021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 47021693b967a2c5556dddd183eb0247df4079e1adStan Ilievprivate: 48021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mLeft; 49021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mTop; 50021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mRight; 51021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mBottom; 52021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mRx; 53021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mRy; 54021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPaint> mPaint; 55021693b967a2c5556dddd183eb0247df4079e1adStan Iliev}; 56021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 57021693b967a2c5556dddd183eb0247df4079e1adStan Ilievclass AnimatedCircle : public SkDrawable { 58021693b967a2c5556dddd183eb0247df4079e1adStan Ilievpublic: 59021693b967a2c5556dddd183eb0247df4079e1adStan Iliev AnimatedCircle(uirenderer::CanvasPropertyPrimitive* x, uirenderer::CanvasPropertyPrimitive* y, 601bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck uirenderer::CanvasPropertyPrimitive* radius, 611bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck uirenderer::CanvasPropertyPaint* paint) 621bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck : mX(x), mY(y), mRadius(radius), mPaint(paint) {} 63021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 64021693b967a2c5556dddd183eb0247df4079e1adStan Ilievprotected: 65021693b967a2c5556dddd183eb0247df4079e1adStan Iliev virtual SkRect onGetBounds() override { 66021693b967a2c5556dddd183eb0247df4079e1adStan Iliev const float x = mX->value; 67021693b967a2c5556dddd183eb0247df4079e1adStan Iliev const float y = mY->value; 68021693b967a2c5556dddd183eb0247df4079e1adStan Iliev const float radius = mRadius->value; 69021693b967a2c5556dddd183eb0247df4079e1adStan Iliev return SkRect::MakeLTRB(x - radius, y - radius, x + radius, y + radius); 70021693b967a2c5556dddd183eb0247df4079e1adStan Iliev } 71021693b967a2c5556dddd183eb0247df4079e1adStan Iliev virtual void onDraw(SkCanvas* canvas) override { 72021693b967a2c5556dddd183eb0247df4079e1adStan Iliev canvas->drawCircle(mX->value, mY->value, mRadius->value, mPaint->value); 73021693b967a2c5556dddd183eb0247df4079e1adStan Iliev } 74021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 75021693b967a2c5556dddd183eb0247df4079e1adStan Ilievprivate: 76021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mX; 77021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mY; 78021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPrimitive> mRadius; 79021693b967a2c5556dddd183eb0247df4079e1adStan Iliev sp<uirenderer::CanvasPropertyPaint> mPaint; 80021693b967a2c5556dddd183eb0247df4079e1adStan Iliev}; 81021693b967a2c5556dddd183eb0247df4079e1adStan Iliev 821bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck}; // namespace skiapipeline 831bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck}; // namespace uirenderer 841bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck}; // namespace android 85