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 "CanvasProperty.h"
20021693b967a2c5556dddd183eb0247df4079e1adStan Iliev#include <utils/RefBase.h>
21021693b967a2c5556dddd183eb0247df4079e1adStan Iliev#include <SkCanvas.h>
22021693b967a2c5556dddd183eb0247df4079e1adStan Iliev#include <SkDrawable.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,
31021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            uirenderer::CanvasPropertyPrimitive* top, uirenderer::CanvasPropertyPrimitive* right,
32021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            uirenderer::CanvasPropertyPrimitive* bottom, uirenderer::CanvasPropertyPrimitive* rx,
33021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            uirenderer::CanvasPropertyPrimitive* ry, uirenderer::CanvasPropertyPaint* p)
34021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            : mLeft(left)
35021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mTop(top)
36021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mRight(right)
37021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mBottom(bottom)
38021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mRx(rx)
39021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mRy(ry)
40021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mPaint(p) {}
41021693b967a2c5556dddd183eb0247df4079e1adStan Iliev
42021693b967a2c5556dddd183eb0247df4079e1adStan Ilievprotected:
43021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    virtual SkRect onGetBounds() override {
44021693b967a2c5556dddd183eb0247df4079e1adStan Iliev        return SkRect::MakeLTRB(mLeft->value, mTop->value, mRight->value, mBottom->value);
45021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    }
46021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    virtual void onDraw(SkCanvas* canvas) override {
47021693b967a2c5556dddd183eb0247df4079e1adStan Iliev        SkRect rect = SkRect::MakeLTRB(mLeft->value, mTop->value, mRight->value, mBottom->value);
48021693b967a2c5556dddd183eb0247df4079e1adStan Iliev        canvas->drawRoundRect(rect, mRx->value, mRy->value, mPaint->value);
49021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    }
50021693b967a2c5556dddd183eb0247df4079e1adStan Iliev
51021693b967a2c5556dddd183eb0247df4079e1adStan Ilievprivate:
52021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mLeft;
53021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mTop;
54021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mRight;
55021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mBottom;
56021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mRx;
57021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mRy;
58021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPaint> mPaint;
59021693b967a2c5556dddd183eb0247df4079e1adStan Iliev};
60021693b967a2c5556dddd183eb0247df4079e1adStan Iliev
61021693b967a2c5556dddd183eb0247df4079e1adStan Ilievclass AnimatedCircle : public SkDrawable {
62021693b967a2c5556dddd183eb0247df4079e1adStan Ilievpublic:
63021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    AnimatedCircle(uirenderer::CanvasPropertyPrimitive* x, uirenderer::CanvasPropertyPrimitive* y,
64021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            uirenderer::CanvasPropertyPrimitive* radius, uirenderer::CanvasPropertyPaint* paint)
65021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            : mX(x)
66021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mY(y)
67021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mRadius(radius)
68021693b967a2c5556dddd183eb0247df4079e1adStan Iliev            , mPaint(paint) {}
69021693b967a2c5556dddd183eb0247df4079e1adStan Iliev
70021693b967a2c5556dddd183eb0247df4079e1adStan Ilievprotected:
71021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    virtual SkRect onGetBounds() override {
72021693b967a2c5556dddd183eb0247df4079e1adStan Iliev        const float x = mX->value;
73021693b967a2c5556dddd183eb0247df4079e1adStan Iliev        const float y = mY->value;
74021693b967a2c5556dddd183eb0247df4079e1adStan Iliev        const float radius = mRadius->value;
75021693b967a2c5556dddd183eb0247df4079e1adStan Iliev        return SkRect::MakeLTRB(x - radius, y - radius, x + radius, y + radius);
76021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    }
77021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    virtual void onDraw(SkCanvas* canvas) override {
78021693b967a2c5556dddd183eb0247df4079e1adStan Iliev        canvas->drawCircle(mX->value, mY->value, mRadius->value, mPaint->value);
79021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    }
80021693b967a2c5556dddd183eb0247df4079e1adStan Iliev
81021693b967a2c5556dddd183eb0247df4079e1adStan Ilievprivate:
82021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mX;
83021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mY;
84021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPrimitive> mRadius;
85021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    sp<uirenderer::CanvasPropertyPaint> mPaint;
86021693b967a2c5556dddd183eb0247df4079e1adStan Iliev};
87021693b967a2c5556dddd183eb0247df4079e1adStan Iliev
88021693b967a2c5556dddd183eb0247df4079e1adStan Iliev}; // namespace skiapipeline
89021693b967a2c5556dddd183eb0247df4079e1adStan Iliev}; // namespace uirenderer
90021693b967a2c5556dddd183eb0247df4079e1adStan Iliev}; // namespace android
91