AnimatedDrawables.h revision 021693b967a2c5556dddd183eb0247df4079e1ad
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