18c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik/* 28c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * Copyright (C) 2014 The Android Open Source Project 38c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * 48c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 58c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * you may not use this file except in compliance with the License. 68c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * You may obtain a copy of the License at 78c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * 88c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * http://www.apache.org/licenses/LICENSE-2.0 98c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * 108c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * Unless required by applicable law or agreed to in writing, software 118c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * distributed under the License is distributed on an "AS IS" BASIS, 128c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * See the License for the specific language governing permissions and 148c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * limitations under the License. 158c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik */ 168c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#ifndef REVEALCLIP_H 178c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#define REVEALCLIP_H 188c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 198c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#include <SkPath.h> 208c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 218c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#include "Rect.h" 228c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 238c271ca63b62061fd22cfee78fd6a574b44476fdChris Craiknamespace android { 248c271ca63b62061fd22cfee78fd6a574b44476fdChris Craiknamespace uirenderer { 258c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 268c271ca63b62061fd22cfee78fd6a574b44476fdChris Craikclass RevealClip { 278c271ca63b62061fd22cfee78fd6a574b44476fdChris Craikpublic: 288c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik RevealClip() 298c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik : mShouldClip(false) 308c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik , mX(0) 318c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik , mY(0) 328c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik , mRadius(0) {} 338c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 34af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik void set(bool shouldClip, float x, float y, float radius) { 358c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik mShouldClip = shouldClip; 368c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik mX = x; 378c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik mY = y; 388c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik mRadius = radius; 398c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 408c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik mPath.rewind(); 418c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik if (mShouldClip) { 428c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik mPath.addCircle(x, y, radius); 438c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 448c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 458c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 468c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik bool willClip() const { 478c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mShouldClip; 488c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 498c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 50af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik void getBounds(Rect* outBounds) const { 51af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik outBounds->set(mX - mRadius, mY - mRadius, 52af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik mX + mRadius, mY + mRadius); 53d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck } 54e248bd1b2c3fcf8088429507e73b31f45ee2544bJohn Reck 55af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik float getRadius() const { return mRadius; } 56e248bd1b2c3fcf8088429507e73b31f45ee2544bJohn Reck float getX() const { return mX; } 57e248bd1b2c3fcf8088429507e73b31f45ee2544bJohn Reck float getY() const { return mY; } 58d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck 598c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik const SkPath* getPath() const { 60e84a208317e0ed388fcdad1e6743c7849acb51b0Chris Craik if (!mShouldClip) return nullptr; 618c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 628c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return &mPath; 638c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 648c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 658c271ca63b62061fd22cfee78fd6a574b44476fdChris Craikprivate: 668c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik bool mShouldClip; 678c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik float mX; 688c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik float mY; 698c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik float mRadius; 708c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik SkPath mPath; 718c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik}; 728c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 738c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik} /* namespace uirenderer */ 748c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik} /* namespace android */ 758c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 768c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#endif /* REVEALCLIP_H */ 77