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