1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #ifndef REVEALCLIP_H 17 #define REVEALCLIP_H 18 19 #include <SkPath.h> 20 21 #include "Rect.h" 22 23 namespace android { 24 namespace uirenderer { 25 26 class RevealClip { 27 public: 28 RevealClip() 29 : mShouldClip(false) 30 , mX(0) 31 , mY(0) 32 , mRadius(0) {} 33 34 void set(bool shouldClip, float x, float y, float radius) { 35 mShouldClip = shouldClip; 36 mX = x; 37 mY = y; 38 mRadius = radius; 39 40 mPath.rewind(); 41 if (mShouldClip) { 42 mPath.addCircle(x, y, radius); 43 } 44 } 45 46 bool willClip() const { 47 return mShouldClip; 48 } 49 50 void getBounds(Rect* outBounds) const { 51 outBounds->set(mX - mRadius, mY - mRadius, 52 mX + mRadius, mY + mRadius); 53 } 54 55 float getRadius() const { return mRadius; } 56 float getX() const { return mX; } 57 float getY() const { return mY; } 58 59 const SkPath* getPath() const { 60 if (!mShouldClip) return nullptr; 61 62 return &mPath; 63 } 64 65 private: 66 bool mShouldClip; 67 float mX; 68 float mY; 69 float mRadius; 70 SkPath mPath; 71 }; 72 73 } /* namespace uirenderer */ 74 } /* namespace android */ 75 76 #endif /* REVEALCLIP_H */ 77